javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f

2023-05-16

原因:这是SSL证书请求问题。

原代码


private String postForAPP1(String token) throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        TxnBodyCom txnBodyCom = new TxnBodyCom();
        param.put("txnBodyCom", txnBodyCom);
//        txnCom.setTxnBodyCom(txnBodyCom);
        TxnCommCom txnCommCom = new TxnCommCom();
        txnCommCom.setTRecInPage("1111");
        txnCommCom.setTxnIttChnlCgyCode("1111");
        txnCommCom.setTStsTraceId("=01111");
        txnCommCom.setTPageJump("1111");
        txnCommCom.setTxnIttChnlId("1111111");
        param.put("txnCommCom", txnCommCom);
        JSON.toJSONString(param);

        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300 * 1000)
                .setConnectTimeout(300 * 1000).build();
        // 创建post方式请求对象
        HttpPost post = new HttpPost("https://www.baidu.com:1111");
        post.setConfig(requestConfig);
        // 请求的数据包为raw,设置报文头为Content-Type
        post.addHeader("Content-Type", "application/json;charset=utf-8");
        post.addHeader("C-Tenancy-id", "11111");
        post.addHeader("Connection", "keep-alive");
        post.addHeader("Referer", "https://www.baidu.com:1111");
        post.addHeader("C-Dynamic-Password-Foruser", token);
        post.addHeader("C-App-Id", "11111");

        // 装载参数
        StringEntity postingString = new StringEntity(JSON.toJSONString(param), "utf-8");
        post.setEntity(postingString);
        // 执行请求并拿到结果
        HttpResponse response = null;
        String content = null;
        CloseableHttpClient client = null;
        try {
//            httpClient = buildSSLCloseableHttpClient();
            response = httpClient.execute(post);
            // 判断返回状态是否正常
            int state = response.getStatusLine().getStatusCode();

            // 获取结果实体并返回结果
            org.apache.http.HttpEntity entity = response.getEntity();
            content = EntityUtils.toString(entity);
            return content;
        }  catch (Exception e) {
            e.printStackTrace();
        } finally {
            httpClient.close();
        }
        return null;
    }  

报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

修改代码:新增一个方法,忽略主机名称验证


/**
 * buildSSLCloseableHttpClient:(设置允许所有主机名称都可以,忽略主机名称验证)
 * @author xbq
 * @return
 * @throws Exception
 */
private static CloseableHttpClient buildSSLCloseableHttpClient() throws Exception {
    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
        // 信任所有
        public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            return true;
        }
    }).build();
    // ALLOW_ALL_HOSTNAME_VERIFIER:这个主机名验证器基本上是关闭主机名验证的,实现的是一个空操作,并且不会抛出javax.net.ssl.SSLException异常。
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1.2" }, null,
            SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}  

在原代码处调用新增的方法


private String postForAPP1(String token) throws Exception {
        Map<String, Object> param = new HashMap<String, Object>();
        TxnBodyCom txnBodyCom = new TxnBodyCom();
        param.put("txnBodyCom", txnBodyCom);
//        txnCom.setTxnBodyCom(txnBodyCom);
        TxnCommCom txnCommCom = new TxnCommCom();
        txnCommCom.setTRecInPage("10");
        txnCommCom.setTxnIttChnlCgyCode("111111");
        txnCommCom.setTStsTraceId("1111111");
        txnCommCom.setTPageJump("1");
        txnCommCom.setTxnIttChnlId("1111");
        param.put("txnCommCom", txnCommCom);
        JSON.toJSONString(param);

        CloseableHttpClient httpClient = HttpClients.createDefault();
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300 * 1000)
                .setConnectTimeout(300 * 1000).build();
        // 创建post方式请求对象
        HttpPost post = new HttpPost("https://www.baudu.com");
        post.setConfig(requestConfig);
        // 请求的数据包为raw,设置报文头为Content-Type
        post.addHeader("Content-Type", "application/json;charset=utf-8");
        post.addHeader("C-Tenancy-id", "1111111");
        post.addHeader("Connection", "keep-alive");
        post.addHeader("Referer", "https://www.baidu.com");
        post.addHeader("C-Dynamic-Password-Foruser", token);
        post.addHeader("C-App-Id", "11111111");

        // 装载参数
        StringEntity postingString = new StringEntity(JSON.toJSONString(param), "utf-8");
        post.setEntity(postingString);
        // 执行请求并拿到结果
        HttpResponse response = null;
        String content = null;
        CloseableHttpClient client = null;
        try {
           //调用新方法
            httpClient = buildSSLCloseableHttpClient();
            response = httpClient.execute(post);
            // 判断返回状态是否正常
            int state = response.getStatusLine().getStatusCode();

            // 获取结果实体并返回结果
            org.apache.http.HttpEntity entity = response.getEntity();
            content = EntityUtils.toString(entity);
            return content;
        }  catch (Exception e) {
            e.printStackTrace();
        } finally {
            httpClient.close();
        }
        return null;
    }  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f 的相关文章

  • 如何在单个 Razor 视图中编辑多个模型

    我是 MVC3 的新手 我有多个模型 例如BussinessDetails ContactPerson ServiceArea Address以及更多型号 我有一个单一的视图页面 其中共享视图页面如Contacts BusinessDeta
  • 如何在.NET 3.5中进行动态对象创建和方法调用

    创建类对象的代码看起来如何 string myClass MyClass 上面的类型 然后调用 string myMethod MyMethod 在那个物体上 Use Type GetType string http msdn micros
  • 链和主证书添加之间 X509 结构的正确释放是否有所不同?

    我需要从内存中添加 PEM 类型证书 这意味着我无法使用内置的从文件读取帮助程序 我的问题是没有关于如何释放内存的文档 现在我最好的猜测如下 SSL CTX use certificate X509 structure SHOULD be
  • 抓取内存中的 .net 进程

    我正在尝试保护我用 C 编写的中小型 MMO 但我们遇到了一些黑客问题 我想知道是否有一种方法可以获取当前位于内存中而不是磁盘上的进程的副本 我们在游戏中有一个非常安全的算法 但是它无法阻止人们修改游戏的内存版本 有什么办法可以做到这一点吗
  • C# 模拟接口与模拟类

    我是 net 中的最小起订量框架的新手 根据我的在线研究 似乎有两种方法可以使用这个框架 要么模拟接口 要么模拟具体类 似乎在嘲笑具体类时 只有virtual方法可以被嘲笑 就我而言 我只想模拟实现接口的类的几个方法 例如 如果我们有以下内
  • 修饰符 async 对此项目无效

    这似乎并不是数百个具有相同错误的其他问题的重复 我把它们都看过了 发现它们是无关的 我正在制作一个小笔记应用程序 并尝试从目录中读取文件 按照 MSDN 示例 我有以下代码 但它给了我一个错误 错误 1 修饰符 async 对此无效 项目
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 何时使用 IComparable 与何时使用IComparer

    我正在尝试找出我需要实现哪些接口 他们本质上都做同样的事情 我什么时候会使用其中一种而不是另一种 好吧 他们不是quite与IComparer
  • 如何将 ConcurrentDictionary 转换为字典?

    我有一个 ConcurrentDictionary 对象 我想将其设置为 Dictionary 对象 不允许在它们之间进行转换 那么我该怎么做呢 The ConcurrentDictionary
  • web.config 转换为

    我有针对多个环境的 web config 转换 在配置文件中 我有一个 applicationSettings 部分 其中包含多个设置和值对 我尝试过根据用于匹配名称的语法并更改连接字符串以匹配设置并更改值 但转换失败 这是可能吗 所以我的
  • Sencha Touch 和远程服务器上的身份验证

    我希望收到您关于使用 PhoneGap 和 Sencha Touch 的应用程序以及带有 Active Directory 的 NET 服务器的身份验证机制的反馈 因此 我们需要在移动设备上存储用户凭据 以便用户每次希望使用该应用程序时都不
  • 如何在发送邮件之前验证 smtp 凭据?

    我需要验证在中设置的用户名和密码SmtpClient发送邮件之前的实例 使用此代码 SmtpClient client new SmtpClient host client Credentials new NetworkCredential
  • EF数据库首先如何针对数据库更改更新模型?

    在班级图书馆Ado net Entity Data Model已生成 POCO 类 这些是第一次生成的 但数据库更改并未得到反映 在edmx图表右键单击并选择Update Model from Database显示新创建的表 但即使选择添加
  • 将 C# 字符串传递给非托管 C++ DLL

    我有一个简单的应用程序 它加载一个非托管 dll 并从 C 向它传递一些字符串值 但在 C dll 应用程序中 我收到异常 试图访问读 写保护的内存 我的 DLL 导入如下所示 DllImport X dll CallingConventi
  • 从嵌入 C# 的浏览器控件获取 HTML 源代码

    我有一个嵌入在 C Windows 应用程序中的浏览器控件 我想获取渲染的 HTML 可能已被 javascript 修改 而不是原始 HTML 有什么建议么 您可以获取 HTML 并确实设置它 使用WebBrowser DocumentT
  • FullCalendar Asp.Net WebForms

    我正在尝试实施全日历 https i stack imgur com wmhGx png在我的 ASP NET 上WebForms项目 我见过一些实现此目的的示例 但没有任何运气 因为它们是针对我不习惯的 MVC 的 My Events数据
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L

随机推荐

  • Edge浏览器黑色背景设置

    1 打开Edge浏览器 xff0c 点击右上角的三个点 xff0c 选择 扩展 选项 xff0c 如下图 xff1a 2 搜索Dark Reader xff0c 点击 获取 3 点击开启 4 Edge浏览器 设置 外观 主体中选择雨夜模式
  • time(0) 是什么意思?

    time 0 返回的是系统的时间 xff08 从1970 1 1午夜算起 xff09 xff0c 单位 xff1a 秒 time 参数一般为0或者Null相当于 取系统时间 include lt iostream gt include lt
  • 函数指针、表驱动用法

    函数指针 xff08 1 xff09 函数指针含义 函数 在C语言中 xff0c 函数作为功能完成的基本单位 xff0c 它的定义如下 xff1a FunctionType FuncName ArgumentList FunctionBod
  • C++的Char traits模板类

    Char traits 头文件 Char traits h Generic char traits class Note that this class is provided only as a base for explicit spe
  • C++ 文件操作

    需要了解的概念 数据流 缓冲区 Buffer 文件类型 文件存取方式 借助文件指针读写文件 需要理解的知识点包括 xff1a 数据流 缓冲区 文件类型 文件存取方式 1 1 数据流 xff1a 指程序与数据的交互是以流的形式进行的 进行C语
  • 【Web篇】(6.3) ❀ 15. Kali 下载与安装 ❀ FortiWeb 攻防演练

    简介 Kali 是一个基于 Debian 的 Linux 发行版 它的目标就是为了简单 xff1a 在一个实用的工具包里尽可能多的包含渗透和审计工具 Kali 实现了这个目标 大多数做安全测试的开源工具都被囊括在内 Kali 介绍 Kali
  • 修改树莓派系统的更新源,软件安装源和pip安装源

    本文目录 1 更换系统更新源2 更改软件源3 更换 pip 源4 更新系统与软件5 附加知识 Linux系统常用的安装源主要有系统更新源和软件安装源二大类 xff0c 系统更新源是用于对Linux系统本身进行升级更新的 xff0c 软件安装
  • ubuntu虚拟机网络配置同时连接WIFI上外网和连接以太网与ARM开发板通信

    在学习ARM嵌入式开发过程中 xff0c 需要在ubuntu虚拟机下进行程序开发和编译 xff0c 一般需要使用网线直连ARM开发板 xff0c 或挂载NFS网络文件系统 xff0c 或 通过SSH TFTP等网络协议传输在PC端编译完的二
  • error: unable to read askpass response from 解决办法

    出现这个报错 xff0c 我认为原因与你的码云账号有关 xff0c 因为我在网上大量搜过这个问题 xff0c 最后 检查了一番原来是gitee账号登录过期 xff0c 于是重新进行登录 xff0c 可是登录成功还是提示错误 xff0c 最后
  • you-get 参数说明

    pip install you get 1下载所有的视频 you get playlist https www bilibili com bangumi play ep173182 https www bilibili com bangum
  • Hive SQL的编译过程

    Hive是基于Hadoop的一个数据仓库系统 xff0c 在各大公司都有广泛的应用 美团数据仓库也是基于Hive搭建 xff0c 每天执行近万次的Hive ETL计算流程 xff0c 负责每天数百GB的数据存储和分析 Hive的稳定性和性能
  • 如何解决在Windows 11出现“组织在此电脑上管理更新”错误?

    Windows 11出现 组织在此电脑上管理更新 的原因 自微软新操作系统Windows 11发布以来 xff0c 不少用户都希望对自己的旧系统进行升级 xff0c 体验新的界面和功能 为确保您的电脑满足运行Windows 11操作系统的系
  • Linux 下更新grub方法

    vim boot grub2 grub cfg grub2 mkconfig o boot efi EFI uos grub cfg
  • cuda安装报错toolkit installation failed using unsupported compiler

    Error unsupported compiler 7 5 0 Use override to override this check 61 61 61 61 61 61 61 61 61 61 61 61 Summary 61 61 6
  • conda更新被中断,conda命令丢失,一切anaconda相关程序无法启动

    故事背景就不多说了 xff0c 状况就是conda更新的过程被打断了 在Anaconda3 Scripts文件夹下的文件缺失 xff0c 这样conda命令也失效了 jupyter notebook也无法启动 可是我已经建立好的虚拟环境和装
  • 前端学习笔记-AJAX

    首字母略缩词AJAX xff0c 全名Asynchronous Javascript And XML 卖点当然是第一个词 xff1a Asynchronous xff0c 即异步 xff1b 而最后一个词是XML xff0c 当然要谈到XM
  • 关于flex属性缩写兼容性问题

    我们常希望用属性flex 1来代替flex 1 1 0 xff0c 其三个分量分别为flex grow flex shrink flex basis xff0c 前两者设1表示不侵占剩余空间也不希望被侵占 xff0c flex basis置
  • 英语二写作新增样题分层范文

    Directions Read the following excerpt from an article and write an essay In your essay you should explain whether or to
  • 可观察对象如何与模态框协作

    可观察对象如何与模态框协作 以组件PriceAlertModal为例 xff0c 观察Modal与可观察对象的结合使用 src common reactModules priceAlertModal components priceAler
  • javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f

    原因 xff1a 这是SSL证书请求问题 原代码 private String postForAPP1 String token throws Exception Map lt String Object gt param 61 new H