首先,我们得搞清楚什么是数字证书,有什么作用。
数字证书是在维基百科上是这样描述的:为通信提供电子认证,用于网络身份识别。说白了就是网络中的身份证,一般用于服务器。
现实中,一般是网站的服务器向CA机构申请数字证书,用于向客户端(浏览器)证明自己的身份。在双向认证中,客户端也会申请数字证书,数字证书就跟你去公安局办身份证一样,也是要钱的。所以客户端证书一般很少,例如银行给你的U盾里就有客户端证书。数字证书在通信中向网络的一方证明数字证书持有者的身份,就像身份证证明你的身份一样。
数字证书的结构(基于 x.509 证书标准):
1 证书格式版本号
2 证书序列号
3 证书签名算法
4 证书颁发者
5 证书有效期
6 对象的名称
7 对象的公开密钥
8 其它信息
9 证书颁发机构的数字签名 (对前面8项内容进行哈希散列形成固定摘要,加上颁发者私钥参数做参数,用证书签名算法最终形成签名)
可以做个比喻,数字证书就如现实生活中的身份证(用于证明持证人身份),CA 机构就是现实整的公安机关(颁发证件可信度高),而证书上的公钥信息就类似于身份证的照片,数字证书的签名就相当于身份证的章印(证明是公安机关的)。
申请数字证书的流程 :
1 申请者(一般是服务器)自己生成申请证书的证书请求和私钥,证书请求一般是 cer 文件,里面包含服务器公钥等信息。
2 服务器向证书认证机构(权威CA机构)递交证书请求。
3 CA 机构核对服务器的证书请求。(核对是物理过程,很严格)
4 CA 核对完毕,会给服务器颁发数字证书server.crt(物理过程)。证书包含公钥和 CA 签名等信息。
5 申请者使用数字证书
数字证书的验证流程:
1 将证书除最后签名外的所有信息(如证书结构里的8项信息)进行哈希,生成摘要1.
2 对证书最后的数字签名,用证书的签名算法,加上证书颁发者的公钥,最后生成摘要2.(此处颁发者的公钥默认是浏览器内置的,证书最后的签名是CA签的,验证用的对应是CA的公钥)
3 对比摘要1和摘要2,若相等,则证明该数字证书是合法的机构颁发的,证书信息也是可信的