guai a spacchettare la string base64

Ho una string di merkle codificata in base64 come descritto qui https://www.ietf.org/rfc/rfc6962.txt – Sto provando a decomprimere / recuperare il certificato da leaf_input ma non ottenendo abbastanza i dati di cui ho bisogno. Utilizzando un decodificatore base64 standard http://string-functions.com/base64decode.aspx posso vedere che c'è un certificato ssl codificato in binario imballato all'interno della string.

$raw = "AAAAAAFP7hcgYQABgMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5EABIswggSHoAMCAQICEGR1GjEsJZ5ucwLx2++1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI"; 

Ho provato a utilizzare i passaggi di questa discussione come estrarre il certificato codificato DER dalla string base64 per decomprimere e mentre riesco a vedere alcuni dei risultati binari sembra incompleto.

Quando scrivo l'output binario su un file e salvo con estensione .der ed eseguo, viene visualizzato un errore

"Questo file non è valido per l'uso come segue: Certificato di sicurezza".

Tuttavia, la string codificata base64 nell'esempio sull'altro thread funziona mentre con la mia solo parzialmente.

Ecco lo script che sto usando per decomprimere.

 <?php function mtl_to_x509($base64str) { $raw = base64_decode($base64str); // Parse the decoded string $cert_length = unpack('N', chr(0).substr($raw, 12, 3))[1]; $cert_as_asn1 = substr($raw, 0, $cert_length); print_r($cert_as_asn1); $file = 'C:/test.der'; file_put_contents($file, $cert_as_asn1); } $raw = "AAAAAAFP7hcgYQABgMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5EABIswggSHoAMCAQICEGR1GjEsJZ5ucwLx2++1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI"; print mtl_to_x509($raw); ?> 

Nella risposta vedo i dati codificati in formato binario ma non credo sia completo perché quando eseguo il file ottengo l'errore sopra citato.

Non sono sicuro che queste due righe siano corrette ma non sono sicuro di come posso determinarlo.

 $cert_length = unpack('N', chr(0).substr($raw, 12, 3))[1]; $cert_as_asn1 = substr($raw, 0, $cert_length); 

qualche idea?

Ho una string foglia merkle codificata in base64 …

Sembra che tu abbia davvero un timestamp del certificato firmato. Non c'è un certificato all'interno di questo, solo il certificato TBS:

 3.2. Structure of the Signed Certificate Timestamp enum { certificate_timestamp(0), tree_hash(1), (255) } SignatureType; enum { v1(0), (255) } Version; struct { opaque key_id[32]; } LogID; opaque TBSCertificate<1..2^24-1>; struct { opaque issuer_key_hash[32]; TBSCertificate tbs_certificate; } PreCert; opaque CtExtensions<0..2^16-1>; 

Per get il certificato reale è necessario anche la firma dell'emittente che non si possiede:

 Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING } 

Questo certificato TBS inizia all'offset 47 (1163 ottetti). I dati estratti possono essere openssl asn1parse -inform der in openssl asn1parse -inform der where puoi visualizzare questa struttura:

  0:d=0 hl=4 l=1159 cons: SEQUENCE 4:d=1 hl=2 l= 3 cons: cont [ 0 ] 6:d=2 hl=2 l= 1 prim: INTEGER :02 9:d=1 hl=2 l= 16 prim: INTEGER :64751A312C259E6E7302F1DBED1793C2 27:d=1 hl=2 l= 13 cons: SEQUENCE 29:d=2 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption 40:d=2 hl=2 l= 0 prim: NULL 42:d=1 hl=2 l= 119 cons: SEQUENCE 44:d=2 hl=2 l= 11 cons: SET 46:d=3 hl=2 l= 9 cons: SEQUENCE 48:d=4 hl=2 l= 3 prim: OBJECT :countryName 53:d=4 hl=2 l= 2 prim: PRINTABLESTRING :US 57:d=2 hl=2 l= 29 cons: SET 59:d=3 hl=2 l= 27 cons: SEQUENCE 61:d=4 hl=2 l= 3 prim: OBJECT :organizationName 66:d=4 hl=2 l= 20 prim: PRINTABLESTRING :Symantec Corporation 88:d=2 hl=2 l= 31 cons: SET 90:d=3 hl=2 l= 29 cons: SEQUENCE 92:d=4 hl=2 l= 3 prim: OBJECT :organizationalUnitName 97:d=4 hl=2 l= 22 prim: PRINTABLESTRING :Symantec Trust Network 121:d=2 hl=2 l= 40 cons: SET 123:d=3 hl=2 l= 38 cons: SEQUENCE 125:d=4 hl=2 l= 3 prim: OBJECT :commonName 130:d=4 hl=2 l= 31 prim: PRINTABLESTRING :Symantec Class 3 EV SSL CA - G3 163:d=1 hl=2 l= 30 cons: SEQUENCE 165:d=2 hl=2 l= 13 prim: UTCTIME :150921000000Z 180:d=2 hl=2 l= 13 prim: UTCTIME :161022235959Z 195:d=1 hl=4 l= 295 cons: SEQUENCE 199:d=2 hl=2 l= 19 cons: SET 201:d=3 hl=2 l= 17 cons: SEQUENCE 203:d=4 hl=2 l= 11 prim: OBJECT :jurisdictionCountryName 216:d=4 hl=2 l= 2 prim: PRINTABLESTRING :NZ 220:d=2 hl=2 l= 29 cons: SET 222:d=3 hl=2 l= 27 cons: SEQUENCE 224:d=4 hl=2 l= 3 prim: OBJECT :businessCategory 229:d=4 hl=2 l= 20 prim: PRINTABLESTRING :Private Organization 251:d=2 hl=2 l= 14 cons: SET 253:d=3 hl=2 l= 12 cons: SEQUENCE 255:d=4 hl=2 l= 3 prim: OBJECT :serialNumber 260:d=4 hl=2 l= 5 prim: PRINTABLESTRING :35976 267:d=2 hl=2 l= 11 cons: SET 269:d=3 hl=2 l= 9 cons: SEQUENCE 271:d=4 hl=2 l= 3 prim: OBJECT :countryName 276:d=4 hl=2 l= 2 prim: PRINTABLESTRING :NZ 280:d=2 hl=2 l= 13 cons: SET 282:d=3 hl=2 l= 11 cons: SEQUENCE 284:d=4 hl=2 l= 3 prim: OBJECT :postalCode 289:d=4 hl=2 l= 4 prim: UTF8STRING :1010 295:d=2 hl=2 l= 20 cons: SET 297:d=3 hl=2 l= 18 cons: SEQUENCE 299:d=4 hl=2 l= 3 prim: OBJECT :stateOrProvinceName 304:d=4 hl=2 l= 11 prim: UTF8STRING :New Zealand 317:d=2 hl=2 l= 17 cons: SET 319:d=3 hl=2 l= 15 cons: SEQUENCE 321:d=4 hl=2 l= 3 prim: OBJECT :localityName 326:d=4 hl=2 l= 8 prim: UTF8STRING :Auckland 336:d=2 hl=2 l= 54 cons: SET 338:d=3 hl=2 l= 52 cons: SEQUENCE 340:d=4 hl=2 l= 3 prim: OBJECT :streetAddress 345:d=4 hl=2 l= 45 prim: UTF8STRING :Ground Floor, Anz Centre, 23-29 Albert Street 392:d=2 hl=2 l= 37 cons: SET 394:d=3 hl=2 l= 35 cons: SEQUENCE 396:d=4 hl=2 l= 3 prim: OBJECT :organizationName 401:d=4 hl=2 l= 28 prim: UTF8STRING :ANZ Bank New Zealand Limited 431:d=2 hl=2 l= 25 cons: SET 433:d=3 hl=2 l= 23 cons: SEQUENCE 435:d=4 hl=2 l= 3 prim: OBJECT :organizationalUnitName 440:d=4 hl=2 l= 16 prim: UTF8STRING :Web Technologies 458:d=2 hl=2 l= 34 cons: SET 460:d=3 hl=2 l= 32 cons: SEQUENCE 462:d=4 hl=2 l= 3 prim: OBJECT :commonName 467:d=4 hl=2 l= 25 prim: UTF8STRING :cdn.Pre-prod-sdpanz.co.nz 494:d=1 hl=4 l= 290 cons: SEQUENCE 498:d=2 hl=2 l= 13 cons: SEQUENCE 500:d=3 hl=2 l= 9 prim: OBJECT :rsaEncryption 511:d=3 hl=2 l= 0 prim: NULL 513:d=2 hl=4 l= 271 prim: BIT STRING 788:d=1 hl=4 l= 371 cons: cont [ 3 ] 792:d=2 hl=4 l= 367 cons: SEQUENCE 796:d=3 hl=2 l= 36 cons: SEQUENCE 798:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Subject Alternative Name 803:d=4 hl=2 l= 29 prim: OCTET STRING [HEX DUMP]:301B821963646E2E7072652D70726F642D736470616E7A2E636F2E6E7A 834:d=3 hl=2 l= 9 cons: SEQUENCE 836:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Basic Constraints 841:d=4 hl=2 l= 2 prim: OCTET STRING [HEX DUMP]:3000 845:d=3 hl=2 l= 14 cons: SEQUENCE 847:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage 852:d=4 hl=2 l= 1 prim: BOOLEAN :255 855:d=4 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:030205A0 861:d=3 hl=2 l= 29 cons: SEQUENCE 863:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Extended Key Usage 868:d=4 hl=2 l= 22 prim: OCTET STRING [HEX DUMP]:301406082B0601050507030106082B06010505070302 892:d=3 hl=2 l= 102 cons: SEQUENCE 894:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Certificate Policies 899:d=4 hl=2 l= 95 prim: OCTET STRING [HEX DUMP]:305D305B060B6086480186F84501071706304C302306082B06010505070201161768747470733A2F2F642E73796D63622E636F6D2F637073302506082B0601050507020230191A1768747470733A2F2F642E73796D63622E636F6D2F727061 996:d=3 hl=2 l= 31 cons: SEQUENCE 998:d=4 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier 1003:d=4 hl=2 l= 24 prim: OCTET STRING [HEX DUMP]:301680140159ABE7DD3A0B59A66463D6CF200757D591E76A 1029:d=3 hl=2 l= 43 cons: SEQUENCE 1031:d=4 hl=2 l= 3 prim: OBJECT :X509v3 CRL Distribution Points 1036:d=4 hl=2 l= 36 prim: OCTET STRING [HEX DUMP]:30223020A01EA01C861A687474703A2F2F73722E73796D63622E636F6D2F73722E63726C 1074:d=3 hl=2 l= 87 cons: SEQUENCE 1076:d=4 hl=2 l= 8 prim: OBJECT :Authority Information Access 1086:d=4 hl=2 l= 75 prim: OCTET STRING [HEX DUMP]:3049301F06082B060105050730018613687474703A2F2F73722E73796D63642E636F6D302606082B06010505073002861A687474703A2F2F73722E73796D63622E636F6D2F73722E637274