web-dev-qa-db-ja.com

OpenSSLユーティリティを使用してx509証明書からCRLの場所を抽出する方法

認証局からcrlの場所を抽出して、証明書の検証に使用できるようにする必要があります。これは、-textオプションを使用して出力を解析しようとする以外に、opensslユーティリティを使用して可能ですか(脆弱性が発生しやすいようです)?

1
Shawn J. Goff

openssl x509には、出力のフォーマットを制御するためのスイッチがいくつかあり、一部のフィールドを表示しないことも可能ですが、just CRLの場所を取得することはできないようです。

出力を解析する必要があるようです。

1
Gnarfoz

それでも一種の構文解析ですが、少なくとも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
1
Patrick Mevzek