我正在尝试在 Jelastic 基础架构上设置基于 CAS 的回声系统。我能够使用此处描述的示例 Web 应用程序在同一个 Tomcat 7 实例下设置服务器和客户端。我使用的 SSL 证书(CA 和服务器)是自签名的。
当请求受保护的资源时,webapp 正确地重定向到 CAS 登录页面,并且在服务器级别进行了很好的身份验证。但是,在返回流程中出现问题,浏览器显示异常,其根本原因如下:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Caused by: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Caused by: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
这是因为 CAS 协议有一个额外的客户端-服务器验证对话,该对话在身份验证后立即完成,并且在此对话期间,客户端必须再次信任服务器。这一次,它不使用 Tomcat 的 SSL 设置,而是使用 JVM 的设置(见这里)
问题是,据我所知,在 Jelastic 上无法访问 JAVA_HOME/jre/lib/security 文件夹。有什么提示吗?谢谢。
更新: 我找到了解决方案。在 Jelastic 上,自 v.1.8.5 起,Tomcat 应用程序对 JAVA_HOME/jre/lib/security 文件夹具有写入权限。这个恕我直言打开了一个安全问题,但对于这个特定的情况是好的。我已经能够编写一个简单的 servlet,将我的证书添加到 JVM cacerts 文件中,并且我已经解决了这个问题。