<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)航:
     
    主站蜘蛛池模板: 亚洲国产精品一区| 免费又黄又硬又爽大片| 国产亚洲一区二区三区在线观看| 久久精品国产亚洲av瑜伽| 天天操夜夜操免费视频| 亚洲欧美日韩中文二区| 免费观看的a级毛片的网站| 亚洲熟妇丰满xxxxx| 国内大片在线免费看| 亚洲精品女同中文字幕| 国产伦精品一区二区三区免费下载| 亚洲国产成人久久精品软件| 免费二级毛片免费完整视频| 黄色大片免费网站| 久久亚洲中文字幕精品一区四| 91视频免费网站| 亚洲91av视频| 久久精品网站免费观看| 久久精品国产亚洲av天美18| 亚洲 国产 图片| 日韩电影免费在线观看网站| 亚洲黄色在线视频| 无码日韩精品一区二区免费| 久久精品国产亚洲AV天海翼 | 亚洲一区二区三区丝袜| 最近中文字幕mv手机免费高清| 亚洲av无码一区二区三区天堂| 日本中文一区二区三区亚洲 | 瑟瑟网站免费网站入口| 亚洲精品无码不卡在线播HE| 99久久99久久精品免费观看| 亚洲无mate20pro麻豆| 亚洲精品成人网久久久久久| 日韩人妻无码精品久久免费一 | 一个人免费播放在线视频看片| 亚洲尹人九九大色香蕉网站| 毛片视频免费观看| 亚洲黄片手机免费观看| 亚洲午夜精品一区二区公牛电影院| 四虎AV永久在线精品免费观看| 一个人免费视频观看在线www|