Nis*_*han 17 java openssl pki ssl-certificate
我有一个网络应用程序,允许用户上传pkcs12.我将pkcs12存储为数据库中的二进制文件.有什么办法让我知道pkcs12中的证书是自签名还是CA签名?
我在tomcat上运行一个Java Web应用程序,并且可以使用openssl.
小智 15
以下电子邮件线程精确地告诉正确的方法来验证base64编码的证书(即PEM)是否是自签名的:http://marc.info/?l = openssl-users&m = 116177485311662&w = 4
以下是代码段:
openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem
Run Code Online (Sandbox Code Playgroud)
应该返回:
self_signed_cert.pem: OK
Run Code Online (Sandbox Code Playgroud)
或比较发行人和主题.如果它们相同,则为自签名
openssl x509 -in cert.pem -inform PEM -noout -subject -issuer
Run Code Online (Sandbox Code Playgroud)
sar*_*old 12
它有点hacky,但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
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
这里接受的答案并不严格正确。老问题,但这是谷歌中“如何判断证书是否自签名”的第一个结果,因此需要对其进行清理。
如果颁发者和主题匹配,证书几乎总是自签名,但不能保证。证书可以是“自颁发”的,它具有相同的颁发者/主题,但由未与证书中的公钥配对的私钥签名。
NitinB 上面答案的第一部分是检查自签名证书的正确方法:
openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem
“所有自签名证书都是自签名证书,但并非所有自签名证书都是自签名证书。”
引文:https : //tools.ietf.org/html/rfc5280
“自发证书是 CA 证书,其中颁发者和主体是同一实体。生成自发证书是为了支持政策或操作的变化。自签名证书是自发证书,其中数字签名可由以下人员验证绑定到证书中的公钥。”
| 归档时间: |
|
| 查看次数: |
27558 次 |
| 最近记录: |