如何在java 7中启用TLSv1.2支持

问题描述 投票:0回答:1

我们希望在 Java 7 版本中启用 TLSv1.2 协议,同时确保对较低版本的支持。

我知道我们可以利用 SSLContext.getInstance("TLSv1.2") 来激活 TLSv1.2。然而,我们的场景涉及使用 Axis 存储库,特别是 org.apache.commons.httpclient.* 包来执行 SOAP 调用。

我们已经实现了使用 ProtocolSocketFactory 来注册协议,在这种情况下,我们设计了一个扩展 HttpSecureProtocol 的自定义协议工厂类。

现在使用现有的代码我怎样才能实现这一目标。

**初始化类:

PropertiesLoader props = PropertiesLoader.getInstance();
        // Mask the system variable. Causes problems, as not-commons-ssl expects the private key to be there
        Properties sysProps = System.getProperties();
        String sysKeystore = (String) sysProps.remove("javax.net.ssl.keyStore");
        // use client keystore for connection factory
        ProtocolSocketFactory factory = new FixedProtocolSocketFactory(KEYSTORE, KEYSTORE_PASS);
        Protocol.unregisterProtocol("https");
        Protocol.registerProtocol("https", new Protocol("https", factory , HttpsURL.DEFAULT_PORT));
        Protocol.registerProtocol("https", new Protocol("https", factory , 8443));
        if (sysKeystore != null) {
            sysProps.setProperty("javax.net.ssl.keyStore", sysKeystore);
        }

**自定义类: **

public class FixedProtocolSocketFactory extends HttpSecureProtocol {
    
    public FixedProtocolSocketFactory(final String keystore,
            final String keystorePassword) throws GeneralSecurityException, IOException {

        super();
        TrustChain trustChain = TrustMaterial.CACERTS;
        super.setTrustMaterial(trustChain);
        File keystoreFile = new File(keystore);

        // prepare key material
        if (keystoreFile != null && keystoreFile.exists()) {
            char[] ksPass = null;
            if (keystorePassword != null) {
                ksPass = keystorePassword.toCharArray();
            }
            KeyMaterial km = new KeyMaterial(keystoreFile, ksPass.clone());
            super.setKeyMaterial(km);


        }

    }

**注意**:无法升级到更高版本的java

**尝试过什么? **

  1. 我们已经在自定义类中定义了协议。
  2. 在Initialization类中实现了socket类。

**我在期待什么? **需要在 SOAP 调用中使用 TLSv1.2 进行握手。

java ssl protocols tls1.2 java-7
1个回答
0
投票

虽然我强烈质疑使用不受支持的 Java 版本和使用低于 TLS 1.2 的任何版本,但它非常简单:

 SSLContext sslContext = SSLContexts.custom()
     .build()

SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
     sslContext,
     new String[]{ "TLSv1.0", "TLSv1.1", "TLSv1.2" },
     null,
     SSLConnectionSocketFactory.getDefaultHostnameVerifier())

您的 HttpClient 调用现在将接受 TLS 1.2 及更低版本。

© www.soinside.com 2019 - 2024. All rights reserved.