JVM 可以只信任一个 运行 的自签名证书吗?

Can JVM trust a self-signed certificate for only a single run?

我正在尝试让 clojure jar 信任我在 运行 jar 时创建的自签名证书,只是我实际上不想将证书添加到我的证书存储区。有什么方法可以让 JVM 暂时信任这个 openssl 自签名证书,或者只信任一个 运行?

如果有一种语言内的方式来做到这一点,并且如果它有帮助,我正在使用 clj-http-lite 库,使用 get 函数。不过,对于通用的 JVM 范围的解决方案,还有额外的要点。

您可以创建一个(临时的)信任库 并在命令行上使用 javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword 系统属性对其进行配置:https://docs.oracle.com/javadb/10.8.3.0/adminguide/cadminsslclient.html

我不建议使用 JVM 的命令行参数 javax.net.ssl.trustStore 覆盖全局信任库。相反,如果您需要使用自签名证书连接到远程服务器,我建议在代码中构建 SSL 上下文并将其用于连接。如果您不想降低全局 JVM 安全性,并且如果您有多个端点,每个端点都需要自签名证书进行连接,则此方法更好。

这里是 Building SSL context 的例子,可以用在 http/get 函数中。您可以将它传递给 request 函数(请参阅不安全的代码?选项并以相同的方式进行)。