基础知识
SSL/TLS单向认证:客户端会认证服务器端的身份,但是服务器端不会对客户端进行认证。
SSL/TLS双向认证:客户端和服务端会互相认证,即双发之间要证书交换。
决定性因素:客户端的数量
单向加密的认证过程
SSL工作原理
CA(Certificate Center)证书签发机构。两个属性:1.本身受信任,国际认可。2.给他受信任的申请对象签发证书。
私钥用于加密,公钥用于解密。
证书是带有签名的身份信息
证书的签发过程
证书包括签名和明文信息两部分,其中签名使用ca.key即ca的私钥加密,到这里我们就能明白通过ca.pub也就是CA的公钥就能解密该签名信息
单向SSL工作流程
(1) 申请证书:服务器生成请求文件Server.csr提交给CA
(2) 审核:CA审核服务器真实性
(3) 签发证书:证书内容就是上面提到的全部内容。到这里已经完成了整个SSL应用的部署,后面的步骤是具体的SSL工作流。
(4) TCP请求:当客户端要和服务器端通信,需要客户端发起一个TCP请求
(5) 返回证书:Server接收到Client的请求后会将证书Server.crt发送给Client。
(6) 验证证书:Client收到服务器证书Server.crt之后会对证书的签名解密,因此要用到对应的公钥,也就是CA的公钥,CA的公钥在CA证书里可以找到,CA证书是提前安装在客户端的。解密签名之后就可以校验摘要信息,域名信息等正确性
(7)协商通信密钥:如果证书校验通过,Server和Client将进行秘钥协商,然后Server和Client通信过程会采用对称秘钥加密。
单向认证和双向认证是什么?
大多情况下,尤其是web站点大多是单向认证即客户端只校验服务端真实性。双向认证在安全要求比较高的场景下需要双方都校验对方,两个过程极其类似,只是在Client认证完服务器证书后,Client会将自己的证书client.crt传给服务器,服务器验证通过后然后开始秘钥协商。
证书详细工作流
1)申请认证:服务器需自己生成公钥私钥对pub_svr & pri_svr,同时根据 pri_svr 生成请求文件 csr,提交给CA,csr中含有公钥、组织信息、个人信息(域名)等信息。(图一中server.req就是csr请求文件)
2)审核信息:CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。
3)签发证书:如信息审核通过,CA会向申请者签发认证文件-证书。
证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。
签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA的私钥对信息摘要进行加密,密文即签名。(图一中生成server.crt)
4)返回证书:client如果请求验证服务器,服务器需返回证书文件。(图一中handshake传回server.crt)
5)client验证证书:client读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法。客户端然后验证证书相关的域名信息、有效时间是否吊销等信息。
客户端会内置信任CA的证书信息(包含公钥),如果CA不被信任,则找不到对应 CA的证书,证书也会被判定非法。(图一中check可选,我们可以选择不验证服务器证书的有效性)
6)秘钥协商:验证通过后,Server和Client将进行秘钥协商。接下来Server和Client会采用对称秘钥加密。(对称加密时间性能优)(图一中 pre-master/change_cipher_spec/encrypted_handshake_message过程)
7)数据传输:Server和Client采用对称秘钥加密解密数据。