FIPS 対応 RHEL 8.X 上の Edge for Private Cloud

この記事では、FIPS 対応の RHEL 8.X で動作するバージョン 4.53.00 以降を利用する Edge for Private Cloud のお客様を対象に、詳細と手順について説明します。

プリインストール

Edge for Private Cloud のドキュメントに記載されている他の標準構成の前提条件に加えて、ノードで FIPS が有効になっていることを確認します。

fips-mode-setup --check
FIPS mode is enabled.

FIPS モードが現在無効になっている場合は、有効にする方法について Red Hat の公式ドキュメントをご覧ください。

Java の要件

使用する Java は Red Hat のリポジトリからダウンロードする必要があります。これにより、Java のセキュリティ モジュールが FIPS に対応し、Java セキュリティを介して FIPS 固有の制限を実装できるようになります。

インストール

サイレント インストール構成ファイルのリファレンスで、すべてのノードで FIPS_OS=true を設定します。通常どおり、Edge for Private Cloud の一般的なインストール手順に沿って操作します。

秘密鍵の形式

API プロキシまたは仮想ホストで使用するために、Apigee キーストアに秘密鍵をアップロードする場合は、PKCS12/PFX 形式のみを使用できます。ファイルの作成については、証明書をサポートされている形式に変換するをご覧ください。

一般的な TLS オペレーション

FIPS 対応の RHEL 8.X で Edge for Private Cloud 4.53.00 以降を使用する場合、Edge の TLS 関連コンポーネントのほとんどの構成は、PKCS12 または BCFKS 形式のキーストアを使用して行う必要があります。詳細については、TLS 構成に関する FIPS 固有のドキュメントまたは関連記事の注記をご覧ください。付録に、これらのキーストアの生成に使用できる便利なコマンドを示します。

デフォルトの Java キーストア/トラストストア

Edge for Private Cloud 4.53.00 以降が FIPS 対応の RHEL 8.X で運用されている場合、Message Processor、Management Server、その他の edge-* コンポーネントは、製品に付属のデフォルトのトラストストアとキーストアに依存します。これらには、アプリがデフォルトで信頼する CA 証明書が含まれています。CA 証明書を含む独自のストアに変更する場合は、次の手順を行います。

  1. 信頼するすべての CA 証明書を含む BCFKS 形式の cacerts ファイルを作成します。キーストアのパスワードと鍵のパスワードが同じであることを確認します。詳細については、付録をご覧ください。
  2. ファイルを適切なパスに配置し、apigee ユーザーが読み取れるようにします。
    cp my-cacerts.bcfks /opt/apigee/customer/application/my-cacerts.bcfks
    chown apigee:apigee /opt/apigee/customer/application/my-cacerts.bcfks
  3. 作業するコンポーネントに基づいて、適切な構成ファイルを作成(または編集)します。
    コンポーネント ファイル
    edge-management-server $/opt/apigee/customer/application/management-server.properties
    edge-message-processor $/opt/apigee/customer/application/message-processor.properties
    edge-router $/opt/apigee/customer/application/router.properties
    edge-postgres-server $/opt/apigee/customer/application/postgres-server.properties
    edge-qpid-server $/opt/apigee/customer/application/qpid-server.properties
  4. このファイルに次の行を追加します。
          conf_system_javax.net.ssl.trustStore=<PATH to bcfks cacerts>
          conf_system_javax.net.ssl.trustStorePassword=changeme
          conf_system_javax.net.ssl.keyStore=<PATH to bcfks cacerts>
          conf_system_javax.net.ssl.keyStoreType=BCFKS
          conf_system_javax.net.ssl.keyStorePassword=changeme
          
  5. 構成ファイルの所有者が Apigee ユーザーであり、Apigee ユーザーが読み取れるようにします。
    chown apigee:apigee $opt/apigee/customer/application/<file>.properties
  6. コンポーネントを再起動します。
    /opt/apigee/apigee-service/bin/apigee-service  restart

付録

BCFKS キーストア オペレーションのサンプル コマンド

次のコマンドは、自己署名鍵と証明書のペアを含む BCFKS キーストアを生成します。

keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \
-storepass keypass -keypass keypass -v \
-dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

Keytool コマンドは通常実行されるコマンドと同じですが、keytool コマンドに次のオプションを追加する必要があります。

--storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider 
-providername BCFIPS

Keytool の引数

Keytool 引数 説明
-storetype ストアタイプは BCFKS です。
-providerpath bc-fips-XXXX.jar のパス。この JAR のバージョンは、今後の OPDK バージョンで変更される可能性があります。Apigee から提供されているバージョンを使用する必要があります。Bouncycastle のリポジトリから jar をダウンロードすることもできます。OPDK 4.53 のリリース時点では、/opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar です。
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider に設定する必要があります。
-providername BCFIPS に設定する必要があります。

同様の keytool コマンドを使用して、BCFKS 形式のキーストアとの間で証明書や鍵をインポートまたはエクスポートできます。BCFKS の使用方法については、BouncyCastle のドキュメントをご覧ください。

PKCS12 ストア

PKCS12 ストアを生成するには、openssl コマンドを使用します。

# Generate a self-signed private key and certificate
openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.pem -sha256 -days 36500 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=cn/emailAddress=email"
# Package the above generated key and cert into a PKCS12
openssl pkcs12 -export -clcerts -in certificate.pem -inkey private.key -out keystore.pfx -name myalias

独自の秘密鍵と証明書があり、PKCS12 にパッケージ化する場合、証明書をサポートされている形式に変換するをご覧ください。