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