gpt4 book ai didi

java - 使用来自 java 的证书连接到 web 服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:57 25 4
gpt4 key购买 nike

我正在从 Java 程序连接到 Web 服务。Web 服务需要证书才能返回任何数据。我还没有设法用我的 java 代码建立证书连接。相反,我使用了一种叫做 Stunnel 的东西,它只是使用证书创建到主机的连接。现在我想删除 stunnel 并从 java 中执行所有操作。这肯定是可能的吧?

这是 channel 的配置。

cert = /etc/stunnel/client.pem
options = NO_SSLv2

[https]
client = yes
accept = 8083
sni = www.xxx.se
connect = www.xxx.se:443

为了启动隧道,我需要提供连接到证书的密码,因此代码中也需要密码。

我当前的代码。

 URL url = new URL(wsdlURL);            
QName qname = new QName("urn:ws.fps.xxx.com/supportToolSupport", "SupportToolSupportService");
javax.xml.ws.Service = javax.xml.ws.Service.create(url, qname);
SupportToolSupport support = service.getPort(SupportToolSupport.class);
List<Company> companies = support.supportToolGetCompanies("");

知道在这段代码之前要执行什么代码来替换 channel 吗?

最佳答案

看起来类 SupportToolSupport 是从 WSDL 生成的 pojo。当您调用 SupportToolSupport.supportToolGetCompanies() 时,pojo 实际上正在建立连接。默认情况下,它将使用 JVM 的证书存储,包括 Keystore 和 TrustStore。 Keystore 通常称为 keyStore.jks,而 TrustStore 通常称为 cacerts(.jks)。这些通常位于 /lib/security 中。您可以管理 JVM 如何以编程方式访问证书存储,但如果可能的话,设置环境会更容易。您可以通过将这些变量传递给 java 来强制 JVM 在调用 java 时使用特定的 keystore 、别名和密码:

-Djavax.net.ssl.keyStore="path to keyStore.jks"
-Djavax.net.ssl.keyStoreType="JKS"
-Djavax.net.ssl.keyStorePassword="changeit"
-Djavax.net.ssl.trustStore="path to cacerts"

例如命令行:

java -Djavax.net.ssl.keyStore="path to keyStore.jks" ... -cp <class path> class.to.run

对于 Eclipse,将上面的行复制并粘贴到运行配置中 Arguments 选项卡VM Arguments 框中。运行 -> 运行配置 -> 找到你的配置 -> 选择参数选项卡

关于java - 使用来自 java 的证书连接到 web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29948032/

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