gpt4 book ai didi

通过 https 的 Java Web 服务 - 如何将自签名证书添加到客户端 api 中?

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

我有一个使用 axis2 创建的“Hello World”网络服务。我想编写一个客户端 api,它可以通过 https 使用自签名证书使用此服务。我有一个自签名证书 myCertificate.cer 和一个包含它的 keystore

这是我的客户端 API:

public class MyApi{

public Object callMyService(){

Axis2TestStub stub = new Axis2TestStub(
"https://localhost:8443/axis2/services/Axis2Test");

System.setProperty("javax.net.ssl.trustStore",
"src/main/resources/myKeystore.jks")
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Hello request = new Hello();
request.setMot("World");
HelloResponse response = stub.hello(request);
Object mot = response.get_return();
return mot;

它有效,但我想使用 myCertificate.cer 而不是包含它的 keystore。有人知道该怎么做吗?我试图覆盖 https 协议(protocol)但没有成功:

HttpSecureProtocol myHttpsProtocol = new HttpSecureProtocol();
myHttpsProtocol .setCheckHostname(false);
myHttpsProtocol .addTrustMaterial(new TrustMaterial("myCertificate.cer"));
Protocol customHttps = new Protocol("https",
(ProtocolSocketFactory) myHttpsProtocol , 8443);
Protocol.registerProtocol("https", customHttps);

最佳答案

I would like to write a client api which could use this service over https with a self-signed certificate. I have a self-signed certificate myCertificate.cer and a keystore containing it.

服务器 keystore 确实包含服务器的自签名证书和私钥,服务器使用它来签署消息并将凭据返回给客户端。

在客户端,您需要将服务器证书导入客户端信任库(通常,您不希望客户端信任库中有私钥,因此您提取了一个 stand -单独的证书文件,即没有私钥,然后您将该服务器证书导入信任库。

It works but I would like to use myCertificate.cer and not a keystore containing it.

它不是 keystore ,而是信任库,并且需要将证书添加到客户端信任库,因为自签名证书不是由根 CA 签名的,默认情况下不受信任。所以你需要创建一个信任链。

现在,您可以在客户端 API 的 JAR 中分发信任库。 this thread 中讨论了这种方法(最大的问题是您必须在服务器证书过期时重新分发 JAR)。就个人而言,我不太喜欢这种解决方案。

恕我直言,如果您想跳过信任存储区的东西,那么好的解决方案是从广为人知的证书供应商处购买真正的证书,您已经在信任库中拥有根 CA 证书(例如 Verisign、Thawte)。

关于通过 https 的 Java Web 服务 - 如何将自签名证书添加到客户端 api 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224030/

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