HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”異常
在開發https應用時,你的測試伺服器常常沒有一個(有效的)SSL證書。在你的客戶端連線測試伺服器時,如下的異常會被丟擲:”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”。
1. 程式碼片段
通常,你會像下面那樣來建立HttpClient:
下面我們需要找到一個將TrustManager設定到我們的HttpClient的方法。TrustManager只是被SSL的Socket所使用。Socket通過SocketFactory建立。對於SSL Socket,有一個SSLSocketFactory(
首先我們需要得到一個SSLContext:
TLS是SSL的繼承者,但是它們使用相同的SSLContext。
然後我們需要使用我們上面新建立的TrustManager來初始化該上下文:
最後我們建立SSLSocketFactory:
現在我們仍然需要將SSLSocketFactory註冊到我們的HttpClient上。這是在SchemeRegistry中完成的:
我們註冊了一個新的Scheme,使用協議https,我們新建立的SSLSocketFactory包含了我們的TrustManager,然後我們告訴HttpClienthttps的預設埠是443.
2. 完整示例程式碼
下面的類接收HttpClient作為引數,然後返回一個新的接受任意SSL證書的HttpClient:
package com.vixuan.vplex;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
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;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class PostDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//請求格式https://mgmt-server-ip/vplex/clusters/cluster-name
String url="https://172.16.1.5/vplex/clusters/cluster-1";
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("Username","Service"));
params.add(new BasicNameValuePair("Password"," [email protected]"));
params.add(new BasicNameValuePair("args","cluster status"));
String result=sendPost(url,params);
System.out.println(result);
}
public static String sendPost(String url,List<NameValuePair> params){
String result="";
HttpClient client1 = new DefaultHttpClient();
HttpClient client =WebClientDevWrapper.wrapClient(client1);
HttpPost httppost = new HttpPost(url);
try {
// Post請求
// 設定引數
httppost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
// 傳送請求
HttpResponse httpresponse = client.execute(httppost);
HttpEntity entity = httpresponse.getEntity();
result = EntityUtils.toString(entity);
System.out.println(result);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
<span style="color:#ff0000;"> public static class WebClientDevWrapper {
public static HttpClient wrapClient(HttpClient base)
{
try {
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException
{
// TODO Auto-generated method stub
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException
{
// TODO Auto-generated method stub
}
public X509Certificate[] getAcceptedIssuers()
{
// TODO Auto-generated method stub
return null;
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = base.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
//設定要使用的埠,預設是443
sr.register(new Scheme("https", ssf, 443));
return new DefaultHttpClient(ccm, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}</span>
}
}
相關推薦
HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”異常
在開發https應用時,你的測試伺服器常常沒有一個(有效的)SSL證書。在你的客戶端連線測試伺服器時,如下的異常會被丟擲:”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”。 1. 程
避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”異常
在開發https應用時,你的測試伺服器常常沒有一個(有效的)SSL證書。在你的客戶端連線測試伺服器時,如下的異常會被丟擲:”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”。 解決方案:修改建
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 問題解決
最近線下除錯銀聯支付時報錯: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SS
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
Hello,小夥伴好久不見!今天在聯調介面時,遇到一個錯誤,糾結了好久才解決.雖然是粗心引起的,但是也大概明白了引起這個錯誤的來龍去脈,現在整理一下,分享給大家,希望大家在遇到這個類似問題了,不會太無助; 前言 我們來看下問題發生的大背景;這次我們聯
xUtils3 Https請求報錯:javax.net.ssl.SSLPeerUnverifiedException: Hostname ***.****.**not verified,跳過證書檢測
使用xUtils3傳送https請求報錯javax.net.ssl.SSLPeerUnverifiedException: Hostname ***.****.**not verified。 我想不驗證證書直接進行訪問(和http一樣了)。 解決過程: 剛開始設定 (
javax.net.ssl.SSLPeerUnverifiedException: No peer certificate【已解決】
新浪微博 Android SDK 分享時出錯,錯誤資訊:javax.net.ssl.SSLPeerUnverifiedException: No peer certificate com.weibo.net.WeiboException: javax.net.ssl.SSLP
Java HttpClient請求 peer not authenticated異常
HttpClient httpClient=new DefaultHttpClient(); httpClient = HttpsClient.getNewHttpsClient(httpClient);//直接呼叫即可 import java.securit
使用httpclient發起https請求時peer not authenticated,handshake_failure
轉載地址:http://www.cnblogs.com/metoy/p/6238061.html 一、前述 使用httpclient發起https請求時,可能會遇到如下異常: javax.net.ssl.SSLPeerUnverifiedException: pee
Cas單點登入配置SSL時遇到的javax.net.ssl.SSLPeerUnverifiedException問題的解決方法
網上有很多資料介紹如何整合CAS單點登入產品。由於整合CAS需要預先在tomcat中配置SSL,而且還要在客戶端匯入證書,但是許多人按照網上介紹的操作操作卻發現以下問題:儘管配置了SSL後可以訪問也能登入但是在位址列輸入自己的Web應用的連線,自動跳到Cas登入頁面,登入成
https請求報錯解決:javax.net.ssl.SSLException: Not trusted ...
通過https協議請求資料報錯了一下錯誤:javax.net.ssl.SSLException: Not trusted server certificate exception.在國外論壇上找了個解決的方案和大家分享。 我們需要自定義一個繼承org.apache.http.conn.ssl.SS
httpclient 出現peer not authenticated 問題解決 https
轉自:http://jingfeng198.blog.163.com/blog/static/46255920129153312606/ 用下面的程式碼就可以搞定。例子程式碼使用httpclient4.1 import java.security.cert.X509Cer
Android studio 報錯 gradel project sync failed Error:Cause: peer not authenticated
authent post -m -h cal all del erro 文件 在網上找了半天,應該是找不到gradel的路徑,試了網上非常多方法。本人解決例如以下: 在android studio中設置gradle。打開File-> settings->Gr
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed
span color create utf ray [] ret res 調用方法 使用HttpClient4.3 調用https出現如下錯誤: javax.net.ssl.SSLHandshakeException: sun.security.validator.V
解決 Java 調用 Azure SDK 證書錯誤 javax.net.ssl.SSLHandshakeException
初始 rac lis pos 開發 nor 過程 slc cnn Azure 作為微軟的公有雲平臺,提供了非常豐富的 SDK 和 API 讓開發人員可以非常方便的調用的各項服務,目前除了自家的 .NET、Java、Python、 nodeJS、Ruby,PHP 等語言都提供
https 調用驗證失敗 peer not authenticated
實現 不同 not org 失敗 下載 efault ltr net https 調用驗證失敗 peer not authenticated 報錯日誌: Caused by: javax.net.ssl.SSLPeerUnverifiedException: pe
SoapUI 請求 https 報 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
在 E:\ProgramFiles\SmartBear\SoapUI-Pro-5.1.2\bin\SoapUI-Pro-5.1.2.vmoptions 中新增一行程式碼,程式碼如下: -Dsoapui.https.protocols=TLSv1.1,TLSv1.2 新增一行程式碼
javax.net.ssl.SSLHandshakeException: Remote host closed connection during han 報錯解決
javax.net.ssl.SSLHandshakeException: Remote host closed connection during han 北京某銀行信用卡網申開發團隊發來協助請求,內容是這樣的: 內網中應用伺服器要實現某一功能,需要從外網銀聯端獲取一段資
javax.net.ssl.SSLException 解決辦法(踩坑)
剛剛安裝了ubuntu18.04 ,執行/gradlew assembleDebug的時候報異常javax.net.ssl.SSLException 在網上找找別人的踩坑指南,找了很久很久,終於在stackoverflow上的一行小字找到了解決方法
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 痛苦解決之旅
上週另外一專案組的同事找到我說,遇到一個問題很棘手兩天了還沒解決掉,報錯如下: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at su
解決javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path
參考部落格:https://blog.csdn.net/u014256984/article/details/73330573 1、新建一個空的InstallCert.java 檔案,用notepad++開啟 2、複製下面的程式碼到檔案裡面,儲存 /* * Copyright