背景:客户发来一个根证书,使用该证书发现根本校验不通过。怀疑该证书根本不是根证书,于是在网上找根证书的判断方法,发现网上写这个的比较少,没办法确认。不过最后终归找到了确认方法,索性就写出来,希望能对同样遇到该问题的人有所帮助。
方法一:
这是一个专门解析证书文件的网站通过导入证书分析后结果如下图所示:
方法二:
通过openssl命令导出信息
test@ubuntu:~/cert$ openssl x509 -purpose -in client.crt
Certificate purposes:
SSL client : Yes
SSL client CA : No
SSL server : Yes
SSL server CA : No
Netscape SSL server : Yes
Netscape SSL server CA : No
S/MIME signing : Yes
S/MIME signing CA : No
S/MIME encryption : Yes
S/MIME encryption CA : No
CRL signing : Yes
CRL signing CA : No
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : No
Time Stamp signing : No
Time Stamp signing CA : No
-----BEGIN CERTIFICATE-----
证书内容省略
-----END CERTIFICATE-----
从上面的信息中明显可以看出这不是一个根证书。下面给出一个根证书的导出信息。
test@ubuntu:~/cert$ openssl x509 -purpose -in ca.crt
Certificate purposes:
SSL client : Yes
SSL client CA : Yes (WARNING code=3)
SSL server : Yes
SSL server CA : Yes (WARNING code=3)
Netscape SSL server : Yes
Netscape SSL server CA : Yes (WARNING code=3)
S/MIME signing : Yes
S/MIME signing CA : Yes (WARNING code=3)
S/MIME encryption : Yes
S/MIME encryption CA : Yes (WARNING code=3)
CRL signing : Yes
CRL signing CA : Yes (WARNING code=3)
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : Yes (WARNING code=3)
Time Stamp signing : No
Time Stamp signing CA : Yes (WARNING code=3)
-----BEGIN CERTIFICATE-----
证书内容省略
-----END CERTIFICATE-----
方法三:
根据以文本形式显示的证书中的关键字来判断。
如果你的证书不是以文本形式显示,先使用下面命令以文本形式显示证书。
openssl x509 -in ca.crt -noout -text
然后根据以文本形式显示证书中参数的值来判断证书是否为根证书。
下面是判断方法:
在X509v3证书中从X509v3 extension开始就是证书扩展项,在扩展项中有个X509v3 Basic constraints,里面的CA字段决定该证书是否可以做CA的证书,若CA的值为FALSE则该证书不是根证书,TURE则相反。如果没有这个字段,那么就要根据其他内容决定该证书是否可以做CA证书(比如对比subject name和issuer name)。
在X509v1证书中,没有这个扩展项,如果这两个字段(subject name和issuer name)是相同的那改证书明显就是自签名证书,如此就认为此证书是Root CA证书了。
注:X509v3与X509v1表示该证书使用了哪种版本的x.509标准,文章最后有介绍。
下面给出两个以文本形式显示的证书文件:
第一个证书:版本为x.509标准版本3,此证书不是根证书(有X509v3 Basic constraints,且CA字段值为FALSE)
Certificate:
Data:
Version: 3 (0x2)
Serial Number: XXXXXXXXXXXXXXXXXXX (0xXXXXXXXXXXXXXXXX)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, L=Beijing, O=test Ltd, OU=test Ltd, CN=test.test.com/emailAddress=test@test.com
Validity
Not Before: May 24 13:22:00 2021 GMT
Not After : May 24 13:22:00 2031 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=test Ltd, OU=test Ltd, CN=test.test.com/emailAddress=test@test.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
证书内容省略
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
Signature Algorithm: sha256WithRSAEncryption
证书内容省略
第二个证书:版本为x.509标准版本1,此证书为根证书(无扩展项,且subject name和issuer name相同)
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, ST=Beijing, L=Beijing, O=test Co., Ltd, OU=test Section, CN=test.com
Validity
Not Before: Jun 15 06:07:08 2022 GMT
Not After : Jul 15 06:07:08 2022 GMT
Subject: C=CN, ST=Beijing, L=Beijing, O=test Co., Ltd, OU=test Section, CN=test.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
证书内容省略
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
证书内容省略
方法三所给出证书中参数的介绍:
参数 | 作用 |
---|---|
Version | 指出该证书使用了哪种版本的x.509标准(版本1、版本2或是版本3 ),版本号会影响证书中的一些特定信息。 |
Issuer | 证书颁发者信息 |
Subject | 证书拥有者信息 |
文章中openssl命令所使用的参数的简介:
参数 | 作用 |
---|---|
x509 | X.509证书管理。显示证书信息、转换证书格式、签名证书请求及改变证书信任设置 |
-purpose | 打印出证书附加项里所有有关用途允许和用途禁止的内容。 |
-in | 指定输入文件 |
-noout | 此选项可防止输出编码版本信息。 |
-text | 以文本形式打印证书。输出全部细节,包括公钥,签名算法,发行人和主题名称,任何扩展名的序列号和任何信任设置。 |