7.2. 服务供应商密钥和关键元素
如果 IdP 要求客户端应用程序(或 SP)为其所有请求签名,如果 IdP 将加密断言,则必须定义用于执行此操作的密钥。对于客户端签名的文档,您必须同时定义用于签署文档的私钥和公钥或证书。对于加密,您只需要定义用于解密它的私钥。
可以通过两种方式描述您的密钥。它们可以存储在 Java KeyStore 中,或者您可以直接以 PEM 格式在 keycloak-saml.xml
中复制/粘贴密钥。
<Keys> <Key signing="true" > ... </Key> </Keys>
<Keys>
<Key signing="true" >
...
</Key>
</Keys>
Key
元素有两个可选属性 signing
和 encryption
。当设置为 true 时,告诉适配器使用哪个密钥。如果这两个属性都设为 true,则密钥将用于签名文档和解密加密的断言。您必须至少将其中一个属性设置为 true。
7.2.1. keystore 元素
在 Key
元素中,您可以从 Java Keystore 加载密钥和证书。这在 KeyStore
元素中声明。
<Keys> <Key signing="true" > <KeyStore resource="/WEB-INF/keystore.jks" password="store123"> <PrivateKey alias="myPrivate" password="test123"/> <Certificate alias="myCertAlias"/> </KeyStore> </Key> </Keys>
<Keys>
<Key signing="true" >
<KeyStore resource="/WEB-INF/keystore.jks" password="store123">
<PrivateKey alias="myPrivate" password="test123"/>
<Certificate alias="myCertAlias"/>
</KeyStore>
</Key>
</Keys>
以下是使用 KeyStore
元素定义的 XML 配置属性。
- file
- 密钥存储的文件路径。此选项是 OPTIONAL。必须设置 file 或 resource 属性。
- resource
- KeyStore 的 WAR 资源路径。这是对 ServletContext.getResourceAsStream ()方法调用中的一个路径。此选项是 OPTIONAL。必须设置 file 或 resource 属性。
- password
- KeyStore 的密码。此选项是 REQUIRED。
如果您要定义 SP 将用来签署文档的密钥,还必须在 Java KeyStore 中指定对私钥和证书的引用。上例中的 PrivateKey
和 Certificate
元素定义了一个 alias
,指向密钥存储内密钥或证书。密钥存储需要额外的密码来访问私钥。在 PrivateKey
元素中,您必须在 password
属性中定义此密码。
7.2.2. 密钥 PEMS
在 Key
元素中,您直接使用子元素 PrivateKeyPem
、PublicKeyPem
和 CertificatePem
,直接声明您的密钥和证书。这些元素中包含的值必须符合 PEM 密钥格式。如果您使用 openssl
或类似命令行工具生成密钥,通常使用这个选项。
<Keys> <Key signing="true"> <PrivateKeyPem> 2341251234AB31234==231BB998311222423522334 </PrivateKeyPem> <CertificatePem> 211111341251234AB31234==231BB998311222423522334 </CertificatePem> </Key> </Keys>
<Keys>
<Key signing="true">
<PrivateKeyPem>
2341251234AB31234==231BB998311222423522334
</PrivateKeyPem>
<CertificatePem>
211111341251234AB31234==231BB998311222423522334
</CertificatePem>
</Key>
</Keys>