`

制作SSL证书-keytool命令

 
阅读更多

生成服务器密钥库和证书,客户端导入服务器证书:

 

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制作证书并在tomcat上配置

    首先,我们将学习openSSL的基本概念和命令,然后逐步生成服务器端和客户端的证书文件,并介绍如何使用CA证书签名这些证书文件。最后,我们将介绍如何在Tomcat上配置这些证书文件。 openSSL简介 openSSL是一个开源的...

    KeyTool制作证书

    ### KeyTool制作证书 #### 知识点一:KeyTool工具简介 KeyTool是Java自带的一个命令行工具,用于管理密钥库(Keystore),它能够帮助用户创建、管理数字证书以及私钥/公钥对。密钥库是用于存储各种密钥和证书链的...

    KeyTool 图形化的Key工具制作

    1. 安装图形化KeyTool工具:这通常是一个第三方软件,比如KeyStore Explorer或Portecle,它们提供了友好的界面来操作KeyTool的命令。 2. 创建密钥库:在图形化界面中,用户可以选择创建一个新的密钥库,设置类型...

    SSL双向认证证书制作过程流程

    1. 生成服务器密钥库:首先,使用`keytool`命令生成一个服务器的私钥和证书请求,这里使用RSA算法,2048位长度,有效期3650天,定义了完整的X.500名称(CN、OU、O、L、ST、C)并设置了密码。 2. 验证服务器密钥库:...

    https制作证书

    "HTTPS 制作证书" 在这篇文章中,我们将介绍如何使用 Java 的 keytool 工具生成安全证书,并将其应用于 Tomcat 服务器,以便实现 HTTPS 访问。 生成证书 在生成证书之前,需要先打开控制台,并进入 Tomcat 的 bin...

    weblogic制作证书实现HTTPS

    - **运行keytool命令**: 进入JDK安装目录下的`bin`目录,运行`keytool`命令来生成证书请求。 ##### 2. 准备OpenSSL - **下载OpenSSL**: 从官方网站[www.openssl.org](http://www.openssl.org)下载OpenSSL。 - **...

    生成自验证证书、websphere设置https

    这一过程不仅涉及到Java开发工具包...整个配置过程需要对JDK、keytool工具的使用、SSL证书的工作原理以及WebSphere应用服务器的安全配置有一定的了解和实践经验。只有这样才能确保HTTPS配置的正确性和服务器的安全性。

    WebLogicSSL解决苹果IOS itms下载问题NEW

    在iOS 7.1版本及其以上,苹果增强了安全策略,对SSL证书的要求更加严格,因此可能会影响到Web服务器与iOS设备之间的通信。以下是详细的步骤和知识点: 首先,确保你已经安装了`openssl`工具,这是一个用于处理加密...

    tomcat启用https

    使用 `keytool` 创建自签名证书的基本命令格式如下: ```shell keytool -genkeypair -alias &lt;别名&gt; -keyalg RSA -validity &lt;有效期(天)&gt; -storepass &lt;密钥库密码&gt; -keystore &lt;密钥库文件路径&gt; -v ``` - `-alias ...

    内网项目启用Https手册.docx

    - 命令:`keytool -genkey -alias example -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore example.jks` 2. **生成证书请求**: - 命令:`keytool -certreq -alias ...

    tomcat证书制作

    关于Tomcat证书制作的知识点: 1. Keytool工具:Keytool是Java开发工具包(JDK)中提供的一个用于管理密钥和证书的工具。它可以帮助用户生成密钥库(keystore)文件,该文件用于存储密钥(key)和证书...

    回调地址CA证书制作说明1

    本文主要讲述了如何制作和转换HTTPS回调地址所需的CA证书,以及如何进行双向认证的部署和验证。在IT行业中,网络协议中的安全通信尤为重要,HTTPS协议就是其中的一种,它通过SSL/TLS证书确保数据传输的安全性。 ...

    java安全通信的建立以及数字证书的制作与使用

    例如,`keytool -genkey -alias alias_name -keyalg RSA`命令可以生成一个新的RSA算法的密钥对,并将其保存在指定的别名下。 消息摘要和消息验证码是保证数据完整性的手段。消息摘要,如MD5或SHA家族,是一种单向...

    windows环境下Jboss as 7配置Https

    使用 keytool 命令生成证书 server.keystore。命令如下: ``` keytool –genkey -v -alias server -keyalg RSA -keystore D:\key\server.keystore -validity 3650 ``` 其中,`D:\key\server.keystore` 是证书文件的...

    iOS企业级应用的tomcat服务器和客户端配置

    然后,制作自签名的SSL证书,即叶证书。同样通过`openssl genrsa`生成服务器私钥,`openssl req -new`创建CSR(Certificate Signing Request),接着使用`openssl x509`将CSR转换为SSL证书。在这个过程中,你需要...

    OpenSSL证书管理

    使用`keytool`命令列出PKCS12文件(`certs/ca.p12`)中的信息,确保证书转换正确。 接下来,我们构建服务器和客户端证书: 6. **构建服务器私钥**: 同样使用`openssl genrsa`生成服务器私钥(`private/server....

    OpenSSL使用指南

    对于需要使用HTTPS的JAVA应用程序,需将证书文件“xxx.cer”复制到`C:\IBM\WebSphere\AppServer\java\jre\bin`目录下,并使用keytool命令将其导入JAVA的信任库。命令如下: ``` keytool -import -v -trustcacerts -...

    jetty-5.1.10.zip

    Jetty 5.1.10 是一个轻量...这涉及到Java的KeyStore机制和`keytool`命令,需要正确配置Jetty的SSL/TLS设置以确保通信安全。虽然这个版本较旧,但对于理解Web服务器的基本工作原理和SSL/TLS证书管理仍有一定的学习价值。

Global site tag (gtag.js) - Google Analytics