第 296 章 XML 安全数据格式
从 Camel 版本 2.0 开始提供
XMLSecurity 数据格式有助于在 Document, Element, 和 Element 内容级别(包括使用 XPath 同步多节点加密/解密)的 XML 有效负载的加密和解密。要使用 XML 签名规范为消息签名,请参阅 Camel XML 安全组件。
加密功能基于使用 Apache XML 安全(Santuario)项目支持的格式。目前,使用 Triple-DES 和 AES (128, 192, 和 256)加密格式支持对称加密/解密。以后可以根据需要轻松添加其他格式。此功能允许 Camel 用户在路由中分配或接收时加密/解密有效负载。
从 Camel 2.9开始,
XMLSecurity 数据格式支持非对称密钥加密。在此加密模型中,生成对称密钥,并用于执行 XML 内容加密或解密。然后,这个"内容加密密钥"使用非对称加密算法进行加密,该算法将接收者的公钥用作"密钥加密密钥"。使用非对称密钥加密算法可确保只有接收者的私钥的拥有者才能访问生成的对称加密密钥。因此,只有私钥拥有者才可以解码信息。XMLSecurity Data Format 处理使用非对称密钥加密来加密和解密消息内容和加密密钥所需的所有逻辑。
在处理选择用于加密的 XPath 查询的 XPath 查询时,XMLSecurity Data Format 也改进了对命名空间的支持。命名空间定义映射可作为数据格式配置的一部分包含在内。这可启用 true 命名空间匹配,即使 XPath 查询中的前缀值和目标 xml 文档中的前缀值不是等同的字符串。
296.1. XMLSecurity 选项
XML 安全格式支持 13 个选项,如下所列。
名称 | 默认值 | Java 类型 | 描述 |
---|---|---|---|
xmlCipherAlgorithm |
|
| 用于加密/解密 XML 消息内容的密码算法。可用的选择有: XMLCipher.TRIPLEDES XMLCipher.AES_128 XMLCipher.AES_128_GCM XMLCipher.AES_192 XMLCipher.AES_192_GCM XMLCipher.AES_256 XMLCipher.AES_256_GCM XMLCipher.SEED_128 XMLCipher.CAMELLIA_128 XMLCipher.CAMELLIA_192 XMLCipher.CAMELLIA_192 XMLCipher.CAMELLIA_256 XMLCipher.SEED_128 XMLCipher. |
passPhrase |
| 用作 passPhrase 的字符串加密/解密内容。必须提供 passPhrase。如果没有指定 passPhrase,则使用默认的 passPhrase。passPhrase 需要与适当的加密算法一起放置。例如,使用 TRIPLEDES,passPhase 只能是另一个 24 Byte 键 | |
passPhraseByte |
| 用作 passPhrase 的字节来加密/解密内容。必须提供 passPhrase。如果没有指定 passPhrase,则使用默认的 passPhrase。passPhrase 需要与适当的加密算法一起放置。例如,使用 TRIPLEDES,passPhase 只能是另一个 24 Byte 键 | |
secureTag |
| XPath 引用为加密/解密所选的 XML Element。如果没有指定标签,则整个有效负载都会加密/解密。 | |
secureTagContents |
|
| 用于指定 XML Element 是否要加密的布尔值,或者 XML Element false = Element Level true = Element Content Level 的内容 |
keyCipherAlgorithm |
|
| 用于加密/解密非对称密钥的密码算法。可用的选择有: XMLCipher.RSA_v1dot5 XMLCipher.RSA_OAEP XMLCipher.RSA_OAEP_11,默认值为 XMLCipher.RSA_OAEP |
recipientKeyAlias |
| 在执行非对称密钥加密或解密时,用于从 KeyStore 检索接收者的公钥或私钥时使用的密钥别名。 | |
keyOrTrustStoreParametersId |
| 指的是要在 registry 中查找的 KeyStore 实例,该实例用于创建和加载代表发件人的 trustStore 或接收者的 keyStore 或接收者的 keyStore 的 KeyStore 实例的配置选项。 | |
keyPassword |
| 要从 KeyStore 检索私钥的密码。此密钥用于非对称解密。 | |
digestAlgorithm |
|
| 用于 RSA OAEP 算法的摘要算法。可用的选择有: XMLCipher.SHA1 XMLCipher.SHA256 XMLCipher.SHA512 默认值为 XMLCipher.SHA1 |
mgfAlgorithm |
|
| 用于 RSA OAEP 算法的 MGF 算法。可用的选择有: EncryptionConstants.MGF1_SHA1 EncryptionConstants.MGF1_SHA256 EncryptionConstants.MGF1_SHA512 默认值为 EncryptionConstants.MGF1_SHA1 |
addKeyValueForEncryptedKey |
|
| 是否在 EncryptedKey 结构中添加用于加密会话密钥的公钥作为 KeyValue。 |
contentTypeHeader |
|
| 如果数据格式能够这样做,则数据格式是否应该使用 data 格式的类型设置 Content-Type 标头。例如,用于数据格式到 XML 的 application/xml 或用于数据格式的 application/json 发送到 JSon 等。 |
296.1.1. 密钥加密算法
从 Camel 2.12.0 开始,默认的密钥 Cipher Algorithm 现在是 XMLCipher.RSA_OAEP,而不是 XMLCipher.RSA_v1dot5。由于各种攻击,不建议使用 XMLCipher.RSA_v1dot5。使用 RSA v1.5 作为密钥密码算法的请求将被拒绝,除非它被明确配置为密钥密码算法。