https的作用是为了客户端与服务器之间通讯的安全性,实际上https是工作在SSL上的http协议。
SSL握手协议包含4个阶段:
第一阶段:建立安全能力
由客户端发起,向服务器发送Client Hello消息,其中包含SSL的版本,客户端随机数(用于生成密钥),会话号,加密算法清单,压缩算法清单。
服务器返回Server Hello消息,其中包含SSL版本,服务器随机数(用于生成密钥),会话号,选择的加密算法,选择的压缩算法。
总之就是互相先打招呼,告诉对方自己是谁干嘛的。
第二阶段:服务器认证与密钥交换
本阶段服务器是唯一发送消息方,这里共分三步:
第一步:证书,服务器将服务器数字证书以及整个CA证书链发给客户端,客户端由此获得服务器公钥;客户端还可以在这一步选择是否验证服务器是否可信,不验证的话就相当于跳过证书验证这一步,直接进行通讯,前提是服务器支持,不错这样一来https将失去其本来的安全作用,所以还是需要进行验证的,如果不可信则客户端可以停止连接,并提醒用户;
第二步:证书请求,服务器请求客户端的数字证书,客户端认证在SSL中是可选的,因此这一步也是可选的。
第三步:服务器握手完成,发送这个消息后,服务器等待客户端响应。
第三阶段:客户端认证与密钥互换
本阶段客户端是唯一消息发送方,共分三步。
第一步:证书,客户端将客户端数字证书发送给服务器,里面包含了客户端的公钥。通常来说这个证书应该是由服务提供者分发给客户端,由指定的CA签发的,因此服务器可以验证客户端证书的合法性,并决定是否继续。
第二步:密钥交换,客户端生成“预主密码”,用服务器的公钥加密,然后发送给服务器。这个加密过的“预主密码”只有客户端和服务器才能知道,与后面对称加密的对称密钥有关。在这一步也间接验证了服务器,服务器必须拥有与证书对应的私钥才能解密预主密码”。
第三步:证书验证,客户端还需要向服务器验证自己是真正的客户端(数字证书只是证明客户端拥有合法的公钥,但无法证明它就是客户端,拥有与公钥对应的私钥才是关键),为此客户端把已经加密的“预主密码”、客户端含有签名的随机数和自己的证书,发送给服务器。服务器通过验证CA的有效性合法性,随机数等等,若通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码。(客户端获取主通讯密码的方式和服务器是一样的)
第四阶段:完成
在这个阶段,客户端和服务器各自独立的生成相同的主通讯密码,也就是所谓的对称密钥。
SSL握手之后就进入会话阶段,客户端和服务器使用握手协议中生成的对称密钥进行加密和解密以保证通信的安全。
综上所述,如果要完成HTTPS的双向认证需要以下密钥和证书:
服务器端 :
1.服务器私钥 ;
2.由CA签发的含有服务器公钥的数字证书 ;
3.CA的数字证书。在双向认证的实践中,通常服务器可以自己作为证书机构,并且由服务器CA签发服务器证书和客户端证书。
客户端 :
1.客户端私钥,因为公钥是通过服务端的数字证书和CA证书获得的 ;
2. 由CA签发的含有客户端公钥的数字证书。为了避免中间人攻击,客户端还需要内置服务器证书,用来验证所连接的服务器是否是指定的服务器。