【问题标题】:Is it possible to merge java\jre\security\lib\cacerts file是否可以合并 java\jre\security\lib\cacerts 文件
【发布时间】:2012-03-31 08:52:17
【问题描述】:

在我的项目中,我将 Spring Security 与 CAS 服务器身份验证集成在一起。现在我的项目是一个 http 应用程序,而 CAS 服务器是一个 Https 应用程序。在 Spring Security 和 CAS 集成之后,我遇到了以下异常:sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

为了解决这个错误,我用我本地的 usr\java\jre\lib\security\cacerts 文件替换了 CAS 服务器 usr\java\jre\lib\security\cacerts 文件。在这一步之后,错误消失了。

现在我想将我的应用程序部署到其他服务器。在这个新服务器中,还部署了一些其他应用程序,它们可能使用不同的 CAS 身份验证。我不能直接用这个新的服务器 cacerts 文件替换我的 CAS 服务器 cacerts 文件,因为部署的其他应用程序可能会失败。对吗?谁能建议我应该怎么做才能合并cacerts,或者应该怎么做?我知道了一个名为 keytool 的命令,但无法理解如何使用它来合并 cacerts 文件。我不知道如何获取我的 CAS 服务器 .cer 文件,我知道这可以用于合并,请提出解决方案

【问题讨论】:

    标签: java authentication tomcat spring-mvc cas


    【解决方案1】:

    这里有一个误解。
    cacerts 是 Java 的默认信任库,其中包含已知 CA(Verisign 等)的所有受信任证书。因此默认情况下,java 可以像您的浏览器一样信任这些证书。

    当您要连接到由这些 CA 签名的服务器时,应使用此信任库。
    在所有其他情况下,您应该使用自己的自定义信任库,以便您可以信任特定的服务器。实际上这是常态。

    因此,您应该做的是在您的代码中加载您自己的信任库,并将其提供给 Java 的 JSSE 以在握手期间用于身份验证

    【讨论】:

    • 好的..但是怎么做呢?如何获取证书并添加到信任库?有什么想法吗?
    • 如果您已经拥有信任库,那么您可以通过System.setProperty("javax.net.ssl.trustStrore", "myTrustStore.p12");进行设置?
    • 不,我没有信任存储? System.setProperty 命令是用在 java 代码中的吧?我们不能通过 KeyTool 来做到这一点吗?例如。 keytool -import -alias joe -file jcertfile.cer ;请告诉我如何创建信任库并从 CAS 服务器导出证书,最后将证书导入新服务器?
    • 您可以使用 keytool,但想法是创建一个包含您的证书的新密钥库文件,并将该密钥库文件用作新的信任库(通过 System 属性)。你明白吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多