• Java ssl认证记录


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

    就是操作了一遍这篇博文

    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
  • 相关阅读:
    Oracle sql优化
    Oracle解决锁表语句与批量生成解锁语句
    使用Spring Task轻松完成定时任务
    oralce数据表空间满了
    关于出现 org.apache.commons.lang.exception.NestableRuntimeException的解决方法
    linux根分区满了如何处理,查找大文件方法
    bt协议详解 基础篇(上)
    如何做一个开心的程序员
    程序猿是如何解决SQLServer占CPU100%的
    SqlServer索引的原理与应用
  • 原文地址:https://www.cnblogs.com/it-worker365/p/9970106.html
Copyright © 2020-2023  润新知