Java 6或7 HTTPS使用TLSv1.2发布

时间:2016-07-18 08:18:18

标签: java sslsocketfactory

我在使用tlsv1.2通过java。

连接https get / post时遇到问题

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

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

非常感谢你的帮助......

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);

答案 2 :(得分:0)

我遇到了同样的问题,最后基于BouncyCasttle Provider构建了自己的“ TLSConnectionFactory ”。代码为shared here

因此,您可以使用此 TLSConnectionFactory 这种简单快捷的方式:

     String httpsURL =  xxxxxxxxxx
    URL myurl = new URL(httpsURL);      
    HttpsURLConnection  con = (HttpsURLConnection )myurl.openConnection();
    con.setSSLSocketFactory(new TSLSocketConnectionFactory());   
    InputStream ins = con.getInputStream();