2017-03-20 63 views
-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」)' –

回答

0

該證書應該是不重要的運輸。

不知道您在服務器端使用的是什麼,要確定您的最佳行爲方式應該是有點難。

通過傳遞-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

生成私鑰和自簽名證書時,不需要指定傳輸算法。 –