使用TLSv1.2或1.1生成自签名证书

问题描述:

我有一个企业服务器,我试图连接到使用java,但要做到这一点,他们要求Tls版本是1.11.2使用TLSv1.2或1.1生成自签名证书

我在我的电脑中安装了openssl,我似乎在使用Tls版本1.1。我我测试了我的OpenSSL安装使用此命令

openssl s_client -host google.com -port 443

,这是结果

SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES128-SHA 
    Session-ID: FFE6DD3F1F78EC17999809D875E12D5138573BE52BCAA2EB55225F2EFE864127 
    Session-ID-ctx: 
    Master-Key: 7599DC1A0FDC8BC41431D7907EE933BE7527D2A658ADFC6B34B2CAB3D071DD7E13B6ED2C7C35A6EABDCA52943B1155A2 
    Key-Arg : None 
    Start Time: 1489987373 
    Timeout : 300 (sec) 
    Verify return code: 20 (unable to get local issuer certificate) 

一些信息已经被冷落为了提高可读性,但你可以在你的终端测试出来。

这是我的Java版本

java version "1.8.0_121" 
Java(TM) SE Runtime Environment (build 1.8.0_121-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode) 

我怎样才能让我的Java keytool生成与1.11.2一个Tls版本的证书?

+2

TLS是一个数据安全层,而不是证书属性。 https://en.wikipedia.org/wiki/Transport_Layer_Security 您正在寻找的是'SSLContext.getInstance(“TLSv1.2”)' –

该证书应该是不重要的运输。

不知道您在服务器端使用的是什么,要确定您的最佳行为方式应该是有点难。

通过传递-tls1_2开关,您可以强制s_client使用只需 tls 1.2,但那不是您真正想要的。因此,假设您使用的是Tomcat 8(以及非APR HTTP连接器),则可以使用属性sslEnabledProtocols =“TLSv1.2”为TLSv1.2进行配置。

sslEnabledProtocols本质上映射到Java的SSLSocket.setEnabledProtocols()方法。 Jetty可能具有类似的配置。

如果您使用的是Apache HTTPd或nginx,那么可能有文档说明如何做到这一点。

+0

“该证书应该与传输无关。”所以使用t.l.s 1.2生成的公钥可以在任何使用tls 1.0的机器上运行? –

+0

生成私钥和自签名证书时,不需要指定传输算法。 –