1. java應用http換成https訪問超時
要將Java應用從HTTP更改為HTTPS訪問,需要對應用程序進行一些相關設置,以便能夠支持HTTPS協議。
第一步,購買一個SSL證書,SSL證書可以用來加密傳輸的數據,以保證安全性。
第二步,將SSL證書安裝到Java Web伺服器中,這樣Java Web伺服器就可以使用SSL協議來加密傳輸的數據。
第三步,在Java應用程序中添加HTTPS相關的設置,以便可以使用HTTPS協議對數據進行加密傳輸。
第四步,在Java應用程序中將HTTP訪問替換為HTTPS訪問,這樣就可以使用HTTPS協議對數據進行加密傳輸,以確保安全性。
第五步,在應用程序中添加超時設置,以便在指定時間內沒有響應時關閉連接,以避免意外發生。
第六步,安裝完成後,對應用程序進行測試,以確保可以正常使用HTTPS協議訪問應用程序,並且設置的超時時間可以正常工作。
2. https證書到期會影響java請求么
會
在java代碼中請求https鏈接的時候,可能會報下面這個錯誤
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
原因是沒有證書。在瀏覽器中直接使用url訪問是可以的,應該是瀏覽器之前就保存過對應的.cer證書。
解決方法有兩種,從目標機器獲得有效證書或者忽略證書信任問題。
一、獲得目標機器有效證書
1、編譯安裝證書程序 javac InstallCert.java
2、運行安裝證書程序生成證書
java InstallCert my.hoolai.com
例如:java InstalCert smtp.zhangsan.com:465 admin
如果不加參數password和host的埠號,上面的獲取證書程序中默認給的埠號是:443,密碼是:changeit3、根據運行提示信息,輸入1,回車,在當前目錄下生成名為: jssecacerts 的證書
將證書放置到$JAVA_HOME/jre/lib/security目錄下, 切記該JDK的jre是工程所用的環境!!!
或者:
System.setProperty("javax.net.ssl.trustStore", "你的jssecacerts證書路徑");
可以更改密碼,在security目錄下運行命令
keytool -storepasswd -new xxxcom -keystore cacerts
就可以修改密碼,修改後使用命令
keytool -list -v -keystore cacerts
查看文件的信息,會提示需要密碼才能查看,如果輸入密碼與修改後的密碼匹配,說明修改成功了。
PS:至此這種方式可以成功使用ssl了,另外再補充一下,根據剛才生成的文件jssecacerts,可以生成cer文件,
命令如下
keytool -export -alias xxx.com-1 -keystore jssecacerts -rfc -file xxx.cer
如上,之前的工具類中默認命名別名是加上"-1"。使用InstallCert設置的密碼需要跟cacerts文件中的密碼一致,
如果修改過密碼,就需要修改InstallCert類中對應的密碼字元串,否則會有下面這個異常:
java.security.UnrecoverableKeyException: Password verification failed
二、忽略證書信任問題
源碼:http://mengyang.iteye.com/blog/575671
一定要注意需要在connection創建之前調用文章里所述的方法,像這個樣子:
trustAllHttpsCertificates();
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
connection = (HttpURLConnection) url.openConnection();
好吧,兩種方法都試過有效。
3. 用java做一個httpClient 發送https 的get請求,需要證書驗證的那種,求大神指點一下!
你那個 SSLSocketFactory(ks) 是自己的類?
你有用過 KeyManager.init (...)? 和 TrustManager.init(...) ?
想要在連接建立過程上互動式的彈出確認對話框來的話需要我們自己提供一個 KeyManager 和 TrustManager 的實現類,這有點復雜,你可以看一個 Sun 的 X509KeyManager 是怎麼做的,默認地情況下它是從自動搜索匹配的 subject ,我們需要用自己提供的方式彈出確認的過程還不是全自動,另外一個賬戶可能有多個數字證書,比如支付寶我們就有多個簽發時間不一樣的數字證書,在連接建立時 IE 會提示我們選擇其中的一個來使用,銀行的 U 盾在安裝多張數字證書時也會提示我們選擇其中一個對應到你正在使用的銀行卡號的那張證書。
4. java客戶端怎麼訪問帶有pfx格式證書的https網站(伺服器)呢,
使用HttpURLConnection訪問https地址。
以下是導入JKS證書的方式,可以參考。
Stringkeystorefile="file";
Stringkeystorepw="password";
Stringkeypw="password";
KeyStorekeystore=KeyStore.getInstance("JKS");
keystore.load(newFileInputStream(keystorefile),keystorepw.toCharArray());
=KeyManagerFactory.getInstance("SunX509");
keymanagerfactory.init(keystore,keypw.toCharArray());
KeyManagerakeymanager[]=keymanagerfactory.getKeyManagers();
=TrustManagerFactory.getInstance("SunX509");
trustmanagerfactory.init(keystore);
TrustManageratrustmanager[]=trustmanagerfactory.getTrustManagers();
sslcontext=SSLContext.getInstance("TLS");
sslcontext.init(akeymanager,atrustmanager,null);
sslSocketFactory=sslcontext.getSocketFactory();
Stringurl="asdfdf";
URLtestURL=newURL(url);
=(HttpURLConnection)testURL.openConnection();
if(){
HttpsURLConnectionconn=(HttpsURLConnection)urlConnection;
conn.setSSLSocketFactory(sslSocketFactory);
}