麻烦解压缩base64字符串

时间:2016-06-07 07:56:52

标签: php

我有一个base64编码的merkle叶字符串,如此处所述https://www.ietf.org/rfc/rfc6962.txt - 我试图从leaf_input解压缩/检索证书,但不能从中获取我需要的数据。使用标准的base64解码器http://string-functions.com/base64decode.aspx我可以看到在字符串中包含了二进制编码的ssl证书。

-----------------------------------------------------------------------
 group    X1    X2    X3    X4     X5    X6    X7     X8     X9    X10 
------- ------ ----- ----- ----- ------ ----- ----- ------ ------ -----
   0    -0.55  -0.13 -0.71 -1.3  -0.096 0.49  0.73  -0.53   0.17  -0.44

   2     -1.5   1.4  -2.1  0.96   -0.2  -0.36 0.33   0.2    0.67  -0.27

   1     -2.3  -0.98 -1.5   1.1   0.87  -0.54  1.2  -0.24   0.31  -0.76

   1     0.24  0.086 -0.78 0.39  -0.17  -0.2  -1.5   -1.1   -1.3  -0.72

   0     0.2   -1.2  0.27   2.1   0.73   1.8  -0.12 -0.45   0.07  -0.29

   1    0.022  0.084 -0.41 0.32  -0.023 0.38  0.57  -0.16  0.0011 -0.76

   2     0.99   0.7  -0.32 -0.25 -0.17  -0.68 -0.59  0.29   0.77  -0.12

   3     -1.3  -1.6  -0.14 0.49   0.61   1.2  0.14  -0.087  -1.2  -0.95

   0    -0.073 -0.86   2   -0.87  0.51  -1.3  -0.94 0.022   0.6   0.68 

   3     1.8   -0.81 -0.4  0.72   2.1   0.19  0.086  1.7    0.19  -0.49
-----------------------------------------------------------------------

我尝试使用此线程how to extract DER encoded certificate from base64 string中的步骤解压缩,而我可以看到一些二进制输出看起来不完整。

当我将二进制输出写入文件并使用.der扩展名保存并运行时,我收到错误消息

  

“此文件无效,可用作以下内容:安全证书”。

但是,另一个线程上的示例中的base64编码字符串确实有效,而我的部分只能部分工作。

这是我用来解压缩的脚本。

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

在响应中,我确实看到二进制编码数据,但我不相信它完整,因为当我运行文件时,我得到上述错误。

我不确定这两行是否正确但不确定我如何确定。

<?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+0Xk8IwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBDbGFzcyAzIEVWIFNTTCBDQSAtIEczMB4XDTE1MDkyMTAwMDAwMFoXDTE2MTAyMjIzNTk1OVowggEnMRMwEQYLKwYBBAGCNzwCAQMTAk5aMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjEOMAwGA1UEBRMFMzU5NzYxCzAJBgNVBAYTAk5aMQ0wCwYDVQQRDAQxMDEwMRQwEgYDVQQIDAtOZXcgWmVhbGFuZDERMA8GA1UEBwwIQXVja2xhbmQxNjA0BgNVBAkMLUdyb3VuZCBGbG9vciwgQW56IENlbnRyZSwgMjMtMjkgQWxiZXJ0IFN0cmVldDElMCMGA1UECgwcQU5aIEJhbmsgTmV3IFplYWxhbmQgTGltaXRlZDEZMBcGA1UECwwQV2ViIFRlY2hub2xvZ2llczEiMCAGA1UEAwwZY2RuLlByZS1wcm9kLXNkcGFuei5jby5uejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpBFlnMiTfysDDFYFLuyGyqeOWHVKkMuVt0RlXG0OdHKUnISLJmtnFMWs+1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI1U7iysE8Nm6X1UK2aZwShMCAwEAAaOCAXMwggFvMCQGA1UdEQQdMBuCGWNkbi5wcmUtcHJvZC1zZHBhbnouY28ubnowCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwYwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUAVmr5906C1mmZGPWzyAHV9WR52owKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NyLnN5bWNiLmNvbS9zci5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Iuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Iuc3ltY2IuY29tL3NyLmNydAAA";

print mtl_to_x509($raw);

?>

任何想法?

1 个答案:

答案 0 :(得分:2)

  

我有一个base64编码的merkle叶子串......

看起来你真的有一个签名的证书时间戳。这个内没有证书,只有TBSCertificate:

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>;

要获得真实证书,您还需要您没有的发行人签名:

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

此TBSCertificate从偏移47(1163个八位字节)开始。提取的数据可以通过管道传输到openssl asn1parse -inform der,您可以在其中查看此结构:

    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