第 296 章 XML 安全数据格式
从 Camel 版本 2.0 开始提供
XMLSecurity Data Format 在 Document, Element, 和 Element 内容级别(包括使用 XPath 同步多节点加密/解密)促进 XML 有效负载的加密和解密。要使用 XML 签名规格签署消息,请参阅 Camel XML 安全组件。
加密功能基于使用 Apache XML Security (Santuario)项目支持的格式。目前,使用 Triple-DES 和 AES (128、192 和 256)加密格式支持对称加密/解密。可以根据需要轻松添加其他格式。此功能允许在路由中分配或接收时 Camel 用户加密/解密有效负载。
从 Camel 2.9开始,
XMLSecurity Data Format 支持非对称密钥加密。在此加密模型中生成对称密钥,用于执行 XML 内容加密或解密。然后,使用非对称加密算法对"内容加密密钥"进行加密,该算法将接收者的公钥作为"密钥加密密钥"。使用非对称密钥加密算法可确保只有接收者的私钥的持有者才能访问生成的对称加密密钥。因此,只有私钥拥有者才可以解码消息。XMLSecurity 数据格式处理使用非对称密钥加密加密和解密消息内容和加密密钥所需的所有逻辑。
在处理选择用于加密的 XPath 查询时,XMLSecurity Data Format 还改进了对命名空间的支持。命名空间定义映射可以包含作为数据格式配置的一部分。这可启用 true 命名空间匹配,即使 XPath 查询和 target xml 文档中的前缀值不是等同的字符串。
296.1. XMLSecurity 选项
XML 安全架构支持 13 个选项,如下所列。
Name | 默认值 | 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_256_256_256_ARCipher.SEED_128 XMLCipher.CAMELLIA_192 XMLCipher.CAMELLIA_256_256_256_256_GCM是 MLCipher.TRIPLEDES。 |
passphrase |
| 用作 passPhrase 用于加密/解密内容的字符串。必须提供 passPhrase。如果没有指定 passPhrase,则使用默认 passPhrase。passPhrase 需要与适当的加密算法一起使用。例如,使用 TRIPLEDES passPhase 只能是一个 24 个字节键 | |
passPhraseByte |
| 用作 passPhrase 用于加密/解密内容的字节。必须提供 passPhrase。如果没有指定 passPhrase,则使用默认 passPhrase。passPhrase 需要与适当的加密算法一起使用。例如,使用 TRIPLEDES passPhase 只能是一个 24 个字节键 | |
secureTag |
| XPath 引用所选的用于加密/解密的 XML 元素。如果没有指定标签,则整个有效负载会被加密/解密。 | |
secureTagContents |
|
| 一个布尔值,用于指定 XML 元素是否被加密或者 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 实例的配置选项。 | |
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 放入 XML 或用于数据格式的 application/json,如 JSon 等。 |
296.1.1. 密钥加密算法
从 Camel 2.12.0 开始,默认的 Key Cipher Algorithm 现在是 XMLCipher.RSA_OAEP,而不是 XMLCipher.RSA_v1dot5。由于各种攻击,不建议使用 XMLCipher.RSA_v1dot5。使用 RSA v1.5 作为密钥加密算法的请求将被拒绝,除非已明确配置为密钥加密算法。