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

 

java 证书双向认证 证书双向认证流程_服务端

单向认证流程:
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端采用双向认证成功,则此时服务器改为单向认证也是可以通过的


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

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

2 对于自签名的网站,不论使用HttpURLConnection还是HttpsURLConnection,假如不进行认证的话那么都会报错

javax.net.ssl.SSLHandshakeException: 
     java.security.cert.CertPathValidatorException: 
         Trust anchor for certification path not found.


所以我们需要对自签名证书进行认证,而由于认证需要用到HttpsURLConnection里面的setSSLSocketFactory方法,所以只能使用HttpsURLConnection了。

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