摘要:添加信任所有服務端證書也可在方法中控制信任所有證書使用發(fā)送請求默認端口測試客戶端證書路徑證書密碼發(fā)送請求導入客戶端證書添加信任證書為信任所有證書創(chuàng)建上下文初始化參數(shù)為,則不上傳客戶端證書通常情況都是如此驗證系統(tǒng)默認證書導出服務端證書,
添加信任所有服務端證書也可在方法中控制
package something; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; /** * 信任所有證書 * @author hp * */ public class AllTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } }
使用HttpsURLConnection發(fā)送POST請求(默認443端口)
package something; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; public class HttpsRequest { //測試url private final static String URL_TEST="https://www.baidu.com"; //客戶端證書路徑 private final static String PATH="c://xxxx"; //證書密碼 private final static String psw="123456"; /** * 發(fā)送POST請求 * @param agrs * @return * @throws IOException * @throws KeyManagementException * @throws KeyStoreException * @throws NoSuchAlgorithmException * @throws CertificateException * @throws UnrecoverableKeyException */ public String doPost(String agrs) throws IOException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException{ //導入客戶端證書 KeyStore ks=KeyStore.getInstance("pkcs12"); FileInputStream instream = new FileInputStream(new File(PATH)); ks.load(instream, psw.toCharArray()); KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509"); kmf.init(ks, psw.toCharArray()); //添加信任證書 TrustManager[] tm={new AllTrustManager()};//AllTrustManager()為信任所有證書 SSLContext ctx=SSLContext.getInstance("SSL");//創(chuàng)建ssl上下文 //初始化 ;參數(shù)1為null,則不上傳客戶端證書(通常情況都是如此); ctx.init(kmf.getKeyManagers(), tm, new SecureRandom()); //ctx.init(kmf.getKeyManagers(), null, new SecureRandom());//驗證系統(tǒng)默認證書 //ctx.init(kmf.getKeyManagers(), TrustManager[] tm, new SecureRandom());//導出服務端證書,然后按照keymanager一樣實現(xiàn)trustmanager SSLSocketFactory sf=ctx.getSocketFactory(); URL _url=new URL(URL_TEST); HttpsURLConnection conn=(HttpsURLConnection) _url.openConnection(); conn.setRequestMethod("POST");//設定請求方法 conn.setConnectTimeout(20000); conn.setReadTimeout(20000); conn.setDoInput(true);//打開輸入流 conn.setDoOutput(true);//打開輸出流寫入寫出參數(shù)必需 conn.setSSLSocketFactory(sf);//添加ssl參數(shù) //輸出參數(shù) PrintWriter pw=new PrintWriter(conn.getOutputStream()); pw.write(agrs); pw.flush(); //獲取輸入流 BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer result=new StringBuffer(); String s=br.readLine(); while(s!=null){ result.append(s); s=br.readLine(); } pw.close(); br.close(); return result.toString(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68470.html
摘要:而且文章經過統(tǒng)計發(fā)現(xiàn)的應用程序沒有正確地在通信過程中進行證書驗證。確認服務器端證書的和代碼中的證書主體一致。根據開發(fā)安全的應用提出的觀點,可以避免最終用戶證書有效期可能比較短的問題。 轉載請注明出處 http://www.paraller.com 原文排版地址 點擊獲取更好閱讀體驗 轉載:http://xhrwang.me/2015/06/06/https-and-android....
摘要:程序在訪問資源時,出現(xiàn)報錯這本質上,是在訪問資源時的證書信任問題。因此,如果用訪問資源,發(fā)現(xiàn)證書不可信任,則會報文章開頭說到的錯誤。 java程序在訪問https資源時,出現(xiàn)報錯sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunC...
一、RestTemplate 簡介Spring RestTemplate是Spring提供的用于訪問Rest服務的客戶端,RestTemplate 提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率. RestTemplate包含以下幾個部分: HttpMessageConverter 對象轉換器:將請求對象轉換為具體的數(shù)據格式輸出,例 入:Jaxb2RootElemen...
閱讀 1683·2021-10-13 09:39
閱讀 3154·2021-10-12 10:11
閱讀 549·2021-09-28 09:36
閱讀 2633·2019-08-30 15:55
閱讀 1384·2019-08-30 13:04
閱讀 621·2019-08-29 17:08
閱讀 1902·2019-08-29 14:14
閱讀 3399·2019-08-28 18:23