Мне нужно извлечь местоположение crl из центра сертификации, чтобы я мог использовать это при проверке сертификатов. Возможно ли это с помощью openssl
утилита, кроме использования -text
вариант и попытка синтаксического анализа вывода (который кажется уязвимым)?
По-прежнему вроде парсинга, но по крайней мере более точного, чем с x509
. Его необходимо улучшить, чтобы лучше учитывать списки, cut -b21-
действительно является ярлыком в случае простого списка из 1 элемента.
openssl asn1parse -in whatever.crt | grep -A 1 'X509v3 CRL Distribution Points' | tail -1 | cut -d: -f 4 | cut -b21- | perl -ne 's/(..)/print chr(hex($1))/ge; END {print "\n"}'
http://cdp.rapidssl.com/RapidSSLTLSRSACAG1.crl
по сравнению с:
openssl x509 -text -in whatever.crt |grep -A4 'CRL Distribution Points'
X509v3 CRL Distribution Points:
Full Name:
URI:http://cdp.rapidssl.com/RapidSSLTLSRSACAG1.crl
Или используя любой язык программирования, у вас может быть что-то близкое, в зависимости от того, насколько базовые библиотеки декодируют вещи для вас:
php -r '$cert = file_get_contents("whatever.crt"); $ssl = openssl_x509_parse($cert); print_r($ssl["extensions"]["crlDistributionPoints"]);'
Full Name:
URI:http://cdp.rapidssl.com/RapidSSLTLSRSACAG1.crl
openssl x509
есть некоторые переключатели для управления форматированием вывода, и можно не отображать некоторые поля, но получить просто расположение CRL кажется невозможным.
Кажется, вы обязаны разбирать вывод.