如何使用 OpenSSL 实用程序从 x509 证书中提取 CRL 位置

如何使用 OpenSSL 实用程序从 x509 证书中提取 CRL 位置

我需要从证书颁发机构提取 crl 位置,以便使用它来验证证书。openssl除了使用-text选项并尝试解析输出(这似乎容易出现漏洞)之外,是否可以使用实用程序来实现此目的?

答案1

openssl x509有一些开关来控制输出的格式,并且可以不显示某些字段,但只是CRL 位置似乎不可行。

看来你必须解析输出。

答案2

仍然是一种解析,但至少比 更精确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

相关内容