У меня есть строчная строка merkle, основанная на base64, как описано здесь. Https://www.ietf.org/rfc/rfc6962.txt. Я пытаюсь распаковать / получить сертификат из leaf_input, но не совсем получить нужные мне данные. Использование стандартного декодера base64 http://string-functions.com/base64decode.aspx Я вижу, что в строке содержится двоичный кодированный сертификат ssl.
$raw = "AAAAAAFP7hcgYQABgMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5EABIswggSHoAMCAQICEGR1GjEsJZ5ucwLx2++1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI";
Я попытался использовать шаги в этом потоке, как извлечь закодированный DER-сертификат из строки base64 для распаковки, и пока я вижу, что некоторые из двоичного вывода выглядят неполными.
Когда я пишу двоичный вывод в файл и сохраняю его с расширением .der и запускаю его, я получаю сообщение об ошибке
Msgstr "Этот файл недействителен для использования в качестве следующего: Сертификат безопасности".
Тем не менее, строка с кодировкой 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++1ZtL4mhvvVafACHYwb8EFJrOhCCDTmKtNfOMEDke+hlfZS6YVr4qma+rl78DOATaA6dP1sDO3oRjhoO6LCT7ddvPfgNIIUBRzRzZwdBxPRkLS2FMbuCBgboShESEVJp0Q5SgpKBQcG4o5e0Mixe+L9fcLHx+5s23J46oj8GMT1S3SJAEZrJgiNoyJZkuj12hROkNKFqof4wgknG+8EG96qux7BgIg4UN4v54yO7jXunt3TI+VBFFQohkxStntqG/aHoeEI"; print mtl_to_x509($raw); ?>
В ответе я вижу двоичные закодированные данные, но я не верю в его полное, потому что, когда я запускаю файл, я получаю вышеупомянутую ошибку.
Я не уверен, правильны ли эти две строки, но не знаю, как я могу это определить.
$cert_length = unpack('N', chr(0).substr($raw, 12, 3))[1]; $cert_as_asn1 = substr($raw, 0, $cert_length);
есть идеи?