it_worker365

   ::  ::  ::  ::  :: 管理

听到有人在用,所以自己随便搜了搜试了下,这里就是简单记录

就是操作了一遍这篇博文

https://blog.csdn.net/a495614205/article/details/12648939

import java.io.FileInputStream;
import java.io.*;
import java.net.Socket;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;

public class KeystoreTest {
    /**
      * name:KeystoreTest
      * author:suju
      */
     public static void main(String[] args) throws Exception{
         String key="D:/Users/***/.keystore";
         KeyStore keystore=KeyStore.getInstance("JKS");
         //keystore的类型,默认是jks
         keystore.load(new FileInputStream(key),"密码".toCharArray());
         //创建jkd密钥访问库    123456是keystore密码。
         KeyManagerFactory kmf=KeyManagerFactory.getInstance("SunX509");
         kmf.init(keystore,"密码".toCharArray());
         //asdfgh是key密码。
         //创建管理jks密钥库的x509密钥管理器,用来管理密钥,需要key的密码
         SSLContext sslc=SSLContext.getInstance("SSLv3");
         // 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。
         sslc.init(kmf.getKeyManagers(),null,null);
         //第二个参数TrustManager[] 是认证管理器,在需要双向认证时使用,
         //构造ssl环境
         SSLServerSocketFactory sslfactory=sslc.getServerSocketFactory();
         SSLServerSocket serversocket=(SSLServerSocket) sslfactory.createServerSocket(9999);
         //创建serversocket,监听,并传输数据来验证授权
          for(int i=0;i<15;i++)
          { 
              final Socket socket=serversocket.accept();
              new Thread(){
                  public void run()
                  {
                      try{
                          InputStream is=socket.getInputStream();
                          OutputStream os=socket.getOutputStream();
                          byte[] buf=new byte[1024];
                          int len=is.read(buf);
                          System.out.println(new String(buf));
                          os.write("ssl test".getBytes());
                          os.close();
                          is.close();
                      }catch(Exception e)
                      {}
                  }
              }.start();
          }
           serversocket.close(); 
     }
}
import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.security.KeyStore;
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLServerSocket;
 import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManagerFactory;
  
 public class KeystoreTestClient {
     /**
      * name:KeystoreTestClient
      * author:suju
      */
     public static void main(String[] args) throws Exception{
         String key="D:/Users/***/client";
         KeyStore keystore=KeyStore.getInstance("JKS");  //创建一个keystore来管理密钥库
         keystore.load(new FileInputStream(key),"密码".toCharArray());
         //创建jkd密钥访问库
         TrustManagerFactory tmf=TrustManagerFactory.getInstance("SunX509");
         tmf.init(keystore);                 //验证数据,可以不传入key密码
         //创建TrustManagerFactory,管理授权证书
         SSLContext sslc=SSLContext.getInstance("SSLv3");
         // 构造SSL环境,指定SSL版本为3.0,也可以使用TLSv1,但是SSLv3更加常用。
         sslc.init(null,tmf.getTrustManagers(),null);
         //KeyManager[] 第一个参数是授权的密钥管理器,用来授权验证。第二个是被授权的证书管理器,
         //用来验证服务器端的证书。只验证服务器数据,第一个管理器可以为null
         //构造ssl环境
         SSLSocketFactory sslfactory=sslc.getSocketFactory();
         SSLSocket socket=(SSLSocket) sslfactory.createSocket("127.0.0.1",9999);
         //创建serversocket通过传输数据来验证授权
          InputStream is=socket.getInputStream();
          OutputStream os=socket.getOutputStream();       
          os.write("client".getBytes());      
          byte[] buf=new byte[1024];
          int len=is.read(buf);
          System.out.println(new String(buf)); 
          os.close();
          is.close();
     }
 }

其余就是证书相关的操作

生成
keytool -genkeypair
查看
keytool -list -v
使用其他keystore来创建key,如果keystore不存在就创建一个新的。 
keytool --genkeypair -keystore c:\client
导出一个key
keytool -exportcert -alias mykey -file c:\mykey.cer
导入一个key到一个keystore
keytool -importcert -alias mykey -file c:\mykey.cer -keystore c:\client

过程中如果文件没有权限或者目录问题之类的自己调整下就OK
posted on 2018-11-16 16:31  it_worker365  阅读(422)  评论(0编辑  收藏  举报