У меня есть строчная строка merkle, закодированная base64, как описано здесь https://www.ietf.org/rfc/rfc6962.txt - Я пытаюсь распаковать/получить сертификат из leaf_input, но не совсем получить нужные мне данные. Использование стандартного декодера base64 http://string-functions.com/base64decode.aspx Я вижу, что внутри строки хранится двоичный кодированный сертификат ssl.Проблема с распаковкой base64 string
$raw = "AAAAAAFP7hcgYQABgMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5EABIswggSHoAMCAQICEGR1GjEsJZ5ucwLx2+0Xk8IwDQYJKoZIhvcNAQELBQAwdzELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBDbGFzcyAzIEVWIFNTTCBDQSAtIEczMB4XDTE1MDkyMTAwMDAwMFoXDTE2MTAyMjIzNTk1OVowggEnMRMwEQYLKwYBBAGCNzwCAQMTAk5aMR0wGwYDVQQPExRQcml2YXRlIE9yZ2FuaXphdGlvbjEOMAwGA1UEBRMFMzU5NzYxCzAJBgNVBAYTAk5aMQ0wCwYDVQQRDAQxMDEwMRQwEgYDVQQIDAtOZXcgWmVhbGFuZDERMA8GA1UEBwwIQXVja2xhbmQxNjA0BgNVBAkMLUdyb3VuZCBGbG9vciwgQW56IENlbnRyZSwgMjMtMjkgQWxiZXJ0IFN0cmVldDElMCMGA1UECgwcQU5aIEJhbmsgTmV3IFplYWxhbmQgTGltaXRlZDEZMBcGA1UECwwQV2ViIFRlY2hub2xvZ2llczEiMCAGA1UEAwwZY2RuLlByZS1wcm9kLXNkcGFuei5jby5uejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpBFlnMiTfysDDFYFLuyGyqeOWHVKkMuVt0RlXG0OdHKUnISLJmtnFMWs+1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI1U7iysE8Nm6X1UK2aZwShMCAwEAAaOCAXMwggFvMCQGA1UdEQQdMBuCGWNkbi5wcmUtcHJvZC1zZHBhbnouY28ubnowCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwYwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwHwYDVR0jBBgwFoAUAVmr5906C1mmZGPWzyAHV9WR52owKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3NyLnN5bWNiLmNvbS9zci5jcmwwVwYIKwYBBQUHAQEESzBJMB8GCCsGAQUFBzABhhNodHRwOi8vc3Iuc3ltY2QuY29tMCYGCCsGAQUFBzAChhpodHRwOi8vc3Iuc3ltY2IuY29tL3NyLmNydAAA";
Я попытался с помощью действия, описанные в этой теме how to extract DER encoded certificate from base64 string распаковывать и в то время как я могу увидеть некоторые из двоичного выхода оказывается неполным.
Когда я пишу бинарный вывод в файл и сохранить с расширением .der и запустить его, я получаю сообщение об ошибке говорящее
«Этот файл является недопустимым для использования в качестве следующего: Сертификат безопасности».
Однако строка с кодировкой base64 в примере на другом потоке работает, тогда как с моим только частично.
Вот сценарий, который я использую для распаковки.
<?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);
?>
В ответ я вижу двоичный закодированные данные, но я не верю его полной, потому что, когда я запускаю файл я получаю вышеуказанную ошибку.
Я не уверен, что эти две строки правильные, но не уверены, как я могу это определить.
$cert_length = unpack('N', chr(0).substr($raw, 12, 3))[1];
$cert_as_asn1 = substr($raw, 0, $cert_length);
любые идеи?
я получил что-то вроде этого, после декодирования: [http://pastebin.com/eSFPnwSg](http://pastebin.com/eSFPnwSg) –
Да, это просто прерванный просмотр того, что внутри. Я пытаюсь извлечь сертификат целиком из строки b64. – user3436467
«У меня строка base64 ..» - base64 - это всего лишь способ сделать ASCII из двоичного. Он ничего не говорит о неотъемлемой структуре данных, что означает, что это может быть что угодно. Чтобы узнать, как извлечь сертификат из него, может быть полезно знать неотъемлемую структуру этих данных или, по крайней мере, какую программу вывести эти данные. –