查找证书是自签名还是CA签名

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)

希望这可以帮助.


mat*_*tjm 7

这里接受的答案并不严格正确。老问题,但这是谷歌中“如何判断证书是否自签名”的第一个结果,因此需要对其进行清理。

如果颁发者和主题匹配,证书几乎总是自签名,但不能保证。证书可以是“自颁发”的,它具有相同的颁发者/主题,但由未与证书中的公钥配对的私钥签名。

NitinB 上面答案的第一部分是检查自签名证书的正确方法:

openssl verify -CAfile self_signed_cert.pem self_signed_cert.pem

“所有自签名证书都是自签名证书,但并非所有自签名证书都是自签名证书。”

引文:https : //tools.ietf.org/html/rfc5280

“自发证书是 CA 证书,其中颁发者和主体是同一实体。生成自发证书是为了支持政策或操作的变化。自签名证书是自发证书,其中数字签名可由以下人员验证绑定到证书中的公钥。”