首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ning asynch http客户端如何接受任何证书

ning asynch http客户端如何接受任何证书
EN

Stack Overflow用户
提问于 2012-11-09 23:01:23
回答 1查看 3K关注 0票数 4

我在这页上看到了怎么做https

http://sonatype.github.com/async-http-client/ssl.html

但是,如果我只想忽略和接受任何证书,因为在这个环境中,我现在并不关心中间人,因为它是在一个隔离的环境中,而我只是在对QA数据执行一些自动化测试。

也许我的问题是如何在java的SSL堆栈中伪造SSL,这样它就可以接受另一端的任何证书(这不是双向的,因为它是https)。

上述链接中客户端的通用代码为

代码语言:javascript
复制
    char[] keyStorePassword = "changeit".toCharArray();
    KeyStore ks = KeyStore.getInstance("JKS");
    //ks.load(keyStoreStream, keyStorePassword);

    char[] certificatePassword = "changeit".toCharArray();
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    kmf.init(ks, certificatePassword);

    KeyManager[] keyManagers = kmf.getKeyManagers();
    javax.net.ssl.TrustManager tm = new MyTrustMgr();
    javax.net.ssl.TrustManager[] trustManagers = new javax.net.ssl.TrustManager[]{tm };
    SecureRandom secureRandom = new SecureRandom();

    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(keyManagers, trustManagers, secureRandom);
    return ctx;

好的,解决这个问题,我发现由于某些原因,这个仍然不起作用

代码语言:javascript
复制
    X509TrustManager tm = new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] xcs,
                String string) throws CertificateException {
        }
        public void checkServerTrusted(X509Certificate[] xcs,
                String string) throws CertificateException {
        }
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    };

    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(null, new TrustManager[] { tm }, null);
    return ctx;

谢谢你,迪恩

EN

回答 1

Stack Overflow用户

发布于 2017-09-22 17:59:08

晚了5年才参加聚会,但今天我也面临着同样的问题,你的问题在谷歌搜索中的排名相当靠前。因此,也许我的答案会对其他人有所帮助。

使用创建SSLContext的代码,此代码将创建一个AsyncHttpClient,它将忽略(或盲目接受)所有SSL证书:

代码语言:javascript
复制
    AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder()
            .setSSLContext(createSslContext())
            .build();

    httpClient = new AsyncHttpClient(config);

如上所述,createSslContext方法是您在答案中的代码的精确复制和粘贴:

代码语言:javascript
复制
    private SSLContext createSslContext() throws Exception {
        X509TrustManager tm = new X509TrustManager() {

            public void checkClientTrusted(X509Certificate[] xcs,
                                       String string) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] xcs,
                                       String string) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(null, new TrustManager[] { tm }, null);
        return ctx;
    }

以上示例适用于异步HTTP Client 1.9.40和Java 1.8

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13310444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档