23.8. 使用


23.8.1. Raw keys

エクスチェンジの署名および検証方法として最も基本的なのは、次のように KeyPair を使用する方法です。

KeyPair keyPair = KeyGenerator.getInstance("RSA").generateKeyPair();

from("direct:sign")
    .setHeader(DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, constant(keys.getPrivate()))
    .to("crypto:sign:message")
    .to("direct:verify");

from("direct:verify")
    .setHeader(DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, constant(keys.getPublic()))
    .to("crypto:verify:check");
Copy to Clipboard Toggle word wrap

Spring XML Extensions で鍵への参照を使用しても、同じ結果になります。

23.8.2. キーストアとエイリアス。

JCE は、秘密鍵と証明書のペアを格納し、それらを暗号化し、パスワードで保護するための非常に用途の広いキーストアの概念を提供します。これらは、取得 API にエイリアスを適用することで取得できます。鍵と証明書を鍵ストアに入れる方法はいくつかありますが、ほとんどの場合、これは外部の keytool アプリケーションで行われます。

次のコマンドは、エイリアスが bob の鍵と証明書が格納された keystore を作成します。これは以下の例で使用できます。キーストアと鍵のパスワードは letmein です。

keytool -genkey -keyalg RSA -keysize 2048 -keystore keystore.jks -storepass letmein -alias bob -dname "CN=Bob,OU=IT,O=Camel" -noprompt
Copy to Clipboard Toggle word wrap

次のルートは、最初に Camel レジストリーにバインドされた KeyStore からエクスチェンジに Bob のエイリアスを使用して署名し、次に同じエイリアスを使用して検証します。

from("direct:sign")
    .to("crypto:sign:keystoreSign?alias=bob&keystoreName=myKeystore&password=letmein")
    .log("Signature: ${header.CamelDigitalSignature}")
    .to("crypto:verify:keystoreVerify?alias=bob&keystoreName=myKeystore&password=letmein")
    .log("Verified: ${body}");
Copy to Clipboard Toggle word wrap

次のコードは、上記の keytool コマンドを使用して作成されたキーストアをロードし、上記のルートで使用するために myKeystore という名前でレジストリーにバインドしてロードする方法を示しています。この例では、Camel 3 で導入された @Configuration および @BindToRegistry のアノテーションを使用して KeyStore をインスタンス化し、myKeyStore という名前で登録します。

@Configuration
public class KeystoreConfig {

    @BindToRegistry
    public KeyStore myKeystore() throws Exception {
        KeyStore store = KeyStore.getInstance("JKS");
        try (FileInputStream fis = new FileInputStream("keystore.jks")) {
            store.load(fis, "letmein".toCharArray());
        }
        return store;
    }
}
Copy to Clipboard Toggle word wrap

再び Spring では、ref を使用して実際のキーストアインスタンスを検索します。

23.8.3. JCE プロバイダーとアルゴリズムの変更

署名アルゴリズムまたはセキュリティープロバイダーの変更は、それらの名前を指定するだけの簡単な作業です。選択したアルゴリズムと互換性のあるキーも使用する必要があります。

23.8.4. 署名メッセージヘッダーの変更

署名を格納するために使用されるメッセージヘッダーを変更することが望ましい場合があります。次のように、ルート定義で別のヘッダー名を指定できます。

from("direct:sign")
    .to("crypto:sign:keystoreSign?alias=bob&keystoreName=myKeystore&password=letmein&signatureHeaderName=mySignature")
    .log("Signature: ${header.mySignature}")
    .to("crypto:verify:keystoreVerify?alias=bob&keystoreName=myKeystore&password=letmein&signatureHeaderName=mySignature");
Copy to Clipboard Toggle word wrap

===bufferSize の変更

バッファーのサイズを更新する必要がある場合。

23.8.5. キーを動的に提供します。

受信者リストまたは同様の EIP を使用する場合、エクスチェンジの受信者は動的に変化する可能性があります。すべての受信者に同じキーを使用することは、実現可能でも望ましくもない場合があります。署名キーを交換ごとに動的に指定できると便利です。エクスチェンジは、署名する前に、ターゲット受信者のキーで動的に強化できます。これを容易にするために、署名メカニズムでは、以下のメッセージヘッダーを介して鍵を動的に提供できます。

  • DigitalSignatureConstants.SIGNATURE_PRIVATE_KEY, "CamelSignaturePrivateKey"
  • DigitalSignatureConstants.SIGNATURE_PUBLIC_KEY_OR_CERT, "CamelSignaturePublicKeyOrCert"

キーストアエイリアスを動的に指定することを推奨します。この場合も、エイリアスはメッセージヘッダーで指定できます。

  • DigitalSignatureConstants.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.getMessage());
signed.getIn().setHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, "bob");
template.send("direct:alias-verify", signed);
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat