Java SSLContext:从 KeyStore 对象设置信任库

问题描述 投票:0回答:1

我正在尝试使用 Java 的 mTLS 套接字。

KeyStore ks = .....
KeyManagerFactory kmf = KeyManagerFactory.getInstance (KeyManagerFactory.getDefaultAlgorithm ());
kmf.init (ks, pass.toCharArray ());
SSLContext ctx = SSLContext.getInstance ("TLS");
ctx.init (kmf.getKeyManagers (), null, null);
SSLSocketFactory sslsf = ctx.getSocketFactory ();

一切正常,可以正常工作。我还需要服务器/客户端证书的信任存储。

我的操作系统的默认信任存储位于文件内

/etc/ssl/certs/java/cacert.

如果我想要另一个文件,我可以设置它

System.setProperty ("javax.net.ssl.trustStore", "/etc/ssl/certs/java/mycacerts");

那也很好。

但是我想将 KeyStore 对象(我将在上面的代码前面创建)作为信任库,而不是磁盘上的文件。

类似于 KeyStore-object ks,我里面有 mTLS 证书/密钥。

有可能以某种方式做到这一点吗?

java keystore
1个回答
0
投票

这是以

的方式完成的
        SSLContext ctx = SSLContext.getInstance(protocol);
        ctx.init(keyManagers, trustManagers, null);

您忽略了代码示例中

init()
的第二个参数,您应该将其归档。它的创建方式与第一个参数
keyManagers
相同。使用的类是
TrustManagerFactory

例如,请参阅 Apache Ignite 的 SSL 上下文工厂

© www.soinside.com 2019 - 2024. All rights reserved.