【问题标题】:Creating a truststore in java在 Java 中创建信任库
【发布时间】:2018-12-26 11:47:24
【问题描述】:

供应商给了我一个 .jks 来通过 jms 连接到他们的 mq。我使用以下代码作为我的概念证明模板。

Connecting to a Websphere MQ in Java with SSL/Keystore

Keystore 的创建很好,但是当它尝试创建 Truststore 时,它​​会加载一个新的 .jks 文件。我应该生成这个文件还是应该提供它,因为目前我无法创建它。

// instantiate a KeyStore with type JKS
 KeyStore ks = KeyStore.getInstance("JKS");
 // load the contents of the KeyStore
 ks.load(new FileInputStream("/home/hudo/hugo.jks"), KSPW);
 System.out.println("Number of keys on JKS: "
       + Integer.toString(ks.size()));

 // Create a keystore object for the truststore
 KeyStore trustStore = KeyStore.getInstance("JKS");
 // Open our file and read the truststore (no password)
 trustStore.load(new FileInputStream("/home/xwgztu2/xwgztu2.jks"), null);

谢谢

【问题讨论】:

  • Keystore 的创建很好,但是当它尝试创建 Truststore 时,它​​会加载一个新的 .jks 文件。 什么?
  • 你得到了什么异常?
  • 查看我对另一个问题“How to enable SSL with client certificate for Websphere MQ client?”的回答。在任何现代版本的 MQ 中,您不需要专门设置密钥库和信任库,只需传递 java 系统属性,例如 -Djavax.net.ssl.trustStore=trust.jks。您提供的同一个 jks 文件可能会同时作为密钥库和信任库传递而不会出现问题,但通常您不需要单独的信任库。
  • 他们提供的密钥库应该包括客户端证书以及该证书的签名者链,很可能供应商的队列管理器证书的签名者已经包含在该 jks 中,甚至可能与客户端证书的签名者。 Java 将信任密钥库中的 CAcerts,如果您不需要信任任何其他内容,您甚至不需要指定信任库。

标签: java encryption ibm-mq keystore truststore


【解决方案1】:

这个答案有很多假设(因为这个问题没有提供太多信息),但我也假设它伴随着丰富的经验。

要创建 SSL 连接,服务器必须具有密钥对(私钥、公钥和绑定到公钥的证书),并且客户端必须信任证书(或其颁发者)。还有一个双向 SSL 选项(也称为客户端身份验证 ssl),其中客户端需要自己的密钥对和证书,而服务器需要信任客户端的证书。

Truststore 它会加载一个新的 .jks 文件。我应该生成这个文件还是应该提供它,因为目前我无法创建它。

信任库应有效地包含服务器证书的颁发者证书(如果使用自签名证书,则为同一证书)。

您可以通过connecting to the service获取证书

openssl s_client -connect host:port -showcerts

然后将返回的证书导入新的密钥库(例如使用keytool -importcert 命令)

keytool -importcert -keystore mytruststore.jks -alias mqserver -file servercert.pem

如果服务器返回给你多个证书(证书链),你可以全部导入。

如果您不能这样做,只需要求服务提供商(部署 MQ 的人)为您提供证书或信任库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 2017-08-03
    • 2014-08-24
    • 2014-10-04
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多