Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中创建信任库_Java_Encryption_Ibm Mq_Keystore_Truststore - Fatal编程技术网

在java中创建信任库

在java中创建信任库,java,encryption,ibm-mq,keystore,truststore,Java,Encryption,Ibm Mq,Keystore,Truststore,一个供应商给了我一个.jks来通过jms连接到他们的mq。我使用以下代码作为我的概念证明模板 密钥库的创建很好,但是当它尝试创建信任库时,它会加载一个新的.jks文件。我应该生成这个文件还是应该提供它,因为目前我无法创建它 // instantiate a KeyStore with type JKS KeyStore ks = KeyStore.getInstance("JKS"); // load the contents of the KeyStore ks.load(new Fi

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

密钥库的创建很好,但是当它尝试创建信任库时,它会加载一个新的.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);

谢谢

在这个答案中有很多假设(因为这个问题没有提供太多信息),但我也认为这是有大量经验的

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

信任存储它加载一个新的.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);
信任库应该有效地包含服务器证书的颁发者证书(如果使用了自签名证书,则是同一证书)

你可以通过以下方式获得证书:

openssl s_客户端-连接主机:端口-showcerts

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

keytool-importcert-keystoremytruststore.jks-alias mqserver-file servercert.pem

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


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

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