【问题标题】:Java web service over https - How to add a self-signed certificate into a client api?基于 https 的 Java Web 服务 - 如何将自签名证书添加到客户端 api 中?
【发布时间】:2011-01-14 12:09:21
【问题描述】:

我有一个使用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 协议但没有成功:

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);

【问题讨论】:

    标签: java https certificate web-services self-signed


    【解决方案1】:

    我只是将证书添加到运行您的应用程序的 JDK 的 cacerts 文件中。如果你这样做了,那么你就不必做任何其他事情了。不需要您上面的代码。您可以通过运行类似于以下的命令将证书添加到密钥库:

    C:/<jdk-version/bin/keytool -import -alias myalias -file mycert.crt -keystore C:/<jdk-version>/jre/lib/security/cacerts
    

    【讨论】:

      【解决方案2】:

      我想编写一个客户端 api,它可以通过带有自签名证书的 https 使用此服务。我有一个自签名证书 myCertificate.cer 和一个包含它的密钥库。

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

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

      它有效,但我想使用 myCertificate.cer 而不是包含它的密钥库。

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

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

      恕我直言,如果您想跳过信任库的内容,一个好的解决方案是从知名证书供应商处购买真正的证书,您已经在信任库中拥有根 CA 证书(如 Verisign、Thawte)。

      【讨论】:

      • +1 建议使用知名颁发者的证书。
      猜你喜欢
      • 2014-05-04
      • 2011-06-11
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2012-03-17
      • 2010-11-13
      • 2011-02-23
      相关资源
      最近更新 更多