问题描述
通常情况下,我们使用这个命令写法,可以很方便地进行证书链验签动作。
命令:openssl verify -CAfile ca.crt test.crt
但是,当我们使用的CA不是自签名证书时,就会报错:unable to get local issuer certificate
可能会附带说明(OpenSSL3.0):No store loader found. For standard store loaders you need at least one of the default or base providers available. Did you forget to load them? Info: Global default library context
解决示例
中间CA(示例)
待验签的证书(示例)
验签命令(示例):openssl verify -partial_chain -trusted SubCA.crt cert.crt
说明
1、命令信息
输入命令:openssl verify -help
2、为什么不能使用原来的那个命令
官方文档跳转:verify
重点信息:
原本的写法,要求CA链必须到达根证书,否则就报错。
新的写法(解决示例),使用了 -trusted 告诉OpenSSL说这个中级CA是受信任的,然后使用了 -partial_chain 让OpenSSL接受在这次校验时我们提供的CA链只到中级CA而非到根证书。
官网对Verify流程的说明(OpenSSL V1.1)
附
如果你还想知道更多命令行相关的示例,可以看我的文章:OpenSSL命令行实例
另外,如果你还希望用纯软的方式实现密码学相关的操作
C/C++ 的话就用OpenSSL官方库里的的方法
Java的话,一般是使用Security库以及BC库来实现,我的 github仓库 中有我关于依据这两个库进行密码学相关操作的示例(cryptology文件夹)