如何通过命令行获取mycert.pem证书链的SHA256哈希值?
获取证书链SHA256哈希值的命令行方法
嘿,这个需求用OpenSSL就能轻松解决,这是命令行处理证书的标配工具了。我分两种常见场景给你说明:
场景1:获取整个证书链文件的SHA256哈希值
如果你需要的是整个证书链文件本身的SHA256哈希(比如用来验证文件完整性),直接用系统自带的哈希工具就行:
sha256sum mycert.pem
执行后会输出一串SHA256哈希值和文件名,这就是整个证书链文件的哈希结果。
场景2:获取证书链中每个证书的SHA256指纹
如果你需要的是链中每一张单独证书的SHA256指纹(这也是很多人说的“证书链哈希”的常见需求),可以用OpenSSL来遍历提取:
方法一:快速查看所有指纹
openssl crl2pkcs7 -nocrl -certfile mycert.pem | openssl pkcs7 -print_certs -text | grep -A2 "SHA256 Fingerprint"
这个命令会把证书链里的所有证书指纹一次性列出来,格式清晰。
方法二:逐个提取并查看(更灵活)
如果想更清晰地看到每个证书对应的指纹,可以先把链中的证书拆分出来,再逐个计算:
# 把PEM文件中的每个证书拆分到单独的临时文件 awk 'BEGIN {c=0;} /BEGIN CERTIFICATE/ {c++} {print > "cert" c ".pem"}' mycert.pem # 遍历临时证书文件,计算每个的SHA256指纹 for cert in cert*.pem; do echo "=== 证书 $cert 的SHA256指纹 ===" openssl x509 -in "$cert" -noout -fingerprint -sha256 rm "$cert" # 清理临时文件 done
注意事项
- 大部分Linux发行版、macOS都默认预装了OpenSSL和
sha256sum;Windows用户可以安装Git Bash或者官方的OpenSSL二进制包来使用这些命令。 - 如果你的
mycert.pem只有单个证书,那上面的命令也同样适用,只是只会输出一个哈希/指纹。
内容的提问来源于stack exchange,提问作者Leem




