证书签发和使用原理简述

2019-06-03 0 By admin

一、签署证书过程

OpenSSL 命令可以生成 example.key 文件和 example.csr 证书申请文件。
1、CSR 文件:Cerificate Signing Request,证书签署请求文件,里面包含申请者的 DN(Distinguished Name,标识名)和公钥信息,
在第三方证书颁发机构签署证书的时候需要提供。
2、证书颁发机构拿到CSR后使用其根证书私钥对证书进行加密并生成CRT证书文件,里面包含证书加密信息以及申请者的DN及公钥信息。
3、Key:证书申请者私钥文件,和证书里面的公钥配对使用,在HTTPS握手通讯过程需要使用私钥去解密客戶端发來的经过证书公钥加密的随机数信息,是HTTPS加密通讯过程非常重要的文件,在配置HTTPS的時候要用到。

二、身份认证

1、https协议中身份认证的部分是由CA数字证书完成的,证书由公钥、证书主体、数字签名等内容组成。
2、在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证(浏览器中默认安装了CA的根公钥,用于验证数字签名)
3、如果证书不是伪造的,客户端就获取了公钥(服务器私钥对应的非对称加密公钥)和用于对称加密的密钥。

三、数字证书验证

1、申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手并接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?
答案就是数字签名(digital signature)。
数字签名是证书的防伪标签,目前使用最广泛的SHA-RSA(SHA用于哈希算法,RSA用于非对称加密算法)。

四、数字签名的制作和验证过程

1、数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。
2、数字签名的校验。使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。

五、需要注意的问题

1、数字签名签发和校验使用的非对称密钥是CA自己的公钥和私钥,跟证书申请者(提交证书申请的公司实体)提交的公钥没有任何关系。

2、数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。(一对公钥和私钥,公钥加密的内容只有私钥能够解密;反过来,私钥加密的内容,也就有公钥才能够解密)

3、现在大的CA都会有证书链,证书链的好处:首先是安全,保持CA的私钥离线使用。第二个好处是方便部署和撤销。这里为啥要撤销呢?因为,如果CA数字证书出现问题(被篡改或者污染),只需要撤销相应级别的证书,根证书依然是安全的。

4、根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的非对称密钥进行签名和验证的。

5、怎样获取根CA和多级CA的密钥对?还有,既然是自签名和自认证,那么它们是否安全可信?这里的答案是:当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的根公钥都默认装到了浏览器或者操作系统环境里。

六、HTTPS访问过程

1、服务器生成私钥文件和证书申请文件(包含公钥,域名,公司,地点,邮箱等);
2、数字证书认证机构CA将公钥放到数字证书中,并对证书添加了数字签名;
3、当浏览器发出ssl握手时,服务器将证书发送给浏览器;
4、浏览器通过数字签名对证书进行验证;从而获得正确的公钥和用于后面通讯的对称加密密钥。
整个过程包括
非对称加密算法:公钥和私钥,用于交换对称加密的密钥
数字证书验证:验证证书的合法性,从而确定公钥和对称加密的密钥
对称加密传输:保证传输数据加密。