PGPセキュリティ
この拡張はエンドポイント通信に PGPセキュリティを追加します。PGPはサイン/暗号化されたメッセージのエンド・ツ・エンドセキュリティ通信を実現します。
前提条件
以下のライブラリをESB Muleクラスパス(classpath)に追加してください:
 | ポリシーファイルのインストール
Sun JCEに同梱されたJDK 1.4+又はSun JCE 1.2を手動でインストールした場合にJDK 1.2/1.3をインストールして使っている場合は、以下のサイトからダウンロードができる 無制限強度の管轄ポリシーファイル 1.4.2 をインストールしてください(ページ下の「 その他のダウンロード」からダウンロードができます)。
http://java.sun.com/j2se/1.4.2/ja/download.html
http://java.sun.com/j2se/1.5.0/download.jsp
このファイルを{{$JAVA_HOME$/jre/lib/security}}にインストールしてください。
デフォルトのJCE配布ファイルは、Sunの「強い、ただし制限付きの暗号」を許可します。これは、2048ビット以下のRSAキーと128ビット以下の対称非対称暗号しか使えないと言う意味です。ElGamalは全然使えませので、暗号化にDH/DSSは使えません。 |
PGPフィルタの設定
SpringFrameworkコンテキストを使って、公開/秘密キーを参照することができるマネージャを定義します。
<beans>
<bean id="pgpKeyManager" class="org.mule.extras.pgp.PGPKeyRingImpl"
init-method="initialise">
<property name="publicKeyRingFileName">
<value>pubring.gpg</value>
</property>
<property name="secretKeyRingFileName">
<value>secring.gpg</value>
</property>
<property name="secretAliasId">
<value>0x6168F39C</value>
</property>
<property name="secretPassphrase">
<value>TestingPassphrase</value>
</property>
</bean>
<bean id="fakeCredentialAccessor"
class="org.mule.extras.pgp.FakeCredentialAccessor" />
</beans>
それと、メッセージを差出人を知る必要があります。
この例では差出人を{{org.mule.extras.pgp.FakeCredentialAccessor}}クラス(pgp test srcから。固定ユーザ名を返します)を使ってごまかします。
 |
PGPはキーをkeyringsファイルに保管します。
信用したユーザの公開キーは公開キーホルダー( public keyring )に保管され、秘密キーは秘密キーホルダー ( private keyring) に保管されます。
キーホルダーは、キーは別名ID( alias ID 又は key Id )を使って参照されます。
秘密キーホルダーはパスフレーズを使ってディスクに暗号化されます。 |
この例の目的はサイン(と暗号化)されファイルをディレクトリ(/temp/signedAndEncryptedFiles/in)から読み込み、解読した内容を{{/temp/decryptedFiles/out}}へ書き出すechoアプリケーションを定義することです。
次にESB Muleの設定...
<mule-configuration id="Test_Mule_Properties" version="1.0">
<container-context
className="org.mule.extras.spring.SpringContainerContext">
<properties>
<property name="configFile" value="securityContext.xml"/>
</properties>
</container-context>
<security-manager>
<security-provider name="PgpProvider"
className="org.mule.extras.pgp.PGPSecurityProvider">
<properties>
<container-property name="keyManager" reference="pgpKeyManager"/>
</properties>
</security-provider>
<encryption-strategy name="KBE"
className="org.mule.extras.pgp.KeyBasedEncryptionStrategy">
<properties>
<container-property name="keyManager" reference="pgpKeyManager" />
</properties>
</encryption-strategy>
</security-manager>
<model name="echoTest">
<mule-descriptor name="echo" containerManaged="false"
implementation="org.mule.extras.pgp.EchoMsg">
<inbound-router>
<endpoint address="file:///temp/signedAndEncryptedFiles/in">
<security-filter
className="org.mule.extras.pgp.filters.PGPSecurityFilter">
<properties>
<property name="strategyName" value="KBE"/>
<property name="signRequired" value="true"/>
<container-property name="credentialsAccessor"
reference="fakeCredentialAccessor"/>
<container-property name="keyManager"
reference="pgpKeyManager" />
</properties>
</security-filter>
</endpoint>
</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="file:///temp/decryptedFiles/out" >
<security-filter
className="org.mule.extras.pgp.filters.PGPSecurityFilter">
<properties>
<property name="strategyName" value="KBE"/>
<property name="authenticate" value="false"/>
<container-property name="credentialsAccessor"
reference="fakeCredentialAccessor"/>
<container-property name="keyManager"
reference="pgpKeyManager" />
</properties>
</security-filter>
</endpoint>
</router>
</outbound-router>
</mule-descriptor>
</model>
</mule-configuration>
受信(inbound)セキュリティ・フィルタのプロパティ signRequired はサインされて無いメッセージを許可するかを指定します。
送信(outbound)セキュリティ・フィルタのプロパティ authenticate は、リシーバー用にメッセージを暗号化するかを指定します。
..and they said "free email account"...but I read "free persistent message queue"...
– Alessandro Riva