Java如何跳过https的ssl证书验证详解
打开首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高:
http和https的差别
很明显,二者最大的区别在于https多了一个ssl证书验证,可以说https是身披ssl外壳的http。因为http存在如下缺陷:
1)通信使用明文,内容可能被窃听(重要密码泄露)
2)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)
3)无法证明报文的完整性,有可能已遭篡改(运营商劫持)
而https是利用ssl/tls建立全信道,加密数据包。https使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
https握手过程(单向认证)
补充:"ssl"证书和ca证书究竟有什么区别?
ca是数字证书管理机构,而ssl证书只是数字证书的一种,ca机构签发ssl证书,所以说,ssl是ca颁发的证书中的一种。
所以,从理论上来说,如果服务端采用https协议,而自己没有ssl证书(服务端不提供ssl证书),那么通信是不可能成功的。所以,这里有两个解决思路:
1、确认是单向认证还是双向认证,server端是否校验client端(存在这种情况,服务端虽采用https协议,但并不校验ca证书,如果需要校验,那服务端至少得提供秘钥)
2、可以忽略服务器证书校验(将hostname校验和ca证书校验同时关闭)
网上最常用的,就是利用jdk生成keystore文件,该方法忽略服务器证书校验的方法,网上有很多示例,但是暂未找到可用的,先写到这里吧。。。。。
在针对http进行升级时,在https的证书未经权威机构认证的情况下,访问https站点的两种方法,一种方法是把该证书导入到java的truststore文件中,另一种是自己实现并覆盖jsse缺省的证书信任管理器类。两种方法各有优缺点,第一种方法不会影响jsse的安全性,但需要手工导入证书;第二种方法虽然不用手工导入证书,但需要小心使用,否则会带来一些安全隐患。
**java获取url相关参数的几个常用方法:**
1、request.getrequesturl()
返回的是完整的url,包括http协议,端口号,servlet名字和映射路径,但它不包含请求参数。
2、request.getrequesturi()
得到的是request url的部分值,并且web容器没有decode过的
3、request.getcontextpath()
返回the context of the request.
4、request.getservletpath()
返回调用servlet的部分url.
5、request.getquerystring()
返回url路径后面的查询字符串
示例:
当前url:http://localhost:8080/carsilogcenter_new/idpstat.jsp?action=idp.sptopn
request.getrequesturl() --http://localhost:8080/carsilogcenter_new/idpstat.jsp request.getrequesturi() -- /carsilogcenter_new/idpstat.jsp request.getcontextpath() --/carsilogcenter_new request.getservletpath() -- /idpstat.jsp request.getquerystring() --action=idp.sptopn
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
开启OCSP提升https证书验证效率解决Let’s Encrypt SSL证书访问慢的问题
-
详解在Ubuntu上的Apache配置SSL(https证书)的正确姿势
-
详解如何给Tomcat配置Https/ssl证书
-
java httpclient跳过https证书验证
-
Java发送Https请求(跳过证书验证)-旧版
-
https与SSL协议详解及Java实现免证书访问https服务代码
-
Java如何跳过https的ssl证书验证详解
-
开启OCSP提升https证书验证效率解决Let’s Encrypt SSL证书访问慢的问题
-
详解在Ubuntu上的Apache配置SSL(https证书)的正确姿势
-
java httpclient跳过https证书验证