我有一个 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/