我正在使用OpenSSL,并且需要健全的默认CA列表。我使用的是cURL捆绑提供的 Mozilla的受信任CA列表。但是,我需要拆分这组CA证书,因为OpenSSL文档说:
如果CApath不为NULL,则它指向包含PEM格式的CA证书的目录。每个文件包含一个CA证书。通过CA使用者名称哈希值查找文件,因此必须可用。
例如,ca-bundle.crt直接使用文件可以正常工作:
ca-bundle.crt
openssl-1.0.1g> ./apps/openssl s_client -connect www.google.com:443 -CAfile /home/user/certs/ca-bundle.crt ... Verify return code: 0 (ok) --- DONE
但是指定包含ca-bundle.crt文件的目录不起作用:
openssl-1.0.1g> ./apps/openssl s_client -connect www.google.com:443 -CApath /opt/aspera/certs Verify return code: 20 (unable to get local issuer certificate) --- DONE
我认为这是因为我的文件夹没有遵循文档的要求(即,目录包含PEM格式的CA证书,每个文件都包含一个证书,以哈希值命名)。我的目录只有一捆证书。
如何拆分我的证书包,以遵守OpenSSL的要求,即每个证书都位于单独的文件中?如果也可以进行哈希处理,则可以得到一些好处(不过如果需要的话,如果所有证书都位于单独的文件中,我可以自己编写一个脚本来执行此操作)。
您可以awk在适当的目录中使用来拆分捆绑包,如下所示:
awk
awk 'BEGIN {c=0;} /BEGIN CERT/{c++} { print > "cert." c ".pem"}' < ca-bundle.pem
然后,通过运行c_rehashOpenSSL随附的实用程序来创建OpenSSL所需的链接:
c_rehash
c_rehash .
注意:在非linux平台上使用’gawk’-如上所述,它依赖于GNU特定功能。