避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
来源:互联网 发布:java socket server 编辑:程序博客网 时间:2024/05/16 16:13
在开发https应用时,你的测试服务器常常没有一个(有效的)SSL证书。在你的客户端连接测试服务器时,如下的异常会被抛出:”javax.NET.ssl.SSLPeerUnverifiedException: peer not authenticated”。
解决方案:修改创建HttpClient的方式
分析:
1.需要告诉client使用一个不同的TrustManager。TrustManager是一个检查给定的证书是否有效的类。SSL使用的模式是X.509,对于该模式Java有一个特定的TrustManager,称为X509TrustManager。首先我们需要创建这样的TrustManager。
2.将TrustManager设置到我们的HttpClient。TrustManager只是被SSL的Socket所使用。Socket通过SocketFactory创建。对于SSL Socket,有一个SSLSocketFactory。当创建新的SSLSocketFactory时,你需要传入SSLContext到它的构造方法中。在SSLContext中,我们将包含我们新创建的TrustManager。
所以
1.创建的TrustManager
2.创建SSLContext:TLS是SSL的继承者,但是它们使用相同的SSLContext。
3.创建SSLSocketFactory
4.将SSLSocketFactory注册到我们的HttpClient上。这是在SchemeRegistry中完成的。
4.1.创建ClientConnectionManager
4.2.创建SchemeRegistry
5.生成HttpClient
代码:
- import java.security.cert.CertificateException;
- import java.security.cert.X509Certificate;
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.TrustManager;
- import javax.net.ssl.X509TrustManager;
- import org.apache.http.client.HttpClient;
- import org.apache.http.conn.ClientConnectionManager;
- import org.apache.http.conn.scheme.Scheme;
- import org.apache.http.conn.scheme.SchemeRegistry;
- import org.apache.http.conn.ssl.SSLSocketFactory;
- import org.apache.http.impl.client.DefaultHttpClient;
- public class WebClientDevWrapper {
- public static HttpClient wrapClient(HttpClient base) {
- try {
- SSLContext ctx = SSLContext.getInstance("TLS");
- X509TrustManager tm = new X509TrustManager() {
- public X509Certificate[] getAcceptedIssuers() {
- return null;
- }
- public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
- public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
- };
- ctx.init(null, new TrustManager[] { tm }, null);
- SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- ClientConnectionManager ccm=base.getConnectionManager();
- SchemeRegistry registry = ccm.getSchemeRegistry();
- registry.register(new Scheme("https", 443, ssf));
- return new DefaultHttpClient(ccm, base.getParams());
- /* SchemeRegistry registry = new SchemeRegistry();
- registry.register(new Scheme("https", 443, ssf));
- ThreadSafeClientConnManager mgr = new ThreadSafeClientConnManager(registry);
- return new DefaultHttpClient(mgr, base.getParams());*/
- } catch (Exception ex) {
- ex.printStackTrace();
- return null;
- }
- }
- }
- HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- https应用:避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- https应用:避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- HttpClient javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
- javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
- Exception : javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
- javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- javax.net.ssl.SSLPeerUnverifiedException: No peer certificate【已解决】
- 新浪微博:javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- android javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- Android javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- android javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- 安卓接sdk时javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的问题
- android 5.0 SSL Socket exception javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- SoapUI测试Https请求,解决问题SSLPeerUnverifiedException: peer not authenticated
- 约瑟夫环C++笔试题
- Tomcat 配置遇到的问题
- 【PAT】1009. Product of Polynomials
- 关于linux下的NetKeeper替代openkeeper
- ISLR第三章
- 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
- Dalvik 与 ART 区别
- C语言-数据结构-插入排序及优化-源代码
- 浅谈BI领域的数据模型设计(二)
- jQuery学习笔记:DOM操作(二)——属性、类、HTML、CSS
- android.os.SystemClock类
- Git 本地仓库与远程仓库管理的常用操作
- Item29 Assume that move operations are not present,not cheap,and not used
- android view的测量模式