https请求过程中,ssl证书的一些问题

1.https请求中,使用jdk的方法X509TrustManager绕过证书,传输数据还是加密的吗?

通常在https请求中,会使用jdk中绕过证书,这里绕过证书,并不是绕过https的加密,数据仍然是加密数据。绕过证书的目的是信任对方站点返回的证书,从而使用该证书进行https请求,进行将对称密钥加密,对称密钥来加密报文。如果不信任该证书,则提sun.security.validator.ValidatorException。

2.为什么有的https请求,不需要加载证书,也能正常请求和返回?

如果没加载证书,也能正常访问的网址,这个网址一定是经过ca认证的。jdk有一套自己的证书库。客户端会从服务端拿到证书信息。调用端(客户端)会有一个证书信任列表,拿到证书信息后,会判断该证书是否可信任。Java虚拟机并不直接使用操作系统的keyring,而是有自己的security manager。与操作系统类似,jdk的security manager默认有一堆的根证书信任。如果你的https站点证书是花钱申请的,默认被这些根证书所信任,那使用java来访问此https站点会非常方便,不加载证书也能访问。因此,如果用java访问https资源,发现证书不可信任,则会报文章开头说到的错。
如果是用浏览器访问https资源,发现证书不可信任,一般会弹框告诉用户,对方的证书不可信任,是否继续之类。
原理可以参考:

图解https请求过程,单向认证和双向认证 https://blog.csdn.net/superviser3000/article/details/80812263
忽略证书: https://blog.csdn.net/lizeyang/article/details/18983843
SSL和TLS区别 https://blog.csdn.net/enweitech/article/details/81781405

你可能感兴趣的:(java,http)