(一)证书的产出过程
证书中的内容如下:
证书签名过程如下:
1.证书申请需填写主体信息、有效期、公钥等信息
2.CA中心获得申请的信息,并获得签名算法使用私钥对信息进行签名
3.将签名后的签名值、签名算法和申请信息等进行编码组成公钥证书(即浏览器上看到的证书)
(二)获得证书的签名值
在Windows系统中,打开证书没有查看签名值的一项。但是在Macos系统下,可通过工具查看签名:
或者通过openssl工具查看签名内容:
openssl x509 -in baidu.cer -noout -text
(三)证书指纹是什么
指纹算法,是对签名之后的证书文件内容计算一下散列值,只是用于检测证书是否被篡改,类似于去网站下载一个安装包, 严谨一点的网站会给一个散列值,便于下载之后再散列计算进行核对。
证书中是不包括指纹内容的,只是工具提供了指纹计算的功能,例如Windows工具中提供sha1的指纹。
Macos中提供了SHA256和SHA1的指纹值。
(四)证书指纹如何计算
证书指纹是将证书内容进行散列处理,以baidu.cer证书为例。
1.脚本计算
1) 获得baidu.cer
-----BEGIN CERTIFICATE-----
MIIJLzCCCBegAwIBAg
省略
pepMzaPDTd3A+xW7Mo6n0vasV/sZI1y2qMrqs7qvItqC0YMJSlxSZ67SnWZjAwgG
lxua
-----END CERTIFICATE-----
2) 获得证书的真实内容
删除“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”标签,并保留内容存储为baidu.txt
3) 对内容进行base64解密,获得二进制内容
4) 对而进行内容进行SHA1计算
在macos下
cat baidu.txt |base64 --decode|shasum
获得内容
d6aaf8cfa0e0236547fc2a894f895ec94724a60d
2.Openssl 计算
执行命令:
openssl x509 -noout -fingerprint -sha1 -inform pem -in baidu.cer
得到结果:
SHA1 Fingerprint=D6:AA:F8:CF:A0:E0:23:65:47:FC:2A:89:4F:89:5E:C9:47:24:A6:0D
(五)有数字签名为什么还要证书指纹
数字证书的验签是通过证书链的上层证书(例如CA证书)里的公钥进行验签计算,用于证书的真伪验证,因为只有上层的私钥才能对证书进行签名,签名过程采用非对称计算,耗时高,性能低。
而在密码学中用于文件校验的算法为散列算法,性能极高,并且具有雪崩效应(当输入发生最微小的改变时,也会导致输出的不可区分性改变),文件只要被篡改指纹将完全不同。
所以对于文件是否被篡改,通过散列计算即可获知,而不需要进行非对称计算。
(六)证书安全升级的问题
由于SHA1的安全性问题,微软、google先后都对证书的安全性提出了升级计划,统一建议升级到SHA-2算法,例如:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
而这里的安全算法是指在数字签名计算过程中的算法SHA1WithRSA,而不是证书指纹中SHA1。