gpt4 book ai didi

salesforce - 如何在 Java 7 中为 Axis 1 Web 服务客户端启用 TLS1.1

转载 作者:行者123 更新时间:2023-12-01 19:18:03 24 4
gpt4 key购买 nike

摘要:Salesforce.com 最近为其沙箱实例 (test.salesforce.com) 禁用了 TLSv1,并且仅支持 TLSv1.1 及更高版本的入站和出站请求的 API 集成。

我使用带有 JDK 7.0 的 Java Axis1.0 客户端代码来连接(通过 Webservice Soap)到 salesforce.com。我收到异常“UNSUPPORTED_CLIENT:此组织已禁用 TLS 1.0。使用 https 连接到 Salesforce 时,请使用 TLS 1.1 或更高版本。”使用Java7.0
支持的协议(protocol):SSLv2Hello、SSLv3、TLSv1、TLSv1.1、TLSv1.2
启用的协议(protocol):TLSv1

`使用Java8.0当我尝试使用 java8 客户端连接到 salesforce.com 时,连接成功。

支持的协议(protocol):SSLv2Hello、SSLv3、TLSv1、TLSv1.1、TLSv1.2启用的协议(protocol):TLSv1、TLSv1.1、TLSv1.2`

我必须使用 Java 7,因为我们的应用程序正在使用它。我尝试设置虚拟机参数:-Dhttps.protocols=TLSv1.1,TLSv1.2 -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -Ddeployment.security.TLSv1.1=true -Ddeployment.security .TLSv1.2=true"但没有成功。

您能帮我找到 Java7 中启用 TLSv1.1 的设置吗?

最佳答案

找到解决方案:

我必须编写自定义 JSSESocketFactory (因为我使用的是 Java Webservice Axis1.0 客户端)和 AxisProperties 设置。

类似于,

public class TLSSocketSecureFactory extends JSSESocketFactory {

private final String TLS_VERSION_1_1 = "TLSv1.1";
private final String TLS_VERSION_1_2 = "TLSv1.2";

public TLSSocketSecureFactory(@SuppressWarnings("rawtypes") Hashtable attributes) {
super(attributes);
}

@Override
protected void initFactory() throws IOException {
SSLContext context;
try {
context = SSLContext.getInstance(TLS_VERSION_1_1);
context.init(null, null, null);
sslFactory = context.getSocketFactory();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
//printstacktrace or throw IOException
}
}

@Override
public Socket create(String host, int port, StringBuffer otherHeaders, BooleanHolder useFullURL) throws Exception {
if (sslFactory == null) {
initFactory();
}
Socket s = super.create(host, port, otherHeaders, useFullURL);
((SSLSocket) s).setEnabledProtocols(new String[] {TLS_VERSION_1_1, TLS_VERSION_1_2 });
return s;
}
}

AxisProperties.setProperty("axis.socketSecureFactory",TLSSocketSecureFactory.class.getCanonicalName());

这仅对于 JDK7 是必需的。当应用程序迁移到JDK8时,不需要该类。在 Java8 中,TLSv1.1 和 TLS1.2 默认启用。

注意:在服务器上设置 VM 配置对于 Axis java 客户端没有帮助。

关于salesforce - 如何在 Java 7 中为 Axis 1 Web 服务客户端启用 TLS1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38136654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com