1

我在通过 java 使用 tlsv1.2 连接 https get/post 时遇到问题。

有人有指南或一些有用的例子吗?我通过密钥库上的密码设置的 keytool 私钥和公钥导入。我使用了 SSLSocketFactory 但我只收到错误 https(不是握手)。我在 jvm -Dhttps.protocols="TLSv1.2" 中添加了参数以仅启用 TLS 1.2 版。但是什么都没有...

请提供一个示例或导入证书的指南以实现该类并使用 SSLSocketFactory。

非常感谢你的帮助...

4

3 回答 3

1

Java 6 不支持 tls1.2链接,如果使用 java 6 则无法启用 TLS1.2。

于 2016-07-18T08:52:25.153 回答
0

我希望这会奏效

InputStream is = new FileInputStream("cert.crt");

CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(is);

TrustManagerFactory tmf = TrustManagerFactory
    .getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(null); // You don't need the KeyStore instance to come from a file.
ks.setCertificateEntry("caCert", caCert);

tmf.init(ks);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);

并创建 SocketFactory

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1.2" }, null,
            SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
于 2016-07-18T08:33:24.217 回答
0

我遇到了同样的问题,最后基于 BouncyCasttle Provider构建了我自己的“ TLSConnectionFactory ”。代码在这里共享

所以,在你使用这个TLSConnectionFactory之后,你可以通过这种简单快捷的方式:

     String httpsURL =  xxxxxxxxxx
    URL myurl = new URL(httpsURL);      
    HttpsURLConnection  con = (HttpsURLConnection )myurl.openConnection();
    con.setSSLSocketFactory(new TSLSocketConnectionFactory());   
    InputStream ins = con.getInputStream();
于 2016-07-18T08:44:50.253 回答