這裡使用的是HttpComponents-Client-4.1.2
package com.jadyer.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.ParseException;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.conn.scheme.Scheme;import org.apache.http.conn.ssl.SSLSocketFactory;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;/** * 使用HttpClient類比HTTPS訪問 * @see =================================================================================================================================== * @see 【配置Tomcat支援SSL(即讓Tomcat下的Web應用處於SSL安全通道中)】 * @see =================================================================================================================================== * @see 1、產生KeyStore * @see 1)運行-->CMD-->"keytool -genkey -alias Jadyer_SSL_20120508 -keyalg RSA -validity 1024 -keystore D:\Jadyer_SSL_20120508.keystore" * @see 參數說明----->-genkey 表示產生密鑰 * @see -alias 指定別名,這裡是Jadyer_SSL_20120508 * @see -keyalg 指定演算法,這裡是RSA * @see -validity 指定認證有效期間,這裡是1024天 * @see -keystore 指定儲存位置,這裡是D:\\Jadyer_SSL_20120508.keystore * @see 2)CMD輸出----->輸入keystore密碼:hongyu75 * @see 再次輸入新密碼:hongyu75 * @see 您的名字與姓氏是什嗎?[Unknown]:127.0.0.1(這裡要根據實際情況填寫網站網域名稱或者IP,否則會出現認證上的名稱無效) * @see 您的組織單位名稱是什嗎?[Unknown]:http://blog.csdn.net/jadyer * @see 您的組織名稱是什嗎?[Unknown]:JavaLover_jadyer * @see 您所在的城市或地區名稱是什嗎?[Unknown]:BJ * @see 您所在的州或省份名稱是什嗎?[Unknown]:BJ_NanTian * @see 該單位的兩字母國家代碼是什麼[Unknown]:CN * @see CN=127.0.0.1, OU=http://blog.csdn.net/jadyer, O=JavaLover_jadyer, L=BJ, ST=BJ_NanTian, C=CN 正確嗎?[否]:Y * @see 輸入<Jadyer_SSL_20120508>的主密碼(如果和 keystore 密碼相同,按斷行符號):這裡按斷行符號鍵 * @see (這裡的主密碼一定要與keystore密碼相同,否則啟動Tomcat時就會告訴你java.io.IOException: Cannot recover key) * @see 3)接下來就會按照-keystore參數值在指定位置產生指定的KeyStore檔案了 * @see =================================================================================================================================== * @see 2、讓Tomcat支援SSL * @see 1)將產生的Jadyer_SSL_20120508.keystore拷貝到\\%TOMCAT_HOME%\\conf\\目錄中(其它目錄也可以) * @see 2)修改\\%TOMCAT_HOME%\\conf\\server.xml檔案(大約在85行的位置),新增內容如下 * @see <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" * @see maxThreads="150" scheme="https" secure="true" * @see clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8" * @see keystoreFile="conf/Jadyer_SSL_20120508.keystore" keystorePass="hongyu75"/> * @see 3)這樣,我們的Tomcat就支援HTTPS訪問了(關於<Connector/>標籤中的屬性說明,參拜Google大神) * @see =================================================================================================================================== * @see 3、用瀏覽器訪問我們的應用 * @see 1)輸入https://127.0.0.1:8443/blog會發現你的應用已經處於SSL安全通道中了 * @see 此時,如果我們在瀏覽器裡訪問http://127.0.0.1:8443/blog會發現,竟然能訪問 * @see 也就是說,我們雖然啟用了HTTPS,但現在還可以繞開HTTPS直接存取HTTP還能,這樣HTTPS也就起不到作用了 * @see 2)我們可以配置一下\\%TOMCAT_HOME%\\conf\\web.xml檔案,使得HTTP的訪問能夠重新導向到HTTPS的串連 * @see 修改位置大約為web.xml的1224行,即在</welcome-file-list>標籤後面加入下面的內容,即可 * @see <security-constraint> * @see <!-- Authorization setting for SSL --> * @see <web-resource-collection> * @see <web-resource-name>SSL_App</web-resource-name> * @see <!-- 指明需要SSL的url --> * @see <url-pattern>/*</url-pattern> * @see <http-method>GET</http-method> * @see <http-method>POST</http-method> * @see </web-resource-collection> * @see <user-data-constraint> * @see <!-- 指明需要SSL --> * @see <transport-guarantee>CONFIDENTIAL</transport-guarantee> * @see </user-data-constraint> * @see </security-constraint> * @see =================================================================================================================================== * @author http://blog.csdn.net/jadyer * @editor Feb 1, 2012 3:02:27 PM */public class HttpClientUtil {public static void main(String[] args)throws Exception{//String requestUrl = "http://127.0.0.1:8088/test/web/userac";String requestUrl = "https://127.0.0.1:8443/test/web/userac";System.out.println(sendSSLRequest(requestUrl));}/** * 發送HTTPS請求 * @param requestUrl 請求的地址 * @return 響應內容 */@SuppressWarnings("finally")public static String sendSSLRequest(String requestUrl){long responseLength = 0; //響應長度String responseContent = null; //響應內容HttpClient httpClient = new DefaultHttpClient(); //建立預設的httpClient執行個體try {KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());FileInputStream fis = new FileInputStream(new File("F:\\Tool\\IDE\\Jadyer_SSL_20120508.keystore"));try {trustStore.load(fis, "hongyu75".toCharArray()); //載入KeyStore} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (CertificateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fis.close();} catch (IOException e) {e.printStackTrace();}}SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); //建立Socket工廠,將trustStore注入Scheme sch = new Scheme("https", 8443, socketFactory); //建立SchemehttpClient.getConnectionManager().getSchemeRegistry().register(sch); //註冊SchemeHttpGet httpGet = new HttpGet(requestUrl); //建立HttpGetHttpResponse response = httpClient.execute(httpGet); //執行GET請求HttpEntity entity = response.getEntity(); //擷取響應實體if (null != entity) {responseLength = entity.getContentLength();responseContent = EntityUtils.toString(entity, "UTF-8");EntityUtils.consume(entity); //Consume response content}System.out.println("請求地址: " + httpGet.getURI());System.out.println("響應狀態: " + response.getStatusLine());System.out.println("響應長度: " + responseLength);System.out.println("響應內容: " + responseContent);} catch (KeyManagementException e) {e.printStackTrace();} catch (UnrecoverableKeyException e) {e.printStackTrace();} catch (KeyStoreException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (ClientProtocolException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {httpClient.getConnectionManager().shutdown(); //關閉串連,釋放資源return responseContent;}}}