<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    itVincent Blog - Java Working Fun!

    技術引領時代!
    posts - 117, comments - 181, trackbacks - 0, articles - 12

    SSL雙向認證Java實現 Tomcat篇

    Posted on 2010-09-04 09:31 itVincent 閱讀(682) 評論(0)  編輯  收藏
    轉自http://dev.firnow.com/course/3_program/java/javajs/20100719/453363.html

    雙向驗證,在客戶機連接服務器時,客戶機驗證服務器的證書,服務器驗證客戶機的證書,鏈接雙方都要對彼此的數字證書進行驗證,保證這是經過授權的才能夠連接。

    1. 生成服務器端的keystore和truststore文件:

        1.1. 以jks格式生成服務器端包含Public key和Private Key的keystore文件,keypass與storepass務必要一樣,因為在tomcat server.xml中只配置一個password.
        keytool -genkey -alias server -keystore serverKeystore.jks -keypass 123456 -storepass 123456 -keyalg RSA  -keysize 512 -validity 365 -v -dname "CN = W03GCA01A,O = ABC BANK,DC = Server Https,DC = ABC,OU = Firefly Technology And Operation"

        1.2. 從keystore中導出別名為server的服務端證書.
        keytool -export -alias server -keystore serverKeystore.jks -storepass 123456 -file server.cer
     
        1.3. 將server.cer導入客戶端的信任證書庫clientTruststore.jks。
         keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass 123456
     
    2. 生成客戶端的keystore和truststore文件:

        1.1. 以jks格式生成服務器端包含Public key和Private Key的keystore文件。
        keytool -genkey -alias client -keystore clientKeystore.jks -keypass 123456 -storepass 123456 -keyalg RSA  -keysize 512 -validity 365 -v -dname "CN = W03GCA01A,O = ABC BANK,DC = Client Https,DC = ABC,OU = Firefly Technology And Operation"

        1.2. 從keystore中導出別名為client的客戶端證書.
        keytool -export -alias client -keystore clientKeystore.jks -storepass 123456 -file client.cer
     
        1.3. 將client.cer導入服務端的信任證書庫serverTruststore.jks。
         keytool -import -alias trustClient -file client.cer -keystore serverTruststore.jks -storepass 123456
     
     
     服務器端: serverKeystore.jks   serverTruststore.jks
     客戶端:   clientKeystore.jks   clientTruststore.jks
     
    3. 在tomcat 配置server.xml

        <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="true" sslProtocol="TLS"
    keystoreFile="keystore/serverKeystore.jks" keystorePass="123456"
    truststoreFile="keystore/serverTruststore.jks" truststorePass="123456" />
    

     

    4. 客戶端代碼

    package com.ssl.http;
    import java.io.File;
    import java.io.FileInputStream;
    import java.security.KeyStore;
    import java.security.KeyStoreException;
    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;
    /**
    *
    * @author kevin
    *
    */
    public class ClientTwoWaySSL {
    /**
    * @param args
    * @throws Exception
    */
    public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    DefaultHttpClient httpclient = new DefaultHttpClient();
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    FileInputStream keyStoreIn = new FileInputStream(new File(
    "com/ssl/http/clientKeystore.jks"));
    FileInputStream trustStoreIn = new FileInputStream(new File(
    "com/ssl/http/clientTruststore.jks"));
    try {
    keyStore.load(keyStoreIn, "123456".toCharArray());
    trustStore.load(trustStoreIn, "123456".toCharArray());
    } finally {
    keyStoreIn.close();
    trustStoreIn.close();
    }
    SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore,
    "123456", trustStore);
    Scheme sch = new Scheme("https", socketFactory, 8443);
    httpclient.getConnectionManager().getSchemeRegistry().register(sch);
    HttpGet httpget = new HttpGet("https://w03gca01a:8443/");
    System.out.println("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();
    }
    httpclient.getConnectionManager().shutdown();
    }
    }
    

     

    備注:

    A. 如出現如下error,請配置C:\WINDOWS\system32\drivers\etc\hosts, 將“127.0.0.1     w03gca01a” 加在hosts文件中

    # executing requestGET https://w03gca01a/ HTTP/1.1
    # Exception in thread "main" javax.net.ssl.SSLException: hostname in certificate didn't match: <w03gca01a> != <localhost>
    #     at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:220)
    #     at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54) 
     

    B. 本文用到 httpcore-4.0.1.jar httpclient-4.0.1.jar httpmime-4.0.1.jar,下載地址:

    http://hc.apache.org/downloads.cgi


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲色婷婷一区二区三区| 女人被男人桶得好爽免费视频| 啊v在线免费观看| 日韩亚洲国产综合高清| 成人a视频片在线观看免费| 亚洲午夜精品在线| 国产一卡二卡3卡四卡免费| 亚洲成aⅴ人片在线影院八| 99精品在线免费观看| 亚洲欧洲日产国码二区首页| 特级精品毛片免费观看| 亚洲熟妇色自偷自拍另类| 免费看h片的网站| 亚洲精品V天堂中文字幕| 国产色爽免费视频| 日韩少妇内射免费播放| 亚洲精品亚洲人成在线观看| 小日子的在线观看免费| tom影院亚洲国产一区二区| 成人免费毛片观看| 色多多www视频在线观看免费| 超清首页国产亚洲丝袜| 亚洲电影免费在线观看| 色老板亚洲视频免在线观| 国产gav成人免费播放视频| 国产大片免费天天看| 久久亚洲精品AB无码播放| 18勿入网站免费永久| 国产成人精品日本亚洲语音| 狠狠综合久久综合88亚洲| 亚洲精品国产免费| 男性gay黄免费网站| 亚洲成熟xxxxx电影| 白白国产永久免费视频| 一级中文字幕乱码免费| 亚洲精品中文字幕麻豆 | 免费女人高潮流视频在线观看| 亚洲三级中文字幕| 亚洲乱码日产精品a级毛片久久| 日韩av无码久久精品免费| 亚洲码和欧洲码一码二码三码|