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 に準拠したクレデンシャルストアを設定できます。
SunPKCS#11 プロバイダーと Network Security Services (NSS) データベース。
詳細は、SunPKCS#11 プロバイダーおよび NSS データベースを使用した FIPS 140-2 準拠クレデンシャルストアの作成 を参照してください。
BouncyCastle プロバイダー。
詳細は、BouncyCastle プロバイダーを使用した FIPS 140-2 準拠クレデンシャルストアの作成 を参照してください。
JBoss EAP 自体は FIPS 認定を受けていません。JBoss EAP の FIPS 対応のレベルは、JBoss EAP を FIPS 認定を受けた暗号化実装で使用できることです。テスト済みの実装は、BouncyCastle と SunPKCS#11 です。
1.8.1. SunPKCS#11 プロバイダーおよび NSS データベースを使用した FIPS 140-2 準拠クレデンシャルストアの作成 リンクのコピーリンクがクリップボードにコピーされました!
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
1.8.1.2. FIPS 対応 RHEL で SUNPKCS#11 プロバイダーと NSS データベースを使用して FIPS 140-2 準拠のクレデンシャルストアを作成する方法 リンクのコピーリンクがクリップボードにコピーされました!
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 --checkRHEL で FIPS を有効にする方法は、以下のリソースを参照してください。
- Red Hat Enterprise Linux ドキュメントの FIPS モードでのシステムのインストール
- Red Hat Enterprise Linux ドキュメントの FIPS モードへのシステムの切り替え
NSS ツールがインストールされている。
Red Hat Enterprise Linux では、以下のように DNF パッケージマネージャーを使用して NSS ツールをインストールできます。
# dnf install -y nss-toolsJava Development Kit (JDK) は、NSS ライブラリーを使用した PKCS#11 の設定をサポートしています。
FIPS 対応 JDK の詳細は、FIPS 対応 JDK を参照してください。
- JBoss EAP が実行されている。
手順
$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 }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シークレットキーの読み取りが可能か検証します。
# keytool -list -storetype pkcs11 -storepass NONE Keystore type: PKCS11 Keystore provider: SunPKCS11-NSS-FIPS Your keystore contains 1 entry exampleKeyAlias, SecretKeyEntry,$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 }管理 CLI のプロバイダーリストに SunJCE プロバイダーを追加します。
SunJCE のプロバイダーローダーを追加します。
/subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE]) {"outcome" => "success"}アグリゲートプロバイダーで Elytron および SunJCE を設定します。
構文
/subsystem=elytron/aggregate-providers=<aggregate_provider_name>:add(providers=[elytron,SunJCE])例
/subsystem=elytron/aggregate-providers=exampleAggregateProvider:add(providers=[elytron,SunJCE]) {"outcome" => "success"}注記プロバイダーはコマンドで定義されている順序で呼び出されます。
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"}
検証
クレデンシャルストアにエイリアスを追加します。
構文
/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"}クレデンシャルストアのエイリアスを一覧表示します。
構文
/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 --checkRHEL で FIPS を有効にする方法は、以下のリソースを参照してください。
- Red Hat Enterprise Linux ドキュメントの FIPS モードでのシステムのインストール
- Red Hat Enterprise Linux ドキュメントの FIPS モードへのシステムの切り替え
お使いの Java Development Kit (JDK) が、BouncyCastle プロバイダーを使用した FIPS の設定をサポートしている。
詳細は、The Legion of the Bouncy Castle - FIPS Resources Page の Java Related Questions を参照してください。
手順
次のリンクから BouncyCastle jar をダウンロードします。
- bc-fips-N jar: Bouncy Castle Provider (FIPS Distribution) Maven
bctls-fips-N jar: Bouncy Castle TLS/JSSE APIs (FIPS Distribution)
N は BouncyCastle FIPS プロバイダーのバージョンを表します。
ご使用の環境に適合する BouncyCastle FIPS プロバイダーの最新認定バージョンに関する情報は、The Legion of the Bouncy Castle を参照してください。
次の内容を含む
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プロパティーファイルを使用することを推奨します。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シークレットキーの読み取りが可能か検証します。
構文
$ 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,- サービスを起動します。
管理 CLI を使用して、BouncyCastle プロバイダーを使用するように JBoss EAP を設定します。
SunJCE プロバイダーをプロバイダーのリストに追加します。
/subsystem=elytron/provider-loader=SunJCE:add(class-names=[com.sun.crypto.provider.SunJCE])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.jarBouncyCastle プロバイダーのプロバイダーローダーを追加します。
構文
/subsystem=elytron/provider-loader=<provider_loader_name>:add(module=org.bouncycastle.fips)例
/subsystem=elytron/provider-loader=exampleProviderLoader:add(module=org.bouncycastle.fips)アグリゲートプロバイダーに、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])注記プロバイダーはコマンドで定義されている順序で呼び出されます。
サーバーをリロードします。
reload
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)
検証
クレデンシャルストアにエイリアスを追加します。
構文
/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)クレデンシャルストアのエイリアスを一覧表示します。
構文
/subsystem=elytron/credential-store=<credential_store_name>:read-aliases()例
/subsystem=elytron/credential-store=exampleFipsCredentialStore:read-aliases() { "outcome" => "success", "result" => ["examplealias"] }
作成されたクレデンシャルストアは FIPS 140-2 に準拠しています。