我需要从证书颁发机构提取 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