-->

发现如果证书是自签名或CA签名(Find if a certificate is self sign

2019-07-29 03:12发布

我有一个Web应用程序,它允许用户上传PKCS12。 我存储PKCS12作为数据库二进制文件。 有没有什么办法,我知道,如果在PKCS12证书是自签名或CA签名?

我运行在Tomcat Java网络应用,并在我手上有OpenSSL的。

Answer 1:

这是一个有点哈克,但openssl x509命令可以报告同时发放者和对象。 如果拍摄对象和发行人是一样的,它是自签署; 如果它们是不同的,那么它是由CA签名 (严格地说,许多自签名证书由CA签名-自己)

在测试这个理论,我跑的测试了一把; 它运行是这样的:

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

希望这可以帮助。



Answer 2:

以下电子邮件线程恰恰告诉验证是否base64编码证书(即PEM)是自签名或不正确的做法: http://marc.info/?l=openssl-users&m=116177485311662&w=4

以下是代码片段:

openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem

应该返回:

self_signed_cert.pem: OK

或比较颁发者和使用者。 如果他们是一样的,它是自签名

openssl x509 -in cert.pem -inform PEM -noout -subject -issuer


Answer 3:

你是否尝试过BouncyCastle的LIB?

http://www.bouncycastle.org/wiki/display/JA1/Frequently+Asked+Questions

“有对付属性证书,PKCS12,SMIME和OpenPGP的具体例子程序,他们可以在包中找到:

org.bouncycastle.jce.examples org.bouncycastle.mail.smime.examples org.bouncycastle.openpgp.examples的实例另一种有用的来源是测试包:

org.bouncycastle.crypto.test org.bouncycastle.jce.provider.test org.bouncycastle.cms.test org.bouncycastle.mail.smime.test org.bouncycastle.openpgp.test org.bouncycastle.cert.test org.bouncycastle。 pkcs.test org.bouncycastle.tsp.test“



Answer 4:

Java是无法分析PKCS12所以,你必须将其转换为keystore使用OpenSSL的。

这里的密钥库私人密钥和X509证书(或者你可以选择只存储证书)。 然后得到来自发行方的keystore使用标准的Java API和手动验证发行者。



文章来源: Find if a certificate is self signed or CA signed