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

Generating a self signed certificate using TLSv1.2 or 1.1

我有一个业务服务器,我正在尝试使用 java 连接,但要做到这一点,他们要求 Tls 版本为 1.11.2

我的电脑上安装了 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 密钥工具生成具有 Tls 版本 1.11.2 的证书?

证书应该与运输无关。

在不知道您在服务器端使用什么的情况下,很难确定您的最佳行动方案应该是什么。

您可以通过 -tls1_2 开关强制 s_client 使用 just tls 1.2,但这并不是您真正想要的。

因此,假设您使用的是 Tomcat 8(和非 APR HTTP 连接器),您可以使用属性 sslEnabledProtocols="TLSv1.2".[=10= 仅配置 TLSv1.2 ]

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

如果您使用的是 Apache HTTPd 或 nginx,可能还有说明如何操作的文档。