我有一个网络应用程序,允许用户上传pkcs12。我将pkcs12作为二进制存储在数据库中。有什么办法让我知道pkcs12中的证书是自签名的还是CA签名的?
我正在tomcat上运行Java Web应用程序,并且可以使用openssl。
但是,我认为还有一些更重要的事情要解决- 为什么 人们想了解自签名证书。目标是什么?解决了什么问题?在大多数情况下,可能尝试将证书分为自签名和非自签名两堆是错误的方法。更好的方法几乎肯定是要验证任何给定证书都具有来自受信任证书颁发机构的有效签名链,并且与给定证书关联的任何连接均与该证书匹配。
这是我原始答案的其余部分。这可能不是您想要的。
这有点hacky,但是openssl x509命令可以报告发行者和主题。如果主题和发行者相同,则它是自签名的;如果它们不同,则由CA签名。(严格来说,很多自签名证书 也是 由CA自己签名的。)
openssl x509
在测试这一理论时,我进行了一些测试。它运行类似于:
cd /etc/ssl/certs for f in *.0 ; do openssl x509 -in $f -issuer | head -1 > /tmp/$f.issuer ; openssl x509 -in $f -subject | head -1 > /tmp/$f.subject ; done cd /tmp sed -i -e s/issuer=// *.issuer sed -i -e s/subject=// *.subject cd /etc/ssl/certs/ for f in *.0 ; do diff -u /tmp/$f.issuer /tmp/$f.subject ; done
希望这可以帮助。