A.8. 高级 WS-Trust 场景
A.8.1. 场景:SAML Holder-Of-Key Assertion 方案 复制链接链接已复制到粘贴板!
WS-Trust 帮助管理软件安全令牌。SAML 断言是安全令牌的类型。在 Holder-Of-Key 方法中,STS 创建一个包含客户端公钥的 SAML 令牌,并使用其私钥为 SAML 令牌签名。客户端包括 SAML 令牌,并使用其私钥将传出的 soap 信封签名给 web 服务。Web 服务验证 SOAP 消息和 SAML 令牌。
实施此场景需要以下内容:
-
必须保护带有 Holder-Of-Key 主题确认方法的 SAML 令牌,以便无法侦听令牌。在大多数情况下,Holder-Of-Key 令牌与 HTTPS 相结合足以防止获取令牌。这意味着安全策略使用
sp:TransportBinding
和sp:HttpsToken
。 -
Holder-Of-Key 令牌没有与其关联的加密或签名密钥,因此应该将
sp:IssuedToken
ofSymmetricKey
或PublicKey
keyType 用于sp:SignedEndorsingSupportingTokens
。
A.8.1.1. Web 服务提供商 复制链接链接已复制到粘贴板!
本节列出了 SAML Holder-Of-Key 场景的 Web 服务元素。这些组件包括:
A.8.1.1.1. Web 服务提供商 WSDL 复制链接链接已复制到粘贴板!
Web 服务提供商是一个合同第一端点。HolderOfKeyService.wsdl
WSDL 中声明的所有 WS-trust 和安全策略。在这种情况下,需要一个 ws-requester
来提供 SAML 2.0 令牌的 SymmetricKey
keyType(由指定的 STS 发布)。STS 地址在 WSDL 中提供。使用传输绑定策略。该令牌被声明为签名和签名,SignedEndorsingSupportingTokens
。
以下列表中的注释中提供了安全设置的详细解释:
A.8.1.1.2. SSL 配置 复制链接链接已复制到粘贴板!
此 Web 服务使用 HTTPS,因此必须将 JBoss EAP 服务器配置为在 undertow
子系统中提供 SSL/TLS 支持。
有关如何为 Web 应用程序配置 HTTPS 的详情,请参考如何配置服务器安全性为应用程序配置单向和双向 SSL/TLS。
A.8.1.1.3. Web 服务提供商接口 复制链接链接已复制到粘贴板!
Web 服务提供商接口 HolderOfKeyIface
类是一个简单的 Web 服务定义。
A.8.1.1.4. Web 服务提供商实施 复制链接链接已复制到粘贴板!
Web 服务提供商实施 HolderOfKeyImpl
类是一个简单的 POJO。它使用标准的 WebService
注释来定义服务端点。此外,还有两个 Apache CXF 注解,Ed pointProperties
和 EndpointProperty
用于为 Apache CXF 运行时配置端点。这些注释来自 Apache WSS4J 项目,该项目为 Web 服务提供了主 WS-Security 标准的 Java 实施。这些注释以编程方式向端点添加属性。使用普通 Apache CXF 时,这些属性通常使用 Spring 配置中的
元素进行设置。这些注释允许在代码中配置属性。
<jaxws:properties>
;
WSS4J 使用 Crypto 接口获取用于签名创建/验证的密钥和证书,如 WSDL 为此服务的要求。HolderOfKeyImpl
提供的 WSS4J 配置信息用于 Crypto 的 Merlin 实施。
列表中的第一个 EndpointProperty
语句禁用了对基本安全配置文件 1.1 的合规性。下一个 EndpointProperty
语句声明包含(Merlin)Crypto 配置信息的 Java 属性文件。最后的 EndpointProperty
语句声明 STSHolderOfKeyCallbackHandler
实施类。它用于获取密钥存储文件中证书的密码。
A.8.1.1.5. 加密属性和密钥存储文件 复制链接链接已复制到粘贴板!
WSS4J 的 Crypto 实施通过包含 Crypto 配置数据的 Java 属性文件来加载和配置。文件包含特定于实施的属性,如密钥存储位置、密码、默认别名等。这个应用程序使用 Merlin 实施。serviceKeystore.properties
文件包含此信息。
servicestore.jks
文件是 Java KeyStore(JKS)存储库。它包含 myservicekey 和
的自签名证书。
mystskey
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin org.apache.ws.security.crypto.merlin.keystore.type=jks org.apache.ws.security.crypto.merlin.keystore.password=sspass org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=sspass
org.apache.ws.security.crypto.merlin.keystore.alias=myservicekey
org.apache.ws.security.crypto.merlin.keystore.file=servicestore.jks
A.8.1.1.6. 默认 MANIFEST.MF 复制链接链接已复制到粘贴板!
此应用程序需要访问 org.jboss.ws.cxf.jbossws-cxf 中提供的 JBossWS 和 Apache CXF API。
dependency 语句指示服务器在部署时提供它们。
Manifest-Version: 1.0 Dependencies: org.jboss.ws.cxf.jbossws-cxf-client
Manifest-Version: 1.0
Dependencies: org.jboss.ws.cxf.jbossws-cxf-client