HTTPS 单向认证、双向认证

1.是谁配置单向还是双向?
由服务器容器配置,如果服务端只认某个客户端那么就采用双向认证,否则则用单向认证

 

单向认证流程:
1.客户端say hello 服务端
2.服务端将证书、公钥等发给客户端
3.客户端CA验证证书,成功继续、不成功弹出选择页面
4.客户端告知服务端所支持的加密算法
5.服务端选择最高级别加密算法明文通知客户端
6.客户端生成随机对称密匙key,使用服务端公钥加密发送给服务端
7.服务端使用私钥解密,获取对称密匙key
8.后续客户端与服务端使用该密匙key进行加密通信

双向认证流程:
1.客户端say hello 服务端
2.服务端将证书、公钥等发给客户端
3.客户端CA验证证书,成功继续、不成功弹出选择页面
4.客户端将自己的证书和公钥发送给服务端
5.服务端验证客户端证书,如不通过直接断开连接
6.客户端告知服务端所支持的加密算法
7.服务端选择最高级别加密算法使用客户端公钥加密后发送给客户端
8.客户端收到后使用私钥解密并生成随机对称密匙key,使用服务端公钥加密发送给服务端
9.服务端使用私钥解密,获取对称密匙key
10.后续客户端与服务端使用该密匙key进行加密通信

android端采用双向认证成功,则此时服务器改为单向认证也是可以通过的

参考:http://blog.csdn.net/duanbokan/article/details/50847612


其他有用网址:

https://blog.csdn.net/u011394071/article/details/52880062

https://www.cnblogs.com/alisecurity/p/5939336.html

https://blog.csdn.net/lmj623565791/article/details/48129405

https://blog.csdn.net/u013651026/article/details/77996851

 

android端对于http/https网站的访问

1  对于进行了认证的https网站的访问(例如https://www.baidu.com),则不论用HttpURLConnection还是HttpsURLConnection都没有问题,不需要做任何验证因为网站证书是经过认证的,HttpsURLConnection是HttpURLConnection的子类,openConnection的时候检测到是https网址实际上是会自动使用HttpsURLConnection来进行实现的

2 对于自签名的网站(例如我自己发布在自己电脑本地的https://172.20.10.4:8443/j2ee/hello),不论使用HttpURLConnection还是HttpsURLConnection,假如不进行认证的话那么都会报错

javax.net.ssl.SSLHandshakeException: 
    java.security.cert.CertPathValidatorException: 
        Trust anchor for certification path not found.
所以我们需要对自签名证书进行认证,而由于认证需要用到HttpsURLConnection里面的setSSLSocketFactory方法,所以只能使用HttpsURLConnection了。

所以说,假如需要保证对于自签名的网站也可以访问那么需要改用HttpsURLConnection,否则继续用着HttpURLConnection也是可以的

你可能感兴趣的:(HTTPS 单向认证、双向认证)