Java如何跳过https的ssl证书验证详解

作者:莫问以 时间:2023-08-24 11:34:56 

打开首页,明显看到链接是https打头,https和http的通信协议差别,在于https安全性更高:

Java如何跳过https的ssl证书验证详解

http和https的差别

很明显,二者最大的区别在于https多了一个ssl证书验证,可以说https是身披SSL外壳的http。因为http存在如下缺陷:

1)通信使用明文,内容可能被窃听(重要密码泄露)

2)不验证通信方身份,有可能遭遇伪装(跨站点请求伪造)

3)无法证明报文的完整性,有可能已遭篡改(运营商劫持)

而https是利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

Java如何跳过https的ssl证书验证详解

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

来源:https://www.jianshu.com/p/e44f4b0c67da

标签:java,https,ssl,证书,验证
0
投稿

猜你喜欢

  • Java求一个分数数列的前20项之和的实现代码

    2021-08-22 14:59:58
  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    2021-08-31 02:02:01
  • JAVA中数组从小到大排序的2种方法实例

    2021-10-09 09:46:18
  • c#数据绑定之linq使用示例

    2022-07-17 11:07:22
  • Java Spring拦截器案例详解

    2022-11-01 07:15:06
  • Spring Cloud Gateway不同频率限流的解决方案(每分钟,每小时,每天)

    2023-01-05 13:49:34
  • logback使用filter过滤日志操作

    2022-07-11 03:20:27
  • Java时间工具类Date的常用处理方法

    2022-11-08 02:37:49
  • Java C++ 算法题解拓展leetcode670最大交换示例

    2022-05-18 23:31:51
  • Java中的接口多继承机制

    2023-08-28 06:13:48
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法

    2023-10-14 19:34:51
  • Socket通信原理和实践

    2022-07-05 02:42:31
  • JVM代码缓存区CodeCache原理及用法解析

    2023-08-09 06:02:29
  • 实战分布式医疗挂号通用模块统一返回结果异常日志处理

    2022-01-28 16:31:32
  • Maven的安装配置详解

    2023-11-24 08:52:05
  • C# 利用PdfSharp生成Pdf文件的示例

    2022-01-18 17:31:30
  • Java信号量Semaphore原理及代码实例

    2021-10-02 21:55:08
  • 利用Java实现简单的词法分析器实例代码

    2023-10-06 08:14:45
  • C#画图之饼图折线图的实现方法

    2021-12-05 22:26:13
  • java web监听器统计在线用户及人数

    2023-12-14 14:42:52
  • asp之家 软件编程 m.aspxhome.com