java用HttpURLConnection发起HTTPS请求并跳过SSL证书

问题出现:unable to find valid certification path to requested target


解决办法:

复制 复制 复制 下面方法

  • 重点关注方法,任何类都可以Copy过去,两个东西是忽略本类的所有SSL

注意点

代码块如下:

public class HttpsUtils {private static final Logger log = LoggerFactory.getLogger(HttpsUtils.class);//调用该类直接跳过ssl证书 TODOstatic {try {trustAllHttpsCertificates();HttpsURLConnection.setDefaultHostnameVerifier((urlHostName, session) -> true);} catch (Exception e) {}}/*** 向指定 URL 发送POST方法的请求** @param url   发送请求的 URL* @param param 请求参数* @return 所代表远程资源的响应结果*/public static Map<String, Object> sendPostWithStatus(String url, String param) {Map<String, Object> map = new HashMap<>();PrintWriter out = null;String status = null;BufferedReader in = null;StringBuilder result = new StringBuilder();try {String urlNameString = url;log.info("sendPost - {}", urlNameString);URL realUrl = new URL(urlNameString);// 打开连接HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();// 默认是 GET方式conn.setRequestMethod("POST");// 设置是否向connection输出,因为这个是post请求,参数要放在http正文内,因此需要设为trueconn.setDoOutput(true);conn.setDoInput(true);// Post 请求不能使用缓存conn.setUseCaches(false);conn.setInstanceFollowRedirects(true);// 配置本次连接的Content-type,参数类型为jsonconn.setRequestProperty("Content-Type", "application/json");// 通用请求头信息conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");conn.setRequestProperty("Accept-Charset", "utf-8");conn.setRequestProperty("contentType", "utf-8");out = new PrintWriter(conn.getOutputStream());//请求参数out.print(param);out.flush();//获取响应的状态码 请求成功为200status = new Integer(((HttpURLConnection) conn).getResponseCode()).toString();in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String line;//获取响应内容while ((line = in.readLine()) != null) {result.append(line);}log.info("recv - {}", result);} catch (ConnectException e) {log.error("调用HttpUtils.sendPostWithStatus ConnectException, url=" + url + ",param=" + param, e);} catch (SocketTimeoutException e) {log.error("调用HttpUtils.sendPostWithStatus SocketTimeoutException, url=" + url + ",param=" + param, e);} catch (IOException e) {log.error("调用HttpUtils.sendPostWithStatus IOException, url=" + url + ",param=" + param, e);} catch (Exception e) {log.error("调用HttpsUtil.sendPostWithStatus Exception, url=" + url + ",param=" + param, e);} finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);}}map.put("status", status);map.put("result", result);return map;}/*** 跳过ssl证书** @throws NoSuchAlgorithmException* @throws KeyManagementException*/private static void trustAllHttpsCertificates() throws NoSuchAlgorithmException, KeyManagementException {TrustManager[] trustAllCerts = new TrustManager[1];trustAllCerts[0] = (TrustManager) new TrustAllManager();SSLContext sc = SSLContext.getInstance("SSL");sc.init(null, trustAllCerts, null);HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());}private static class TrustAllManager implements X509TrustManager {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkServerTrusted(X509Certificate[] certs, String authType) {}public void checkClientTrusted(X509Certificate[] certs, String authType) {}}
}

java用HttpURLConnection发起HTTPS请求并跳过SSL证书,解决:unable to find valid certification path to requested targ相关推荐

  1. JAVA 解决 unable to find valid certification path to requested target 证书认证

    JAVA 解决 unable to find valid certification path to requested target 证书认证 下载证书 导入证书 更新证书 其他命令 下载证书 点击 ...

  2. 【已解决】Https请求报错:unable to find valid certification path to requested target

    SSL认证失败: 报错信息如下: sun.security.validator.ValidatorException: PKIX path building failed: sun.security. ...

  3. Https请求报错:unable to find valid certification path to requested target

    SSL认证失败: 报错信息如下: sun.security.validator.ValidatorException: PKIX path building failed: sun.security. ...

  4. HttpClient发送Https请求报 : unable to find valid certification path to requested target

    一.场景   近期在对接第三方接口时,通过HttpClient发送Https请求报 : unable to find valid certification path to requested tar ...

  5. 【SSL】调用HTTPS://服务遇到错误:unable to find valid certification path to requested target

    前言 OkHttpClient 最近有个需求,需要调用一个https开头的URL服务. 服务方提供了一个demo,但,demo是调用http的服务. 网上找了一大圈,发现盖起来要这样要那样的.都不符合 ...

  6. Spring Boot项目中使用RestTemplate调用https接口出现 unable to find valid certification path to requested target

    问题描述:Spring Boot项目中使用RestTemplate调用https接口出现以下错误: PKIX path building failed: sun.security.provider.c ...

  7. JAVA 证书信任 :unable to find valid certification path to requested target

    最近使用 gradle 配置阿里云的maven代理仓库:https://maven.aliyun.com/repository/public 构建的时候遇到:unable to find valid ...

  8. Java使用HttpClient发送Https请求证书失效:PKIX path building failed:

    最近使用HttpClient对接第三方短信接口,在进行本地测试时报了一个证书失效的错误. 1. 封装的HttpClient的Post请求 public static Map<String, Ob ...

  9. 在Spring Rest模板中跳过SSL证书验证

    使用Spring Rest模板时如何跳过SSL证书验证? 配置Rest Template,以便它使用Http Client创建请求. 注意:如果您熟悉sun.security.provider.cer ...

最新文章

  1. 11G RAC 进程启动顺序
  2. Fastlane实战(一):移动开发自动化之道
  3. redis 控制调用频率
  4. Maven的pom文件那些事
  5. 转行程序员深漂的这三年 #1
  6. mysql 8 配置参数优化_mysql8 参考手册--配置非持久性优化器统计参数
  7. ASP.NET导出word实例
  8. 离异美女跟程序员相亲,结果自我介绍完就被秒删:三无送个儿
  9. Mr.J-- jQuery学习笔记(十四)--动画显示隐藏
  10. redis命令执行流程分析
  11. merge语句_SQL Server MERGE语句概述和示例
  12. python基础之字符串类型
  13. ftp文件服务器坑,Java实现FTP上传文件到Linux服务器的那些坑
  14. 结构光三维重建阶段性总结
  15. 【发现】中国与日德最可怕的差距,看着寒心
  16. 几种常见web 容器
  17. 【JS】JS 缓存数据的方法
  18. go 当前时间、时间戳和时间字符串及相互转换
  19. MaiPDF让你的数据安全得到保护
  20. java中excel文件的导入,限制上传的文件类型,文件的大小,显示上传文件的进度条...

热门文章

  1. AES加密算法的JAVA实现
  2. element ui el-time-picker 时间选择其组件的坑点记录
  3. Win10的Linux子系统Ubuntu换源
  4. spark sql 官网示例
  5. 关于将pem证书转为jellyfin可以使用的pkcs12证书
  6. 可视化:中国地图R/ggplot2
  7. 微信公众平台开发(11)--用户管理,获取关注用户的信息
  8. Ubuntu下无线鼠标滚轮失效问题解决
  9. 在下拉列表框中实现placeholder
  10. Xilinx Vivado定制IP核调用和除法器IP核的latency和resource分析