第 74 章 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-jdk15on 和 bcpkix-jdk15on。
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 组件将注册该提供程序。
74.1. 选项
Crypto CMS 组件支持 3 个选项,它们如下所列。
名称 | 描述 | 默认 | 类型 |
---|---|---|---|
signedDataVerifier Configuration (advanced) | 要配置共享的 SignedDataVerifierConfiguration,它会决定验证操作的 uri 参数。 | SignedDataVerifier 配置 | |
envelopedDataDecryptor Configuration (advanced) | 要配置共享的 EnvelopedDataDecryptorConfiguration,这决定了解密操作的 uri 参数。 | EnvelopedDataDecryptor 配置 | |
resolveProperty Placeholders (advanced) | 启动时,组件是否应自行解析属性占位符。只有 String 类型的属性才能使用属性占位符。 | true | 布尔值 |
Crypto CMS 端点使用 URI 语法配置:
crypto-cms:cryptoOperation:name
使用以下路径和查询参数:
74.1.1. 路径名(2 参数):
名称 | 描述 | 默认 | 类型 |
---|---|---|---|
cryptoOperation | 在 endpoint uri 的 crypto scheme e.g. crypto-cms:sign set sign as the operation. 可能的值有:签名、验证、加密或解密。 | CryptoOperation | |
name | 需要该 URI 中的 name 部分可以由用户选择,以便区分 camel 上下文中的不同 signer/verifier/encryptor/decryptor 端点。 | 字符串 |
74.1.2. 查询参数(15 参数):
名称 | 描述 | 默认 | 类型 |
---|---|---|---|
keyStore (common) | 包含签名私钥的密钥存储,验证公钥、加密或公钥,以及根据操作解密或私钥。使用此参数或参数 'keyStoreParameters'。 | KeyStore | |
keyStoreParameters (common) | 包含签名密钥的密钥存储、验证公钥、加密或公钥、根据操作解密或私钥。使用此参数或参数 'keystore'。 | KeyStoreParameters | |
同步 (高级) | 设置同步处理是否应当严格使用,还是允许 Camel 使用异步处理(如果受支持)。 | false | 布尔值 |
密码 (解密) | 设置私钥的密码。假设密钥存储中的所有私钥都具有相同的密码。如果没有设置,则假定私钥的密码由 KeyStoreParameters 中提供的密钥存储密码提供。 | Char[] | |
fromBase64 (decrypt_verify) | 如果为 true,则 CMS 信息是 base 64 编码,则必须在处理过程中进行解码。默认值为 false。 | false | 布尔值 |
contentEncryptionAlgorithm (encrypt) | 加密算法,如 DESed/CBC/PKCS5Padding。进一步可能的值: DESed/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 | |
recipient (encrypt) | 接收者信息:引用实现接口 org.apache.camel.component.crypto.cms.api.TransRecipientInfo 的 bean | list | |
secretKeyLength (encrypt) | 用于内容加密的 secret 对称密钥的密钥长度。只有指定的内容加密算法允许不同大小的密钥时才使用。如果 contentEncryptionAlgorithm=AES/CBC/PKCS5Padding 或 Camellia/CBC/PKCS5Padding then 128; if contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding, then 192, 128; if strong encryption 然后,为 AES/CBC/PKCS5Padding 和 Camellia/PKCS5Padding 启用了 192/PKCS5Padding,密钥长度为 192 和 256。 | int | |
unprotectedAttributes GeneratorProvider (encrypt) | 不受保护的属性的生成器供应商。默认值为 null,这表示没有受保护的属性添加到 Enveloped Data 对象中。请参阅 https://tools.ietf.org/html/rfc5652#section-6.1。 | AttributesGenerator Provider | |
toBase64 (encrypt_sign) | 指明已签署的数据还是 Enveloped Data 实例是否应采用 base64 编码。默认值为 false。 | false | 布尔值 |
includeContent (sign) | 指明已签名的内容是否应当包含在 Signed Data 实例中。如果为 false,则在标头 CamelCryptoCmsSignedData 中创建一个分离的签名数据实例。 | true | 布尔值 |
signer (sign) | signer 信息:引用实现 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 | 布尔值 |