java - 让 Java 只接受一个 SSL 证书

标签 java ssl ssl-certificate

我有一个 java 小程序,它加载一些预安装的 native 代码扩展以在浏览器中显示自定义内容。其中一些内容可能包括由 JVM 加载的 native 代码。显然,这是一个安全问题。我想强制所有内容仅来自授权服务器。

我一直遵循的实现这一目标的途径是创建一个仅包含一个 SSL 证书的 keystore 。我设置了 keystore 位置和密码并打开了调试输出。

System.setProperty("javax.net.ssl.keyStore", "C:\\keys\\keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
System.setProperty("javax.net.debug", "ssl");

我的印象是,这意味着 JVM 只能访问一个 keystore 文件,因此只能访问其中的一个 key 。事实上,除了我添加的一个 key 之外,SSL 调试信息还列出了 75 个 CA key 。显然,这不会阻止任何人向我们发送不受信任的代码。

有没有办法告诉 SSL 系统只使用一个证书?我应该使用完全不同的方法吗?

更新: 更改 cacerts 文件并不是真正的选择。对于使用它的其他应用程序,JVM 应该继续正常运行。有没有办法在运行时选择不加载该文件?我正在查看 TrustManager 和 KeyManager 类,但我并不真正了解如何使用它们。

最佳答案

您需要将 javax.net.ssl.trustStore 系统属性设置为指向其中包含您的一个证书的 keystore 。 keystore 用于您的身份验证凭据,而不是您对等方的。

关于java - 让 Java 只接受一个 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2268703/

相关文章:

java - 调用抛出异常的方法

java - 使用 OkHttp 的 Cookie

azure - 使用 certreq 的 CRYPT_E_NOT_FOUND 问题

java - "unable to find valid certification path to requested target",但是浏览器说没问题

java - 如何将 .cer/.p12 导入移动应用程序

java - 登录多线程应用程序

java - 如何组织和共享实用程序库/类(不是代码片段)

c# - 如何优化 SSL session ,以便以后(如果需要)重用它来提高客户端服务器性能

java - SunCertPathBuilderException 尽管设置了信任库属性

windows - SSRS NET::ERR_CERT_REVOKED 谷歌浏览器中的 HTTPS 错误