何为单证书和双证书
通常情况下,服务器会部署一张证书,用于签名和加密,这就是所谓的单证书:
- 签名时,服务器使用自己的私钥加密信息的摘要(签名),客户端使用服务器的公钥(包含在证书中)进行解密,对比该摘要是否正确,若正确,则客户端就确定了服务器的身份,即验签成功。
- 加密时,服务器和客户端协商出会话密钥(一般为对称密钥),会话密钥的产生根据密钥协商算法的不同,过程有所不同,但都会用到证书的公钥和私钥,也就是说证书也用在加密场景中。
- 在单证书配置下,服务器端的公钥和私钥由服务器负责保存。私钥需要特别保存,如果泄漏出去就会有很大的安全风险。客户端的公钥和私钥一般在通信过程中动态产生,客户端也不会存储。如果客户端也要配置证书,这种情形不常见,不在讨论之列。
而双证书则包括签名证书和加密证书:
- 签名证书在签名时使用,仅仅用来验证身份使用,其公钥和私钥均由服务器自己产生,并且由自己保管,CA不负责其保管任务。
- 加密证书在密钥协商时使用,其私钥和公钥由CA产生,并由CA保管(存根)。
既然单证书可以搞定一切,为何要使用双证书?
- 从道理上来说两个密钥具有不同的属性,逻辑上应该分开处理。其实最主要的原因是国家要保证必要的时候有能力对某些通讯进行监控,如果采用单证书,除了自己谁也无法解密(理论上如此),不利于国家安全。因此某些国家法律规定使用双证书。如果拥有加密证书的私钥,可以进行实时监控。使用过wireshark抓HTTPS包的朋友应该知道,如果配置了RSA密钥,可以解密出HTTPS通信中的加密信息。
双证书的作用
- 加密证书: 用于数据的加密传输,确保数据在传输过程中不被窃取或篡改。加密证书包含公钥和私钥,公钥用于加密数据,私钥用于解密数据。
- 签名证书: 用于验证数据的完整性和来源的真实性。签名证书同样包含公钥和私钥,但私钥用于签名数据,公钥用于验证签名。
加密证书的颁发流程
国密CA体系里面,加密密钥对是在CA端产生的,和通常的签名证书流程不一样(签名密钥对通常是用户自己产生的,发送证书请求给CA来申请证书)。
那用户怎么安全获得加密证书和私钥呢?国密规范规定,加密私钥需要通过数字信封使用用户的签名公钥加密。CA将加密私钥密文返回给用户,用户因为有对应的签名私钥,因此只有该用户才可以解开密文,获得加密私钥。过程如下:
- 用户产生签名密钥对,生成签名证书请求,发送签名证书请求给CA;
- CA审核生成签名证书,产生加密密钥对,生成加密证书;
- CA生成对称密钥,使用用户签名公钥加密,输出对称密钥密文;
- CA使用对称密钥,加密用户加密私钥,输出加密私钥密文;
- CA返回给用户签名证书、加密证书、对称密钥密文和加密私钥密文;
- 用户导入对称密钥密文,使用U盾内部签名私钥解密,获得对称密钥句柄;
- 用户使用对称密钥句柄解密加密私钥,获得加密私钥明文。