Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks
          /********************************************************************
           * 項(xiàng)目名稱    :rochoc   <p>
           * 包名稱      :rochoc.net.security <p>
           * 文件名稱    :SSLClient   <p>
           * 編寫者      :LuckyStar    <p>
           * 編寫日期    :2008-2-13    <p>
           * 程序功能(類)描述 :安全通訊的客戶端       <p>
           *
           * 程序變更日期   :
           * 變更作者    :
           * 變更說(shuō)明    :
          *******************************************************************
          */
          package rochoc.net.security;

          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.security.KeyStore;
          import java.security.SecureRandom;

          import javax.net.ssl.KeyManagerFactory;
          import javax.net.ssl.SSLContext;
          import javax.net.ssl.SSLSocket;
          import javax.net.ssl.SSLSocketFactory;
          import javax.net.ssl.TrustManagerFactory;

          /**
           * 類名:SSLClient  <p>
           * 類描述: 安全通訊的客戶端<p>
           * 編寫者 :luoc<p>
           * 編寫日期 :2005-6-30<p>
           * 主要public成員變量:<p>
           * 主要public方法:   <p>
           *
          */

          public class SSLClient
          {
              
          /**
               *構(gòu)造函數(shù)說(shuō)明:       <p>
               *參數(shù)說(shuō)明:   <p>
              *
          */
              
          public SSLClient()
              {
                  init();
              }
             
              
          /**
              * 方法名稱:init<p>
              * 方法功能:初始化客戶端Socket            <p>
              * 參數(shù)說(shuō)明: <p>
              * 返回:void <p>
              * 作者:luoc
              * 日期:2005-6-30
              *
          */
              
          public void init()
              {
                  
          //server socket's ip and port
                  String host="localhost";
                  
          int port=2001;
                  
          //keystore path and password
                  String keyf="..\\key\\mystore";
                  String trustf
          ="..\\key\\srvtrust";
                  String pass
          ="123456";
                  
          //set up a connection
                  SSLSocketFactory ssf=null;
                  
          try
                  {
                      
          //init context
                      SSLContext ctx=SSLContext.getInstance("TLS");           
                      KeyManagerFactory kmf
          =KeyManagerFactory.getInstance("SunX509");
                      TrustManagerFactory tmf
          =TrustManagerFactory.getInstance("SunX509");           
                      KeyStore ks
          =KeyStore.getInstance("JKS");
                      KeyStore tks
          =KeyStore.getInstance("JKS");
                      
          //load keystore
                      ks.load(new FileInputStream(keyf),pass.toCharArray());
                      tks.load(
          new FileInputStream(trustf),pass.toCharArray());
                      kmf.init(ks,pass.toCharArray());
                      tmf.init(tks);
                      ctx.init(kmf.getKeyManagers(),tmf.getTrustManagers(),
          new SecureRandom());
                      System.out.println(
          "load keystore success.");
                      ssf
          =ctx.getSocketFactory();
                      
          //create socket
                      socket=(SSLSocket)ssf.createSocket(host,port);
                      System.out.println(
          "create socket success.");
                      
          //handshake
                      socket.startHandshake();
                      System.out.println(
          "handshake success.");
                  }
          catch(Exception e)
                  {
                      System.out.println(
          "establish connection error.");
                      e.printStackTrace();
                      
          return;
                  }
                 
              }
             
              
          /**
              * 方法名稱:sendMessage<p>
              * 方法功能:發(fā)送信息            <p>
              * 參數(shù)說(shuō)明:
          @param msg <p>
              * 返回:void <p>
              * 作者:luoc
              * 日期:2005-6-30
              *
          */
              
          public void sendMessage(String msg)
              {
                  
          try
                  {
                      OutputStream out
          =socket.getOutputStream();
                      InputStream in
          =socket.getInputStream();
                      
          //send message
                      System.out.println("send message:["+msg+"]");
                      out.write(msg.getBytes());
                      out.write(TranTool.DATA_END);
                      out.flush();
                      
          //receive message
                      byte [] buff=new byte[1024];
                      
          int len=0;
                      System.out.println(
          "recv len:"+(len=in.read(buff)));
                      System.out.println(
          "receive from srv:[");           
                      System.out.print(
          new String(buff,0,len));           
                      System.out.println(
          "] receive end.");
                  }
          catch(IOException e)
                  {
                      e.printStackTrace();
                  }
          finally
                  {
                      
          try
                      {
                          socket.close();
                      }
          catch(Exception e)
                      {
                          e.printStackTrace();
                      }
                  }
              }
              
          /*全局變量*/
              SSLSocket socket
          =null;
             
              
          //測(cè)試函數(shù)
              public static void main(String args[])
              {
                  SSLClient sc
          =new SSLClient();
                  String msg
          ="Hello SSL Server.";
                  
          if(args.length==1)
                  {
                      msg
          =args[0];
                  }
          else
                  {
                      System.out.println(
          "Useage:Please input the message you want to send.");
                  }
                  sc.sendMessage(msg);
              }
          }
          posted on 2008-02-13 22:05 禮物 閱讀(2344) 評(píng)論(3)  編輯  收藏 所屬分類: CA

          評(píng)論

          # re: JAVA中SSL證書認(rèn)證通訊-Client 2008-07-09 16:20 JessonWoo
          請(qǐng)問(wèn),能用這個(gè)程序查看服務(wù)器的證書信息嗎?  回復(fù)  更多評(píng)論
            

          # re: JAVA中SSL證書認(rèn)證通訊-Client 2008-07-09 18:18 JessonWoo
          請(qǐng)問(wèn),如何建立一個(gè)SSLClient,以實(shí)現(xiàn)和指定的服務(wù)器SSL連接,發(fā)送請(qǐng)求client_Hello,以使得服務(wù)器返回一個(gè)server_Hello和一個(gè)certificate(即handshake的第一階段)。
          盼不吝賜教!
            回復(fù)  更多評(píng)論
            

          # re: JAVA中SSL證書認(rèn)證通訊-Client 2009-03-19 11:00 liyulin
          TranTool 這個(gè)類在哪個(gè)包中呀  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 康保县| 玛曲县| 怀宁县| 玉树县| 辽阳县| 靖州| 荥阳市| 佛坪县| 鲁山县| 贡觉县| 伊吾县| 洞头县| 海林市| 宕昌县| 竹北市| 临江市| 浮山县| 五大连池市| 海林市| 四子王旗| 巢湖市| 兴和县| 达拉特旗| 天津市| 吴忠市| 开阳县| 南漳县| 九台市| 明星| 宁南县| 和龙市| 白水县| 含山县| 万山特区| 常宁市| 观塘区| 调兵山市| 三穗县| 兴海县| 天柱县| 个旧市|