俊星的BLOG

          HTTP Client及HTTPS初探

          HTTP Client是一個客戶端HTTP協(xié)議的類庫
          1、首先是下載APACHE HTTP CLIENT相關(guān)的JAR,目前我引入到工程中的相關(guān)文件時:
          httpclient-4.0.3.jar
          httpcore-4.0.1.jar
          httpmime-4.0.3.jar
          commons-codec-1.4.jar
          commons-logging-1.1.1.jar

          JAR包之前的引用關(guān)系在README等相關(guān)說明中已有。

          2、下載并運(yùn)行TOMCAT,我下載的是TOMCAT6(對應(yīng)的是JDK5),主要注意的是需要配置CATALINA_HOME這個環(huán)境變量。

          3、制作服務(wù)器端證書,下面是我一個示例:
          C:\Documents and Settings\dingjunxing>keytool -genkey -alias tomcat3 -keystore F
          :\eclipse\workspace\httpc\tomcat3.keystore
          輸入keystore密碼:  
          123456
          您的名字與姓氏是什么?
            [Unknown]:  localhost
          您的組織單位名稱是什么?
            [Unknown]:  sz
          您的組織名稱是什么?
            [Unknown]:  sz
          您所在的城市或區(qū)域名稱是什么?
            [Unknown]:  shenzhen
          您所在的州或省份名稱是什么?
            [Unknown]:  guangdong
          該單位的兩字母國家代碼是什么
            [Unknown]:  cn
          CN
          =localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn 正確嗎?
            [否]:  y
          輸入
          <tomcat3>的主密碼
                  (如果和 keystore 密碼相同,按回車):  
          123456

          4、根據(jù)服務(wù)器證書導(dǎo)出客戶端證書,有兩種方式,一種為采用IE,下面提供一個利用KEY TOOL導(dǎo)出的方式:
          keytool -export -file tomcat3.cert -alias tomcat3 -keystore F:\eclipse\workspace\httpc\tomcat3.keystore
          注意:上面命令行必須進(jìn)入到
          %java_home%/jre/lib/security中。

          5、將獲取到的客戶端證書導(dǎo)入:
          C:\Program Files\Java\jdk1.5.0_15\jre\lib\security>keytool -import -keystore cac
          erts 
          -file F:\eclipse\workspace\httpc\tomcat3.cert
          輸入keystore密碼:  
          123456
          Owner: CN
          =localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn
          發(fā)照者: CN
          =localhost, OU=sz, O=sz, L=shenzhen, ST=guangdong, C=cn
          序號: 4cc55438
          有效期間: Mon Oct 
          25 17:56:08 CST 2010 至: Sun Jan 23 17:56:08 CST 2011
          認(rèn)證指紋:
                   MD5:  E4:2E:BE:AC:A1:5D:E0:
          95:C7:95:93:BF:B3:F3:EE:5E
                   SHA1: F8:9A:BB:FA:C8:C5:8A:D2:FA:
          98:A1:95:64:65:42:9A:8F:0B:4A:7D
          信任這個認(rèn)證? [否]:  y
          認(rèn)證已添加至keystore中

          6、TOMCAT中相關(guān)設(shè)置,主要是修改CATALINA_HOME下的conf/server.xml,在其中添加如下一個連接器:
          <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
                         maxThreads
          ="150" scheme="https" secure="true"
                         clientAuth
          ="false" sslProtocol="TLS" keystoreFile="F:\eclipse\workspace\httpc\tomcat3.keystore" keystorePass="123456"/>    

          7、運(yùn)行相關(guān)代碼:
          package org.apache.http.examples.client;

          import java.io.File;
          import java.io.FileInputStream;
          import java.security.KeyStore;

          import org.apache.http.HttpEntity;
          import org.apache.http.HttpResponse;
          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;

          /**
           * This example demonstrates how to create secure connections with a custom SSL
           * context.
           
          */
          public class ClientCustomSSL {

              
          public static void main(String[] args) throws Exception {
                  DefaultHttpClient httpclient 
          = new DefaultHttpClient();

                  KeyStore trustStore 
          = KeyStore.getInstance(KeyStore.getDefaultType());
                  FileInputStream instream 
          = new FileInputStream(new File("tomcat3.keystore"));
                  
          try {
                      trustStore.load(instream, 
          "123456".toCharArray());
                  } 
          finally {
                      instream.close();
                  }

                  SSLSocketFactory socketFactory 
          = new SSLSocketFactory(trustStore);
                  Scheme sch 
          = new Scheme("https", socketFactory, 8443);
                  httpclient.getConnectionManager().getSchemeRegistry().register(sch);

                  HttpGet httpget 
          = new HttpGet("https://localhost:8443/docs");

                  System.out.println(
          "executing request" + httpget.getRequestLine());

                  HttpResponse response 
          = httpclient.execute(httpget);
                  HttpEntity entity 
          = response.getEntity();

                  System.out.println(
          "----------------------------------------");
                  System.out.println(response.getStatusLine());
                  
          if (entity != null) {
                      System.out.println(
          "Response content length: " + entity.getContentLength());
                  }
                  
          if (entity != null) {
                      entity.consumeContent();
                  }

                  
          // When HttpClient instance is no longer needed,
                  
          // shut down the connection manager to ensure
                  
          // immediate deallocation of all system resources
                  httpclient.getConnectionManager().shutdown();
              }

          }
          運(yùn)行結(jié)果正常,當(dāng)然也可以通過在瀏覽器中輸入“https://localhost:8443/”的方式進(jìn)行訪問。

          posted on 2010-10-25 20:13 俊星 閱讀(1993) 評論(2)  編輯  收藏

          評論

          # 第五步出錯 2010-11-22 15:39 ahome

          俊星兄,我按照你的步驟一步步做下來,做到第五步出錯了。我的環(huán)境是jdk1.6.0_14和tomcat6.0.14。錯誤提示如下:
          keytool錯誤:java.io.IOException KeyStore was tampered with,or password was incorrect

          近期項(xiàng)目中需要用到https登錄,急切盼望您的回復(fù),我的Q:724895731,可以發(fā)到我郵箱或者直接Q我,白天一般隱身。小弟先謝謝您!  回復(fù)  更多評論   

          # 登錄網(wǎng)站 2010-11-22 16:02 ahome

          我要是實(shí)現(xiàn)的功能是這樣的,用Java程序登錄網(wǎng)站,例
          http://vark.com,登錄地址https://vark.com/session,用戶名:kate658735@qq.com,密碼:ahomevark,登錄要發(fā)送的參數(shù):session[email] kate658735@qq.com
          session[password] ahomevark
          commit Sign in
          我使用上面的代碼用post提交參數(shù),拋出異常。麻煩你介紹一下解決方案,小弟不勝感激。  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 资源县| 曲水县| 永城市| 金昌市| 泾阳县| 揭西县| 襄汾县| 陆丰市| 正镶白旗| 鲜城| 松原市| 丰城市| 安西县| 堆龙德庆县| 逊克县| 铅山县| 招远市| 即墨市| 濮阳市| 宁波市| 大城县| 综艺| 扎囊县| 佛冈县| 锦州市| 客服| 色达县| 和龙市| 侯马市| 呼图壁县| 普安县| 江阴市| 独山县| 抚宁县| 宜君县| 门源| 灌阳县| 金堂县| 安福县| 南丹县| 吴忠市|