我有一个Web应用程序,它允许用户上传PKCS12。 我存储PKCS12作为数据库二进制文件。 有没有什么办法,我知道,如果在PKCS12证书是自签名或CA签名?
我运行在Tomcat Java网络应用,并在我手上有OpenSSL的。
我有一个Web应用程序,它允许用户上传PKCS12。 我存储PKCS12作为数据库二进制文件。 有没有什么办法,我知道,如果在PKCS12证书是自签名或CA签名?
我运行在Tomcat Java网络应用,并在我手上有OpenSSL的。
这是一个有点哈克,但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
希望这可以帮助。
以下电子邮件线程恰恰告诉验证是否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
你是否尝试过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“
Java是无法分析PKCS12
所以,你必须将其转换为keystore
使用OpenSSL的。
这里的密钥库私人密钥和X509证书(或者你可以选择只存储证书)。 然后得到来自发行方的keystore
使用标准的Java API和手动验证发行者。