实现Https的单向认证,首先需要生成一个公钥和私钥,并且拿公钥到CA机构进行签名。生成签名证书。证书里面包含数字签名和公钥。然后客户端需要将公钥证书预埋在自己的APK中。在建立SSL连接的流程如下:
1、客户端发送ClientHello给服务器开始SSL通信,报文中包含了客户端支持的SSL版本、加密组件列表等
2、服务器可进行SSL通信时,会以ServerHello作为响应。报文包括了SSL版本、选择的某个加密组件。
3、服务器发送Certificate报文给客户端,报文中包含公开秘钥证书
4、客户端收到证书后验证其有效性(验证签名机构是否值得信任、服务器是否可信任),然后取出其公钥。
5、客户端用取出的公钥加密一个密码串发给服务器
6、服务器拿到加密的密码串后,使用私钥进行解密,获取明文密码串,之后双方的数据加密就使用这个密码串。
在Volley里面可以使用如下代码进行实现:
然后将这个SSLSockectFactory传给Volley即可。
对称加密和非对称加密:
非对称:在客户端访问https服务器的时候,服务器会把公钥证书发送给客户端,客户端会使用自己的证书进行比对,如果确认证书一致,客户端会生成一个随机数,这个随机数是后序通信加密的秘钥,客户端用证书中的公钥加密这个随机数,然后发送给服务器,服务器使用证书的私钥进行解密,获取客户端的随机数,这个过程就是非对称加解密。
对称:在服务器获取到客户端发送的随机数后,后续的通信就使用这个随机数进行加密解密,由于这个随机数只有客户端和服务器知道,所以这时对称加密是安全高效的。