听到有人在用,所以自己随便搜了搜试了下,这里就是简单记录
就是操作了一遍这篇博文
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