【发布时间】:2018-08-16 23:59:57
【问题描述】:
总结:Java 选项 -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT 允许 Java 为 计算机帐户使用 Windows 信任库。 什么选项允许它为 用户帐户使用 Windows 信任库?
我们有一个在 Windows 客户端上运行的 Java 应用程序。应用程序从各种来源获取数据,其中一些使用不在默认cacerts 文件中的证书。
当用户选择访问外部数据的项目时,系统会提示他们下载外部站点的证书。由于我们的安全设置,cacerts 文件对用户是只读的。因为 JRE 无法将证书导入cacerts,所以外部不会下载。并且一遍又一遍地提示用户下载证书。
当用户被授予对cacerts 的写入权限时,不会出现此问题。但是我们的安全团队不允许我们向普通用户授予对该文件的写入权限。他们的政策是,C: 驱动器上的任何文件,除了用户自己的配置文件之外,都不应该是读写的。
我们认为我们找到了让 Java 使用 Windows 信任库的解决方法。我们在启动脚本中添加了标志-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT。这迫使 Java 使用用户可以写入的 Windows 信任存储。
很遗憾,用户只能写入他们的证书存储区,而不能写入计算机的证书存储区。当我们以管理员身份运行应用程序时,证书被导入到计算机的存储中。之后,不会提示普通用户下载证书。但是,如果我们不以管理员权限运行一次,则不会导入证书,因为 Java 会尝试写入 Windows 计算机帐户 存储,该存储与cacerts 一样被锁定.
是否有一个标志强制 Java 使用整个 Windows 信任存储,而不仅仅是计算机帐户的存储?
【问题讨论】:
标签: java windows ssl certificate truststore