Skip navigation

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リンク集

How PGP works (概要)
GnuPG (フリーウエア)
enigmail (Thunderbirdの拡張機能)

PGPフィルタの設定

SpringFrameworkコンテキストを使って、公開/秘密キーを参照することができるマネージャを定義します。

securityContext.xml
<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">

  <!-- SpringFrameworkコンテキスト -->
  <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

Adaptavist Theme Builder Powered by Atlassian Confluence