1.8. FIPS 140-2 準拠のクレデンシャルストアの作成


Elytron で、Federal Information Processing Standard (FIPS) 140-2 に準拠したクレデンシャルストアを設定できます。FIPS 140-2 は、米国が開発したコンピューターセキュリティー規格です。暗号化モジュールの品質を検証する政府および業界の作業グループ。FIPS の出版物 (140-2 を含む) は、http://csrc.nist.gov/publications/PubsFIPS.html にあります。

Elytron では、2 つの異なるプロバイダーを使用して FIPS 140-2 に準拠したクレデンシャルストアを設定できます。

重要

JBoss EAP 自体は FIPS 認定を受けていません。JBoss EAP の FIPS 対応のレベルは、JBoss EAP を FIPS 認定を受けた暗号化実装で使用できることです。テスト済みの実装は、BouncyCastle と SunPKCS#11 です。

NSS は、クロスプラットフォームセキュリティー対応のクライアントおよびサーバーアプリケーションをサポートする一連のライブラリーです。JBoss EAP の NSS ライブラリーで SunPKCS#11 プロバイダーを使用して、FIPS 140-2 準拠の暗号化を実装できます。NSS の詳細は、Mozilla docs - Network Security Services (NSS) を参照してください。SunPKCS#11 プロバイダーの詳細は、PKCS#11 Reference Guide を参照してください。

1.8.1.1. SunPKCS#11 プロバイダーと NSS データベースを使用した場合に FIPS をサポートする JDK

Federal Information Processing Standard (FIPS) 140-2 に準拠するためには、NSS ライブラリーによって実装される Network Security Services (NSS) ソフトウェアトークンを使用して SunPKCS#11 セキュリティープロバイダーを設定する必要がありますが、すべての Java Development Kit (JDK) ベンダーがこの設定をサポートしているわけではありません。JBoss EAP で SunPKCS#11 プロバイダーおよび NSS データベースを使用して FIPS を設定する前に、JDK がそれに対応していることを確認してください。

以下は、SunPKCS#11 セキュリティーの設定に対応している JBoss EAP のサポート対象 JDK の一覧です。

  • OpenJDK 11
  • OpenJDK 17

Red Hat Enterprise Linux 8.4 以降、Federal Information Processing Standard (FIPS) システム全体の暗号化ポリシーを有効にすると、FIPS for Java も自動的に有効になります。デフォルトの Network Security Services (NSS) データベースを使用して、FIPS 140-2 準拠のクレデンシャルストアを作成できます。

この手順では、$JAVA_HOME は JDK インストールパスを参照します。この手順のコマンドを root ユーザーとして実行します。

前提条件

  • RHEL で FIPS が有効になっている。

    以下のコマンドを使用して、FIPS が有効化されているか確認できます。

    # fips-mode-setup --check

    RHEL で FIPS を有効にする方法は、以下のリソースを参照してください。

  • NSS ツールがインストールされている。

    Red Hat Enterprise Linux では、以下のように DNF パッケージマネージャーを使用して NSS ツールをインストールできます。

    # dnf install -y nss-tools
  • Java Development Kit (JDK) は、NSS ライブラリーを使用した PKCS#11 の設定をサポートしています。

    FIPS 対応 JDK の詳細は、FIPS 対応 JDK を参照してください。

  • JBoss EAP が実行されている。

手順

  1. $JAVA_HOME/conf/security/nss.fips.cfg ファイルの nssDbMode の値を readWrite に更新します。

    nss.fips.cfg コンテンツの例

    name = NSS-FIPS
    nssLibraryDirectory = /usr/lib64
    nssSecmodDirectory = sql:/etc/pki/nssdb
    nssDbMode = readWrite
    nssModule = fips
    
    attributes(*,CKO_SECRET_KEY,CKK_GENERIC_SECRET)={ CKA_SIGN=true }

  2. AES シークレットキーを生成してクレデンシャルストアを暗号化します。

    注記

    コマンドでストアパスワード NONE を使用する必要があります。

    構文

    # keytool -genseckey -keystore NONE -storetype PKCS11 -storepass NONE -alias <key_alias> -keyalg <symmetric_key_algorithm> -keysize <key_size>

    # keytool -genseckey -keystore NONE -storetype PKCS11 -storepass NONE -alias exampleKeyAlias -keyalg AES -keysize 256

  3. シークレットキーの読み取りが可能か検証します。

    # keytool -list -storetype pkcs11 -storepass NONE
    
    Keystore type: PKCS11
    Keystore provider: SunPKCS11-NSS-FIPS
    
    Your keystore contains 1 entry
    
    exampleKeyAlias, SecretKeyEntry,
  4. $JAVA_HOME/conf/security/nss.fips.cfg ファイルの nssDbMode の値を readOnly に更新します。

    nss.fips.cfg コンテンツの例

    name = NSS-FIPS
    nssLibraryDirectory = /usr/lib64
    nssSecmodDirectory = sql:/etc/pki/nssdb
    nssDbMode = readOnly
    nssModule = fips
    
    attributes(*,CKO_SECRET_KEY,CKK_GENERIC_SECRET)={ CKA_SIGN=true }

  5. 管理 CLI のプロバイダーリストに SunJCE プロバイダーを追加します。

    1. SunJCE のプロバイダーローダーを追加します。

      /subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])
      {"outcome" => "success"}
    2. アグリゲートプロバイダーで Elytron および SunJCE を設定します。

      構文

      /subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[elytron,SunJCE])

      /subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[elytron,SunJCE])
      {"outcome" => "success"}

      注記

      プロバイダーはコマンドで定義されている順序で呼び出されます。

  6. SunJCE プロバイダーを使用して Elytron でクレデンシャルストアを作成します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:add(implementation-properties={keyStoreType => PKCS11, external => true, keyAlias => <key_alias>, externalPath => <path_where_credential_store_is_to_be_saved>}, modifiable=true, credential-reference={clear-text=<password>}, create=true, other-providers=<aggregate_provider_name>)

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add(implementation-properties={keyStoreType => PKCS11, external => true, keyAlias => exampleKeyAlias, externalPath => /home/ashwin/example.store}, modifiable=true, credential-reference={clear-text=secret}, create=true, other-providers=exampleAggregateProvider)
    {"outcome" => "success"}

検証

  1. クレデンシャルストアにエイリアスを追加します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:add-alias(alias=<alias>, secret-value=<secret_value>)

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add-alias(alias=exampleAlias, secret-value=secret)
    {"outcome" => "success"}

  2. クレデンシャルストアのエイリアスを一覧表示します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:read-aliases()

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => ["examplealias"]
    }

作成されたクレデンシャルストアは FIPS 140-2 に準拠しています。

1.8.2. BouncyCastle プロバイダーを使用した FIPS 140-2 準拠クレデンシャルストアの作成

BouncyCastle は、Java および C# 用の軽量な暗号化 API を提供します。JBoss EAP で次の BouncyCastle プロバイダーを使用すると、FIPS 140-2 準拠のクレデンシャルストアを作成できます。

  • Java Cryptography Extension (JCE) および Java Cryptography Architecture (JCA) 用の BouncyCastle FIPS プロバイダー。
  • Java Secure Socket Extension (JSSE) 用の BouncyCastle FIPS プロバイダー。

BouncyCastle については、The Legion of the Bouncy Castle を参照してください。

1.8.2.1. BouncyCastle プロバイダーを使用した FIPS 140-2 準拠クレデンシャルストアの作成

Red Hat Enterprise Linux 8.4 以降、Federal Information Processing Standard (FIPS) のシステム全体の暗号化ポリシーを有効にすると、OpenJDK によってさまざまなセキュリティープロバイダーが自動的に有効になります。セキュリティープロバイダーの 1 つは、FIPS モードで設定された SunPKCS11 プロバイダーです。その代わりに BouncyCastle プロバイダーを使用する場合は、以下の手順に従って Federal Information Processing Standard (FIPS) 140-2 準拠のクレデンシャルストアを作成できます。

前提条件

  • RHEL で FIPS が有効になっている。

    以下のコマンドを使用して、FIPS が有効化されているか確認できます。

    # fips-mode-setup --check

    RHEL で FIPS を有効にする方法は、以下のリソースを参照してください。

  • お使いの Java Development Kit (JDK) が、BouncyCastle プロバイダーを使用した FIPS の設定をサポートしている。

    詳細は、The Legion of the Bouncy Castle - FIPS Resources Page の Java Related Questions を参照してください。

手順

  1. 次のリンクから BouncyCastle jar をダウンロードします。

  2. 次の内容を含む java.security という設定ファイルを作成します。

    fips.provider.1=org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider
    fips.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider fips:BCFIPS
    fips.provider.3=SUN
    fips.provider.4=SunEC
    fips.provider.5=com.sun.net.ssl.internal.ssl.Provider
    注記

    デフォルトの java.security ファイル内の FIPS プロバイダーを変更しないでください。この手順で説明されているように、独自の java.security プロパティーファイルを使用することを推奨します。

  3. AES シークレットキーを生成してクレデンシャルストアを暗号化します。

    構文

    $ keytool -J-Djava.security.properties=<java_security_file> -genseckey -keystore "<keystore_name>" -storetype BCFKS -storepass <store_password> -alias <key_alias> -keyalg <symmetric_key_algorithm> -keysize <key_size> -keypass <key_password>  -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>  -dname "<certificate_contents>" -validity <validity_in_days>

    $ keytool -J-Djava.security.properties=<path_to_java_security_file>/java.security -genseckey -keystore "examplekeystore.bcfks" -storetype BCFKS -storepass password -alias exampleKeyAlias -keyalg AES -keysize 256 -keypass password -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>/bc-fips-1.0.2.jar -dname "CN=localhost" -validity 365

  4. シークレットキーの読み取りが可能か検証します。

    構文

    $ keytool -J-Djava.security.properties=<java_security_file> -list -keystore <keystore_name> -storetype BCFKS -storepass <store_password> -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>

    $ keytool -J-Djava.security.properties=<path_to_java_security_file>/java.security -list -keystore examplekeystore.bcfks -storetype BCFKS -storepass password -provider org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath <path_to_bc-fips_jar>/bc-fips-1.0.2.jar

    出力例

    Keystore type: BCFKS
    Keystore provider: BCFIPS
    
    Your keystore contains 1 entry
    
    exampleKeyAlias, Mar 1, 2023, SecretKeyEntry,

  5. サービスを起動します。
  6. 管理 CLI を使用して、BouncyCastle プロバイダーを使用するように JBoss EAP を設定します。

    1. SunJCE プロバイダーをプロバイダーのリストに追加します。

      /subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])
    2. BouncyCastle プロバイダー jar を JBoss EAP のモジュールとして追加します。

      構文

      module add --name=org.bouncycastle.fips --resources=<path_to_bc-fips_jar>:<path_to_bctls-fips_jar>

      module add --name=org.bouncycastle.fips --resources=<path_to_bc-fips_jar>/bc-fips-1.0.2.jar:<path_to_bctls-fips_jar>/bctls-fips-1.0.2.jar

    3. BouncyCastle プロバイダーのプロバイダーローダーを追加します。

      構文

      /subsystem=elytron/provider-loader=<provider_loader_name>:add(module=org.bouncycastle.fips)

      /subsystem=elytron/provider-loader=exampleProviderLoader:add(module=org.bouncycastle.fips)

    4. アグリゲートプロバイダーに、BouncyCastle、SunJCE、および combined-providers を設定します。

      構文

      /subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[<provider_loader_name>,SunJCE,combined-providers])

      /subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[exampleProviderLoader,SunJCE,combined-providers])

      注記

      プロバイダーはコマンドで定義されている順序で呼び出されます。

    5. サーバーをリロードします。

      reload
  7. BouncyCastle プロバイダーを使用して、Elytron にクレデンシャルストアを作成します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:add(credential-reference={clear-text=<key_and_keystore_password>},implementation-properties={keyAlias=<key_alias>,external=true,externalPath=<path_to_BCFKS_credential_store>,keyStoreType=BCFKS},create=true,path=<path_to_keystore>,modifiable=true, other-providers=<aggregate_provider_name>)

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add(credential-reference={clear-text=password},implementation-properties={keyAlias=exampleKeyAlias,external=true, externalPath=credentialStore.bcfks, keyStoreType=BCFKS}, create=true, path=__<path_to_keystore>__/examplekeystore.bcfks, modifiable=true, other-providers=exampleAggregateProvider)

検証

  1. クレデンシャルストアにエイリアスを追加します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:add-alias(alias=<alias>, secret-value=<secret_value>)

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:add-alias(alias=exampleAlias, secret-value=secret)

  2. クレデンシャルストアのエイリアスを一覧表示します。

    構文

    /subsystem=elytron/credential-store=<credential_store_name>:read-aliases()

    /subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases()
    {
        "outcome" => "success",
        "result" => ["examplealias"]
    }

作成されたクレデンシャルストアは FIPS 140-2 に準拠しています。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat
トップに戻る