第 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 个选项,如下所列。
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
signedDataVerifier 配置 (advanced) | 要配置共享的 SignedDataVerifierConfiguration,它决定了 verify 操作的 uri 参数。 | SignedDataVerifier 配置 | |
envelopedDataDecryptor Configuration (advanced) | 要配置共享的 EnvelopedDataDecryptorConfiguration,它决定了解密操作的 uri 参数。 | EnvelopedDataDecryptor 配置 | |
resolveProperty Placeholders (advanced) | 启动时组件是否应解析自身上的属性占位符。只有属于 String 类型的属性才能使用属性占位符。 | true | 布尔值 |
Crypto CMS 端点使用 URI 语法进行配置:
crypto-cms:cryptoOperation:name
使用以下路径和查询参数:
75.1.1. 路径参数(2 参数):
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
cryptoOperation | 必需 在 endpoint uri e.g. crypto-cms:sign set sign 作为操作中的加密方案后提供的加密操作。可能的值有:签名、验证、加密或解密。 | CryptoOperation | |
name | 用户可以选择 URI 中的名称部分来区分 camel 上下文中的不同 signer/verifier/encryptor/decryptor 端点。 | 字符串 |
75.1.2. 查询参数(15 参数):
名称 | 描述 | 默认值 | 类型 |
---|---|---|---|
keyStore (common) | 根据操作,包含签名人私钥、verifier 公钥、加密器公钥、解密或私钥的密钥存储。使用此参数或参数 'keyStoreParameters'。 | KeyStore | |
keyStoreParameters (common) | 包含签名人私钥、verifier 公钥、加密器公钥、解密器私钥的密钥存储,具体取决于操作。使用此参数或参数 'keystore'。 | KeyStoreParameters | |
同步 (advanced) | 设置是否应严格使用同步处理,或者 Camel 允许使用异步处理(如果受支持)。 | false | 布尔值 |
password (decrypt) | 设置私钥的密码。假设密钥存储中的所有私钥都具有相同的密码。如果没有设置,则假定私钥的密码是由 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 (加密) | 原始器信息的供应商。See 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 then 128; if contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding then 192, 128; 如果对 AES/CBC/PKCS5Padding 和 Camellia/CBC/PKCS5Padding 和 Camellia/PKCS5Padding 和 Camellia/CBC/PKCS5Padding 启用了强大的加密。 | int | |
unprotectedAttributes GeneratorProvider (加密) | 未保护属性的生成器的提供程序。默认值为 null,这意味着没有未保护的属性被添加到 Enveloped Data 对象中。See https://tools.ietf.org/html/rfc5652#section-6.1. | AttributesGenerator Provider | |
toBase64 (encrypt_sign) | 指明已签名数据还是 Enveloped Data 实例应采用 base 64 编码。默认值为 false。 | false | 布尔值 |
includeContent (sign) | 指明是否应将签名内容包含在 Signed Data 实例中。如果为 false,则会在标头 CamelCryptoCmsSignedData 中创建分离的 Signed Data 实例。 | true | 布尔值 |
签名人 (sign) | 签名者信息:引用实施 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 | 布尔值 |