我在https get/post上通过java使用tlsv1.2连接时遇到问题。
有人有一个指南或一些行之有效的例子吗?我通过keytool导入了私钥,公钥由密钥库上的密码设置。我使用了SSLSocketFactory,但只得到错误https(而不是握手)。我在jvm-Dhttps.protocols="TLSv1.2"中添加了参数,以仅启用TLS的1.2版本。但是什么都没有。。。
请提供一个示例或导入证书的指南来实现该类并使用SSLSocketFactory。
非常感谢你的帮助。。。
Java 6不支持tls1.2链接,如果使用Java 6,则无法启用tls1.2。
我希望这将工作
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);
我遇到了同样的问题,最终基于BouncyCastle Provider构建了自己的"TLSConnectionFactory"。代码在此处共享
因此,在您可以使用TLSConnectionFactory这个简单快捷的方法之后:
String httpsURL = xxxxxxxxxx
URL myurl = new URL(httpsURL);
HttpsURLConnection con = (HttpsURLConnection )myurl.openConnection();
con.setSSLSocketFactory(new TSLSocketConnectionFactory());
InputStream ins = con.getInputStream();