解决方案代码不适用于javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份验证的错误

时间:2014-10-01 00:16:07

标签: java ssl-certificate

这可能是重复的,但我的问题更多的是为什么我的解决方案代码不起作用。 我正面临着javax.net.ssl.SSLPeerUnverifiedException:peer not authenticated error。所以我使用这段代码来解决这个问题:http://javaskeleton.blogspot.com/2010/07/avoiding-peer-not-authenticated-with.html

在我的构造函数中,我将其称为:

 this.httpclient = new DefaultHttpClient();

    if(port == 443) {
        this.targetHost = new HttpHost(host, port, "https");
        this.httpclient = MyClass.wrapClient(httpclient);
    } else {
        this.targetHost = new HttpHost(host, port);
    }

网站上的代码如下所示:

    public static DefaultHttpClient wrapClient(DefaultHttpClient base) {
    try {
        SSLContext ctx = SSLContext.getInstance("TLS");
        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;
            }
        };
        X509HostnameVerifier verifier = new X509HostnameVerifier() {

            //@Override
            public void verify(String string, SSLSocket ssls) throws IOException {
            }

            //@Override
            public void verify(String string, X509Certificate xc) throws SSLException {
            }

            //@Override
            public void verify(String string, String[] strings, String[] strings1) throws SSLException {
            }

            //@Override
            public boolean verify(String string, SSLSession ssls) {
                return true;
            }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx);
        ssf.setHostnameVerifier(verifier);
        ClientConnectionManager ccm = base.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", ssf, 443));
        return new DefaultHttpClient(ccm, base.getParams());
    } catch (Exception ex) {
        ex.printStackTrace();
        return null;
    }
}

然而,它仍然给我相同的“同行未经验证的错误”。我已经评论了@Override,因为它给我一个错误说:“new X509HostnameVerifier(){}类型的方法verify(String string,SSLSocket ssls)必须覆盖超类方法。

我尝试过使用不同的代码来替换它,但是它们似乎没有用。 任何建议和帮助都将深表感谢。

感谢。

0 个答案:

没有答案
相关问题