<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!

    技術(shù)引領(lǐng)時(shí)代!
    posts - 117, comments - 181, trackbacks - 0, articles - 12
    轉(zhuǎn)自http://dev.firnow.com/course/3_program/java/javajs/20100719/453363.html

    雙向驗(yàn)證,在客戶機(jī)連接服務(wù)器時(shí),客戶機(jī)驗(yàn)證服務(wù)器的證書,服務(wù)器驗(yàn)證客戶機(jī)的證書,鏈接雙方都要對(duì)彼此的數(shù)字證書進(jìn)行驗(yàn)證,保證這是經(jīng)過授權(quán)的才能夠連接。

    1. 生成服務(wù)器端的keystore和truststore文件:

        1.1. 以jks格式生成服務(wù)器端包含Public key和Private Key的keystore文件,keypass與storepass務(wù)必要一樣,因?yàn)樵趖omcat server.xml中只配置一個(gè)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中導(dǎo)出別名為server的服務(wù)端證書.
        keytool -export -alias server -keystore serverKeystore.jks -storepass 123456 -file server.cer
     
        1.3. 將server.cer導(dǎo)入客戶端的信任證書庫clientTruststore.jks。
         keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -storepass 123456
     
    2. 生成客戶端的keystore和truststore文件:

        1.1. 以jks格式生成服務(wù)器端包含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中導(dǎo)出別名為client的客戶端證書.
        keytool -export -alias client -keystore clientKeystore.jks -storepass 123456 -file client.cer
     
        1.3. 將client.cer導(dǎo)入服務(wù)端的信任證書庫serverTruststore.jks。
         keytool -import -alias trustClient -file client.cer -keystore serverTruststore.jks -storepass 123456
     
     
     服務(wù)器端: 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. 如出現(xiàn)如下error,請(qǐng)配置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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 91制片厂制作传媒免费版樱花| 免费毛片毛片网址| 外国成人网在线观看免费视频 | 人妻在线日韩免费视频| 亚洲高清无码综合性爱视频| 国产区图片区小说区亚洲区| 国产成人精品免费视频软件| 精品在线视频免费| 亚洲精品国产自在久久| 一级特黄a免费大片| 久久亚洲av无码精品浪潮| 色www永久免费| 亚洲国产一区在线| 国产成人精品免费视频动漫| 亚洲乱码中文论理电影| 午夜a级成人免费毛片| 亚洲色在线无码国产精品不卡| 日本免费福利视频| 日韩精品无码免费视频| 亚洲精品乱码久久久久久自慰| 免费在线看污视频| 亚洲一级毛片免费观看| 国产免费观看视频| 亚洲自偷自偷精品| 国产卡二卡三卡四卡免费网址| 最新亚洲春色Av无码专区| 日韩亚洲国产二区| 免费无码黄网站在线看| 亚洲免费在线视频播放| 四虎永久免费观看| a级片在线免费看| 亚洲狠狠成人综合网| 亚洲毛片网址在线观看中文字幕 | 亚洲AV无码专区国产乱码4SE| 免费成人激情视频| 国产福利电影一区二区三区,免费久久久久久久精 | 免费毛片a在线观看67194| 午夜亚洲乱码伦小说区69堂| 亚洲AV综合色区无码一区爱AV | 亚洲国产精品精华液| 久久精品国产精品亚洲精品|