第 75 章 crypto CMS 组件
从 Camel 版本 2.20 开始提供
加密消息语法(CMS) 是签名和加密消息的良好标准。Apache Crypto CMS 组件支持此标准的以下部分:* Content Type "Enveloped Data" with Key Transport (asymmetric key), * Content Type "Signed Data"。您可以创建 CMS Enveloped Data 实例,解密 CMS Enveloped Data 实例,创建 CMS Signed Data 实例,并验证 CMS Signed Data 实例。
组件使用 Bouncy Castle 库 bcprov-jdk18on 和 bcpkix-jdk18on。
Maven 用户需要将以下依赖项添加到这个组件的 pom.xml
中:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-crypto-cms</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
建议您在调用此组件的端点前在应用程序中注册 Bouncy Castle 安全供应商:
Security.addProvider(new BouncyCastleProvider());
如果没有注册 Bouncy Castle 安全供应商,则 Crypto CMS 组件将注册该提供程序。
75.1. 选项
Crypto CMS 组件支持 3 个选项,如下所列。
Name | 描述 | 默认值 | 类型 |
---|---|---|---|
signedDataVerifier 配置 (advanced) | 要配置共享 SignedDataVerifierConfiguration,它将决定验证操作的 uri 参数。 | SignedDataVerifier Configuration | |
envelopedDataDecryptor Configuration (advanced) | 要配置共享 EnvelopedDataDecryptorConfiguration,它将决定解密操作的 uri 参数。 | EnvelopedDataDecryptor Configuration | |
resolveProperty Placeholders (advanced) | 组件是否应在启动时解析属性占位符。只有 String 类型的属性可以使用属性占位符。 | true | 布尔值 |
Crypto CMS 端点使用 URI 语法进行配置:
crypto-cms:cryptoOperation:name
使用以下路径和查询参数:
75.1.1. 路径参数(2 参数):
Name | 描述 | 默认值 | 类型 |
---|---|---|---|
cryptoOperation | 必需的 在端点 uri.g. crypto-cms:sign 设置签名作为操作的加密方案后提供的 Crypto 操作。可能的值有: sign, verify, encrypt, 或 decrypt。 | CryptoOperation | |
name | 必需 URI 中的 name 部分可由用户选择,以区分 camel 上下文中的不同 signer/verifier/encryptor/decryptor 端点。 | 字符串 |
75.1.2. 查询参数(15 参数):
Name | 描述 | 默认值 | 类型 |
---|---|---|---|
keystore (common) | 根据操作,密钥存储包含签名人私钥、verifier 公钥、加密密钥加密密钥、解密或私钥。使用此参数或参数 'keyStoreParameters'。 | KeyStore | |
keyStoreParameters (common) | 根据操作,包含签名人私钥、verifier 公钥、加密密钥加密密钥、解密器私钥的密钥存储。使用此参数或参数 'keystore'。 | KeyStoreParameters | |
同步 (高级) | 设置是否应严格使用同步处理,还是允许 Camel 使用异步处理(如果支持)。 | false | 布尔值 |
密码 (解密) | 设置私钥的密码。假设密钥存储中的所有私钥具有相同的密码。如果没有设置,则假定私钥的密码由 KeyStoreParameters 中指定的密钥存储密码提供。 | char[] | |
fromBase64 (decrypt_verify) | 如果为 true,则 CMS 消息采用 base 64 编码,必须在处理过程中被解码。默认值为 false。 | false | 布尔值 |
contentEncryptionAlgorithm (encrypt) | 加密算法,如 DESede/CBC/PKCS5Padding。其它可能的值:DESede/CBC/PKCS5Padding, AES/CBC/PKCS5Padding, Camellia/CBC/PKCS5Padding, CAST5/CBC/PKCS5Padding. | 字符串 | |
originatorInformation Provider (encrypt) | 原始器信息的供应商。请参阅 https://tools.ietf.org/html/rfc5652#section-6.1。默认值为 null。 | OriginatorInformation Provider | |
接收者 (加密) | 接收者信息:引用实现接口 org.apache.camel.component.crypto.cms.api.TransRecipientInfo 的 bean | list | |
secretKeyLength (encrypt) | 用于内容加密的 secret 对称密钥的密钥长度。仅在指定的 content-encryption 算法允许不同大小的密钥时使用。如果 contentEncryptionAlgorithm=AES/CBC/PKCS5Padding 或 Camellia/CBC/PKCS5Padding 随后 128;如果 contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding,则后续 192、128;如果对 AES/CBC/PKCS5Padding 和 Camellia/CBC/PKCS5Padding 也启用了密钥长度。 | int | |
unprotectedAttributes GeneratorProvider (encrypt) | 取消保护属性的生成器的提供商。默认值为 null,这意味着没有未保护的属性添加到 Enveloped Data 对象中。请参阅 https://tools.ietf.org/html/rfc5652#section-6.1。 | AttributesGenerator Provider | |
toBase64 (encrypt_sign) | 指明 Signed Data 或 Enveloped Data 实例是否应采用 base64 编码。默认值为 false。 | false | 布尔值 |
includeContent (sign) | 指明签名的内容是否应包含在 Signed Data 实例中。如果为 false,则在标头 CamelCryptoCmsSignedData 中创建分离的 Signed Data 实例。 | true | 布尔值 |
签名者 (签名) | 签名者信息:引用实现 org.apache.camel.component.crypto.cms.api.SignerInfo 的 bean | list | |
signedDataHeaderBase64 (verify) | 指明标头 CamelCryptoCmsSignedData 中的值是否采用 base64 编码。默认值为 false。只适用于分离的签名。在分离的签名情形中,标头包含 Signed Data 对象。 | false | 布尔值 |
verifySignaturesOfAll Signers (verify) | 如果为 true,则会验证 Signed Data 对象中包含的所有签名者的签名。如果为 false,则只验证签名者信息与其中一个指定证书匹配的签名。默认值为 true。 | true | 布尔值 |