74.5. 使用
74.5.1. 原始密钥
签署和验证交换的最基本方法是使用 KeyPair,如下所示:
Spring XML 扩展 可以使用对密钥的引用实现相同的
74.5.2. keystores 和 Aliases。
JCE 提供了非常通用的密钥存储概念,用于对私钥和证书进行密钥对,使其加密且受密码保护。可以通过将别名应用到检索 API 来检索它们。可以通过多种方式将密钥和证书获取到密钥存储中,最常通过外部"keytool"应用程序完成。这是使用 keytool 创建具有自签名 Cert 和 Private 密钥的 KeyStore 的示例。
这个示例使用密钥存储,密钥和证书被 'bob' 别名。密钥存储的密码和密钥是 'letmein'
以下显示了如何通过 Fluent 构建器使用密钥存储,它还演示了如何加载和初始化密钥存储。
在 Spring a ref 中再次用于查找实际的密钥存储实例。
74.5.3. 更改 JCE Provider 和 Algorithm
更改签名算法或安全供应商是指定名称的简单问题。您还需要使用与您选择的算法兼容的密钥。
或
74.5.4. 更改签名消息标头
可能需要更改用于存储签名的消息标头。路由定义中可以指定不同的标头名称,如下所示
或
74.5.5. 更改 buffersize
如果您需要更新 buffer… 的大小
或
74.5.6. 动态提供密钥。
当使用 Recipient 列表或类似的 EIP 时,交换的接收者可能会动态变化。在所有接收者中使用相同的密钥可能并不可行。在每次交换时能够动态指定签名密钥会很有用。然后,在签名前,可以使用其目标接收者的密钥动态增强交换。为方便此目的,签名机制允许通过以下消息标头动态提供密钥
-
Exchange.SIGNATURE_PRIVATE_KEY
,"CamelSignaturePrivateKey"
-
Exchange.SIGNATURE_PUBLIC_KEY_OR_CERT
,"CamelSignaturePublicKeyOrCert"
或
最好是动态提供密钥存储别名。再次在消息标头中提供别名
-
Exchange.KEYSTORE_ALIAS
,"CamelSignatureKeyStoreAlias"
或
标头将设置为如下
Exchange unsigned = getMandatoryEndpoint("direct:alias-sign").createExchange(); unsigned.getIn().setBody(payload); unsigned.getIn().setHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, "bob"); unsigned.getIn().setHeader(DigitalSignatureConstants.KEYSTORE_PASSWORD, "letmein".toCharArray()); template.send("direct:alias-sign", unsigned); Exchange signed = getMandatoryEndpoint("direct:alias-sign").createExchange(); signed.getIn().copyFrom(unsigned.getOut()); signed.getIn().setHeader(KEYSTORE_ALIAS, "bob"); template.send("direct:alias-verify", signed);