3.2. 信頼された CA 証明書の指定

3.2.1. 信頼できる CA 証明書をデプロイするタイミング

概要

アプリケーションが SSL/TLS ハンドシェイク時に X.509 証明書を受信すると、アプリケーションは発行者 CA が事前に定義された CA 証明書の 1 つであるかどうかをチェックして、受信した証明書を信頼するかどうかを決定します。受信した X.509 証明書が有効でアプリケーションの信頼された CA 証明書のいずれかによって署名されている場合、証明書は信頼できるものとみなされます。そうでない場合は拒否されます。

信頼された CA 証明書を指定するアプリケーション

HTTPS ハンドシェイクの一部として X.509 証明書を受信する可能性があるすべてのアプリケーションは、信頼できる CA 証明書の一覧を指定する必要があります。たとえば、これには以下のようなタイプのアプリケーションが含まれます。

  • すべての HTTPS クライアント。
  • 相互認証 をサポートする HTTPS サーバー。

3.2.2. HTTPS の信頼された CA 証明書の指定

CA 証明書の形式

CA 証明書は Java キーストア形式で提供する必要があります。

Apache CXF 設定ファイルでの CA 証明書のデプロイメント

HTTPS トランスポート用に信頼されたルート CA を 1 つ以上デプロイするには、以下の手順を実行します。

  1. デプロイする信頼される CA 証明書のコレクションをアセンブルします。信頼できる CA 証明書は、パブリック CA またはプライベート CA から取得できます (独自の CA 証明書を生成する方法の詳細については、「独自の証明書の作成」 を参照してください。信頼できる CA 証明書は、Java keystore ユーティリティー (例: PEM 形式) と互換性のある任意の形式にすることができます。必要な証明書は、秘密鍵とパスワードだけでは必要ありません。
  2. PEM 形式の CA 証明書 cacert.pem が指定されている場合は、以下のコマンドを入力して証明書を JKS トラストストアに追加できます (または新規のトラストストアを作成します)。

    keytool -import -file cacert.pem -alias CAAlias -keystore truststore.jks -storepass StorePass

    CAAlias は便利なタグで、これにより、keytool ユーティリティーを使用して、この特定の CA 証明書にアクセスすることができます。ファイル truststore.jks は CA 証明書を含むキーストアファイルです。このファイルがまだ存在しない場合は、keytool ユーティリティーが作成します。StorePass パスワードは、キーストアファイル truststore.jks へのアクセスを提供します。

  3. 必要に応じて手順 2 を繰り返し、すべての CA 証明書をトラストストアファイル truststore.jks に追加します。
  4. 関連する XML 設定ファイルを編集して、トラストストアファイルの場所を指定します。関連する HTTPS ポートの設定に sec:trustManagers 要素を含める必要があります。

    たとえば、以下のようにクライアントポートを設定できます。

    <!-- Client port configuration -->
    <http:conduit id="{Namespace}PortName.http-conduit">
      <http:tlsClientParameters>
        ...
        <sec:trustManagers>
          <sec:keyStore type="JKS"
                        password="StorePass"
                        file="certs/truststore.jks"/>
        </sec:trustManagers>
        ...
      </http:tlsClientParameters>
    </http:conduit>

    ここで、type 属性は、トラストストアが JKS キーストア実装を使用し、StorePasstruststore.jks キーストアへのアクセスに必要なパスワードであることを指定します。

    以下のようにサーバーポートを設定します。

    <!-- Server port configuration -->
    <http:destination id="{Namespace}PortName.http-destination">
      <http:tlsServerParameters secureSocketProtocol="TLSv1">
        ...
        <sec:trustManagers>
          <sec:keyStore type="JKS"
                        password="StorePass"
                        file="certs/truststore.jks"/>
        </sec:trustManagers>
        ...
      </http:tlsServerParameters>
    </http:destination>
    重要

    Poodle 脆弱性 (CVE-2014-3566) から保護するために、サーバー側で secureSocketProtocol を TLSv1 に設定する必要があります。

    警告

    トラストストアを含むディレクトリー (例: X509Deploy/truststores/) は、安全なディレクトリー (管理者のみが書き込み可能) である必要があります。