如何使用Apache HttpClient 4.0绕过无效的SSL证书错误?

推荐答案

您需要使用您自己的TrustManager创建SSLContext,并使用此上下文创建HTTPS方案.这是代码,

SSLContext sslContext = SSLContext.getInstance("SSL");

// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                    System.out.println("getAcceptedIssuers =============");
                    return null;
            }

            public void checkClientTrusted(X509Certificate[] certs,
                            String authType) {
                    System.out.println("checkClientTrusted =============");
            }

            public void checkServerTrusted(X509Certificate[] certs,
                            String authType) {
                    System.out.println("checkServerTrusted =============");
            }
} }, new SecureRandom());

SSLSocketFactory sf = new SSLSocketFactory(sslContext);
Scheme httpsScheme = new Scheme("https", 443, sf);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);

// apache HttpClient version >4.2 should use BasicClientConnectionManager
ClientConnectionManager cm = new SingleClientConnManager(schemeRegistry);
HttpClient httpClient = new DefaultHttpClient(cm);

Java相关问答推荐

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

如何在Java中声明未使用的变量?

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

CAMEL 4中的SAXParseException

流迭代列表<;对象>;上的NoSuchElementException

如何判断一个矩阵是否为有框矩阵?

AssertJ Java:多条件断言

无法使用ApacheSpark依赖项构建JavaFX应用程序

如何从日期中截取时间并将其传递给组件?

如果按钮符合某些期望,如何修改它的文本?

在JDK Flight Recorder中只记录单个线程

如何在Java中使用正则表达式拆分字符串

接受类及其接口的Java类型(矛盾)

如何制作回文程序?

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

谷歌应用引擎本地服务器赢得';t在eclipse上运行

spring 数据Elastic search 与 spring 启动数据Elastic search 之间的区别是什么?

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别

SonarQube在合并升级到java17后对旧代码提出错误