生成服务器密钥库和证书,客户端导入服务器证书:
1、生成密钥库(自签名的证书和私钥)
keytool -genkey -alias sksalias -keyalg RSA -keystore skeystore.jks
密钥库和密钥库别名都需要密码,用时也需要
Enter keystore password:
Enter key password for <ksalias>
查看密钥库
keytool -list -v -keystore skeystore.jks
2、导出密钥库公钥、信息等到证书中
keytool -export -alias sksalias -keystore skeystore.jks -storepass 123456 -file scert.cer
3、建立信任密钥库(将服务端证书,导入到客户端的信任密钥库中)
keytool -import -alias
sksalias -file scert.cer -keystore ctruststore
信任密钥库truststore也需要密码,但别名不需要密码
//truststore也是密钥库,只是少了私钥
Enter keystore password:
查看信任密钥库
keytool -list -v -keystore truststore
keytool,可以转换,pem,直接导入pem的。ie,firefox也可以转换。
同理,生成客户端的密钥库和证书,服务器端导入客户端证书。
keytool -genkey -alias cksalias -keyalg RSA -keystore ckeystore.jks
keytool -export -alias cksalias -keystore ckeystore.jks -storepass 123456 -file ccert.cer
keytool -import -alias cksalias -file ccert.cer -keystore struststore
代码如下
package socket.ssl.mutual;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
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.SSLSocket;
import javax.net.ssl.TrustManagerFactory;
public class SecureServerDemo {
public static void main(String[] args) {
SSLServerSocket server = null;
String hello = "Hello World!---shuangxiangrenzheng";
try {
server = getSSLServerSocket();
// server.setNeedClientAuth(true);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
while(true) {
try {
System.out.println("before accept...");
SSLSocket cs = (SSLSocket)server.accept();
System.out.println("begin accept...");
OutputStream out = cs.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF(hello);
out.close();
cs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
static SSLServerSocket getSSLServerSocket() throws Exception{
SSLContext ctx = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
KeyStore tks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("D:/ssl/jks2/skeystore.jks"), "123456".toCharArray());
tks.load(new FileInputStream("D:/ssl/jks2/truststore"), "123456".toCharArray());
kmf.init(ks, "123456".toCharArray());
tmf.init(tks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLServerSocket serverSocket = (SSLServerSocket) ctx.getServerSocketFactory().createServerSocket(8090);
serverSocket.setNeedClientAuth(true);
// serverSocket.setn
return serverSocket;
}
}
package socket.ssl.mutual;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.UnknownHostException;
import java.security.KeyStore;
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;
public class SecureClientDemo {
public static void main(String[] args) {
try {
SSLSocket s = getSSLSocket();
InputStream in = null;
in = s.getInputStream();
DataInputStream dis = new DataInputStream(in);
try{
String st = dis.readUTF();
System.out.println(st);
} catch (Exception e) {
e.printStackTrace();
}
in.close();
s.close();
System.out.println("-------------------");
} catch (Exception e) {
e.printStackTrace();
}
}
static SSLSocket getSSLSocket() throws Exception{
SSLContext ctx = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
KeyStore tks = KeyStore.getInstance("JKS");
// ks.load(new FileInputStream("D:/ssl/jks2/ckeystore2.jks"), "123456".toCharArray());
// tks.load(new FileInputStream("D:/ssl/jks2/ckeystore2.jks"), "123456".toCharArray());
ks.load(new FileInputStream("D:/ssl/jks2/ckeystore.jks"), "123456".toCharArray());
tks.load(new FileInputStream("D:/ssl/jks2/ckeystore.jks"), "123456".toCharArray());
kmf.init(ks, "123456".toCharArray());
tmf.init(tks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocket sSLSocket = (SSLSocket)ctx.getSocketFactory().createSocket("127.0.0.1", 8090);
sSLSocket.startHandshake();
return sSLSocket;
}
}
1,用回调syslof4j的getsocket,然后socket.handshake,会卡死
2,用这个测试,也会卡死,必须server端,先开始handshake才行,或者他们之间发送消息(这样测试就会多
一条记录不好),有待深入探讨原因。
分享到:
相关推荐
通过OpenSSL生成的ssl证书,用于windows下用nginx配置https服务器( OpenSSL创建证书) 无需再下载OpenSSL,配置OpenSSL相关环境,在进行命令生成证书
Keytool与数字证书
密钥管理工具 Keytool-IUI
java中关于SSL的证书和密钥的形成,关于keytool命令行代码的解释!
用keytool生成证书,双向SSL认证配置的方法,以Tomcat举例。包含步骤:一、为服务器生成证书;二、为客户端生成证书;三、让服务器信任客户端证书;四、让客户端信任服务器证书。
自己学习openSSL的一些总结,很初步,希望能够帮助到跟我一样刚刚开始接触openSSL的朋友,很浅显,我也是初学者,希望大家不要见笑。
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
KeyTool1.6,数字证书工具、服务器证书管理工具。用于数字证书私钥公钥管理。可新增私钥文件。
该文档提供JKS转换为PFX的方法 使用JWSDP工具包中的工具 •安装J2SE 1.5,下载并运行jdk-1_5_0_09-windows-i586-p.exe ...•查看server.jks 里面的证书记录: keytool -list -v -keystore server.jks
Linux命令keytool命令 – 密钥和证书管理工具
keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥...
测试环境为JDK1.8,环境变量需要配置JAVA_HOME或手动修改脚本里的地址; 脚本代码基于:https://blog.csdn.net/nov4th/article/details/122845297
1. 将JDK与Tomcat6安装到C盘后,配置SSL时候运行keytool命令无法生成server.keystore(暂未找到合理的解决方案) 2. 将JDK与Tomcat6安装到D盘后,配置SSL时候可以运行keytool命令,并可以生成server.keystore,但是...
keytool -import -alias mycert -file d:\def.cer -keystore mykeystore.jks (导入证书到keystore) 2. JKS——>cer格式 keytool -import -alias mycert- keystore mykeystore.jks -file d:\def.cer (从keystore...
使用openssl与jdk的keytool生成根证书,server端证书,浏览器端证书,并配置使工程跑在https上。(带dos脚本)
keytool-importkeypair 是生成keystore的必须文件,可以用此工具放于目录文件夹下载,和系统的 platform.pk8 platform.x509.pem 以及signapk.jar 生成签名文件,让软件编译的时候就有系统签名
client_poc 了解SSLServerSocket,SSLSocket,Keytool,TrustStore等生成Java密钥库和密钥对keytool -genkey -alias mydomain -keyalg RSA -keystore sample.jks -storepass 123456 为现有的Java密钥库生成证书签名...
openssl和keytool都是生成https证书的工具,可以在windows上安装使用,附带一些操作说明,希望可以帮助大家
KeyTool制作证书
支持各种格式数字证书制作支持各种格式数字证书制作支持各种格式数字证书制作支持各种格式数字证书制作支持各种格式数字证书制作