如何为 SAML SP 元数据使用 Tomcat SSL 证书

Posted

技术标签:

【中文标题】如何为 SAML SP 元数据使用 Tomcat SSL 证书【英文标题】:How to use Tomcat SSL certificate for SAML SP Meradata 【发布时间】:2018-04-19 12:57:12 【问题描述】:

Tomcat 中的 SSL/TLS 证书使用server.xml 中的<Connector> 标签配置如下:

<Connector
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    port="8443" maxThreads="200"
    scheme="https" secure="true" SSLEnabled="true"
    keystoreFile="$path.to.my.keystore.file"
    keystorePass="$my.keystore.password"
    clientAuth="false" sslProtocol="TLS"/>

资源 path.to.my.keystore.filemy.keystore.password 在 Tomcat 的 catalina.properties 文件中定义。项目使用 Spring Security SAML 扩展来实现 SSO。要求是在 SAML 服务提供商 (SP) 元数据中使用相同的证书。

有一个单独的团队负责管理 Tomcat 服务器的 SSL/TLS 证书。他们可能会更改密钥存储文件或密码的位置。我希望我的应用程序不受这些更改的影响。

我正在使用@PropertySource("file:/path/to/catalina.properties") 在我的应用程序中从catalina.properties 文件中读取上述资源。这种方法好吗?有没有更好/推荐的方式来为 TLS 和 SAML 使用相同的证书配置?

【问题讨论】:

您想使用 TLS 证书对 SAML 消息进行签名还是只使用相同的密钥库? 我想用 TLS 证书签署 SAML 消息。 检查您的证书的密钥使用情况和证书颁发机构的政策是否允许数字签名。 TLS 证书的预期用途是服务器身份验证,而不是数字签名 允许使用密钥进行签名。 KeyUsage [ DigitalSignature Key_Encipherment Data_Encipherment Key_Agreement ] 【参考方案1】:

终于找到了答案。

Tomcat 将catalina.properties 中的属性公开为系统属性。所以System.getProperty()可以用来读取它们。

参考:https://tomcat.apache.org/tomcat-8.0-doc/config/index.html

所有系统属性都可用,包括使用 -D 设置的属性 语法,那些由 JVM 自动提供的和那些 在 $CATALINA_BASE/conf/catalina.properties 文件中配置。

其次,Spring SAML 文档表明可以使用 SSL/TLS 证书进行 SAML 消息签名和加密。

参考:Spring SAML Certificate Configuration Documentation

私钥(带有自签名或 CA 签名证书)是 用于对 SAML 消息进行数字签名、加密其内容并在 您的服务提供商的 SSL/TLS 客户端身份验证的一些情况 申请。

【讨论】:

以上是关于如何为 SAML SP 元数据使用 Tomcat SSL 证书的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 上的 Spring Security SAML 元数据 URL

SAML SP 元数据:自签名证书或 CA 证书,最佳实践是啥?

如何在 Spring Security SAML 示例中配置 IDP 元数据和 SP 元数据?

Keycloak IdP SAML2 将 XML 元数据导出到 SP

生成 SP 元数据时出现意外的堆栈跟踪表单 Spring-Security-SAML?

如何为密钥持有者配置文件配置 Spring Security SAML 扩展