1.11. SSL/TLS の追加の Elytron コンポーネント
一方向 SSL/TLS および双方向 SSL/TLS の設定に関する基本概念は以下のとおりです。
Elytron は SSL/TLS を設定するための追加のコンポーネントも提供します。
1.11.1. Ldap-key-store の使用
Ldap-key-store
を使用すると、LDAP サーバーに保存されているキーストアを使用できます。ldap-key-store
は key-store
と同じように使用できます。
Jakarta Management ObjectName を使用して LDAP 認証情報を復号化することはできません。代わりに、認証情報は認証情報ストアを使用してセキュア化できます。クレデンシャルストアの詳細は、Elytron のクレデンシャルストア を参照してください。
ldap-key-store
を作成して使用するには以下の手順に従います。
dir-context
を設定します。JBoss EAP から LDAP サーバーに接続するには、URL を指定する
dir-context
と、サーバーへの接続に使用するプリンシパルを設定する必要があります。例: dir-context
/subsystem=elytron/dir-context=exampleDC:add(url="ldap://127.0.0.1:10389", principal="uid=admin,ou=system", credential-reference={clear-text="secret"})
ldap-key-store
を設定します。ldap-key-store
を設定する場合は、LDAP サーバーへの接続に使用するdir-context
と、LDAP サーバーに保存されているキーストアの検索方法の両方を指定する必要があります。少なくとも、search-path
を指定する必要があります。例: ldap-key-store
/subsystem=elytron/ldap-key-store=ldapKS:add(dir-context=exampleDC, search-path="ou=Keystores,dc=wildfly,dc=org")
ldap-key-store
を使用します。ldap-key-store
を定義したら、key-store
を使用できるのと同じ場所で使用できます。たとえば、アプリケーションに 1 方向 SSL/TLS および 双方向 SSL/TLS を設定する際にはldap-key-store
を使用できます。
ldap-key-store
および他の Elytron コンポーネントの属性の完全リストは、Elytron サブシステムのコンポーネント を参照してください。
1.11.2. filtering-key-store の使用
Filtering-key-store
を使用すると、既存の key-store
からエイリアスのサブセットを公開し、key-store
を使用できる場所と同じ場所で使用できます。たとえば、キーストアに alias1
、alias2
、および alias3
が含まれ、alias1
および alias3
のみを公開する必要がある場合は、filtering-key-store
を使用することで複数の方法を利用できます。
filtering-key-store
を作成するには、以下の手順に従います。
key-store
を設定します。/subsystem=elytron/key-store=myKS:add(path=keystore.jks, relative-to=jboss.server.config.dir, credential-reference={clear-text=secret}, type=JKS)
filtering-key-store
を設定します。filtering-key-store
を設定するとき、フィルター処理を行うkey-store
と、key-store
からエイリアスをフィルター処理するためのalias-filter
を指定します。フィルターは、以下のいずれかの形式で指定できます。-
alias1,alias3
: 公開するエイリアスのコンマ区切りのリスト。 -
all:-alias2
: リスト表示されているものを除いた、キーストアのすべてのエイリアスを公開。 none:+alias1:+alias3
: リスト表示されるもの以外のエイリアスをキーストアに公開しない。この例では、コンマ区切りリストで
alias1
とalias3
を公開します。/subsystem=elytron/filtering-key-store=filterKS:add(key-store=myKS, alias-filter="alias1,alias3")
注記alias-filter
属性は、大文字と小文字を区別します。elytronAppServer
などの大文字・小文字を合わせたエイリアスまたは大文字のエイリアスの使用は一部のキーストアプロバイダーで認識されない可能性があるため、elytronappserver
などの小文字のエイリアスを使用することが推奨されます。
-
filtering-key-store
を使用します。filtering-key-store
を定義したら、key-store
を使用する場所と同じ場所で使用できます。たとえば、アプリケーションに 一方向 SSL/TLS および 双方向 SSL/TLS を設定する際にfiltering-key-store
を使用できます。
filtering-key-store
および他の Elytron コンポーネントの属性の完全リストは、Elytron サブシステムのコンポーネント を参照してください。
1.11.3. キーストアの再読み込み
JBoss EAP に設定されたキーストアは、管理 CLI からリロードできます。これは、キーストアが参照する証明書に変更を加えた場合に便利です。
キーストアをリロードするには、以下を実行します。
/subsystem=elytron/key-store=httpsKS:load
1.11.4. キーマネージャーの再初期化
JBoss EAP で設定された key-manager
は管理 CLI から再初期化できます。これは、キーストアリソースによって提供される証明書に変更を加え、サーバーを再起動せずにこの変更を新しい SSL 接続に適用する場合に役に立ちます。
key-store
がファイルベースの場合は、最初に読み込む必要があります。
/subsystem=elytron/key-store=httpsKS:load()
key-manager
を初期化するには、以下を実行します。
/subsystem=elytron/key-manager=httpsKM:init()
1.11.5. トラストマネージャーの再初期化
管理 CLI または管理コンソールから JBoss EAP で設定された trust-manager
を再初期化できます。これは、キーストアリソースによって提供される証明書に変更を加え、サーバーを再起動せずに新しい SSL 接続に変更を適用する必要がある場合に役立ちます。
管理 CLI からの信頼マネージャーの再初期化
key-store
がファイルベースの場合は、最初に読み込む必要があります。
/subsystem=elytron/key-store=httpsKS:load()
trust-manager
を再初期化するには、以下を実行します。
/subsystem=elytron/trust-manager=httpsTM:init()
管理コンソールからのトラストマネージャーの再初期化
- 管理コンソールに移動し、Runtime タブをクリックします。
- Monitor 列の Security (Elytron) をクリックします。
-
Security の列で、SSL
View の順にクリックします。 - ナビゲーションペインで、Trust Manager をクリックします。
-
画面右上の Initialize をクリックして、
trust-manager
を再初期化します。
1.11.6. キーストアエイリアス
alias
は、ストアに保存されているシークレットまたは認証情報を示します。key-store
コンポーネントを使用してキーストアを elytron
サブシステムに追加する場合は、alias
関連の key-store
操作を使用してキーストアの内容を確認できます。
エイリアスの各種操作は次のとおりです。
-
read-alias
- キーストアからエイリアスを読み取ります。 -
read-aliases
- キーストアからエイリアスを読み取ります。 -
remove-alias
- キーストアからエイリアスを削除します。
たとえば、エイリアスを読み取るには、次を実行します。
/subsystem=elytron/key-store=httpsKS/:read-alias(alias=localhost)
1.11.7. client-ssl-context の使用
client-ssl-context
は、JBoss EAP インスタンスが SSL 接続をクライアントとして作成する際に SSL コンテキストを提供するために使用されます (リモーティングで SSL を使用するなど)。
client-ssl-context
を作成するには、以下の手順に従います。
必要に応じて、
key-store
、key-manager
、およびtrust-manager
コンポーネントを作成します。双方向 SSL/TLS 接続を確立する場合は、クライアント証明書とサーバー証明書用の別の
key-store
コンポーネント、クライアントkey-store
用のkey-manager
、およびサーバーkey-store
用のtrust-manager
を作成する必要があります。または、一方向 SSL/TLS 接続を行う場合は、サーバー証明書のkey-store
と、それを参照するtrust-manager
を作成する必要があります。キーストアおよびトラストストアの作成例は、Elytron サブシステムを使用してアプリケーションに対して双方向 SSL/TLS を有効化する セクションで参照できます。client-ssl-context
を作成します。キーストア、トラストストア、およびその他の必要な設定オプションを参照する
client-ssl-context
を作成します。例: client-ssl-context
/subsystem=elytron/client-ssl-context=exampleCSC:add(key-manager=clientKM, trust-manager=clientTM, protocols=["TLSv1.2"])
-
client-ssl-context
を参照します。
client-ssl-context
および他の Elytron コンポーネントの属性の完全リストは、Elytron サブシステムのコンポーネント を参照してください。
1.11.8. server-ssl-context の使用
server-ssl-context
は、サーバー側の SSL コンテキストを提供するために使用されます。SSL コンテキストの通常の設定の他に、暗号化スイートやプロトコルなどの追加項目を設定することが可能です。SSL コンテキストは、設定された追加項目をラップします。
必要に応じて、
key-store
、key-manager
、およびtrust-manager
コンポーネントを作成します。双方向 SSL/TLS 接続を確立する場合は、クライアント証明書とサーバー証明書用の別の
key-store
コンポーネント、サーバーkey-store
用のkey-manager
、およびサーバーtrust-store
用のtrust-manager
を作成する必要があります。または、一方向 SSL/TLS 接続を行う場合は、サーバー証明書のkey-store
と、それを参照するkey-manager
を作成する必要があります。キーストアおよびトラストストアの作成例は、Elytron サブシステムを使用してアプリケーションに対して双方向 SSL/TLS を有効化する セクションで参照できます。server-ssl-context
を作成します。キーマネージャー、トラストマネージャー、またはその他の必要な設定オプションを参照する
server-ssl-context
を以下のオプションのいずれかを使用して作成します。
管理 CLI を使用したサーバー SSL コンテキストの追加
/subsystem=elytron/server-ssl-context=newServerSSLContext:add(key-manager=KEY_MANAGER,protocols=["TLSv1.2"])
対応する HTTPS プロトコルを決定する必要があります。上記のコマンド例は TLSv1.2
を使用します。cipher-suite-filter
引数を使用して、許可される暗号スイートを指定でき、use-cipher-suites-order
引用して、サーバーの暗号スイートの順序を許可します。use-cipher-suites-order
属性はデフォルトで true
に設定されます。これは、レガシー security
サブシステムの動作とは異なります。その動作は、デフォルトで、クライアント暗号スイートの順序を許可します。
管理コンソールを使用したサーバー SSL コンテキストの追加
- 管理コンソールにアクセスします。詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
-
Configuration → Subsystems
Security (Elytron) Other Settings と選択し、表示 をクリックします。 -
SSL
Server SSL Context の順にクリックし、Add をクリックして新しいサーバー SSL コンテキストを設定します。
server-ssl-context
および他の Elytron コンポーネントの属性の完全リストは、Elytron サブシステムのコンポーネント を参照してください。
1.11.9. server-ssl-sni-context の使用
server-ssl-sni-context
は、サーバー側の SNI 一致を提供するために使用されます。与えられたホスト名がいずれも一致しない場合のデフォルトとともに、ホスト名を SSL コンテキストに関連付けるためのマッチングルールを利用できます。SSL SNI コンテキストは、undertow
サブシステムでコンテキストを定義する場合など、標準のサーバー SSL コンテキストの代わりに使用できます。
-
必要に応じて
key-store
、key-manager
、trust-manager
、およびserver-ssl-context
コンポーネントを作成します。server-ssl-sni-context
を作成するには、サーバー SSL コンテキストが定義されている必要があります。 server-ssl-context
要素に一致する情報を提供するserver-ssl-sni-context
を作成します。デフォルトの SSL コンテキストは、default-ssl-context
属性を使用して指定する必要があります。これは、一致しないホスト名が見つかった場合に使用されます。host-context-map
は、さまざまな SSL コンテキストの一致に、コンマ区切りのホスト名リストを受け入れます。/subsystem=elytron/server-ssl-sni-context=SERVER_SSL_SNI_CONTEXT:add(default-ssl-context=DEFAULT_SERVER_SSL_CONTEXT,host-context-map={HOSTNAME=SERVER_SSL_CONTEXT,...})
以下を使用して
server-ssl-sni-context
を定義します。これはserverssl SSL
コンテキストにデフォルト設定され、www.example.com
の着信リクエストをexampleSSL
コンテキストに一致させます。/subsystem=elytron/server-ssl-sni-context=exampleSNIContext:add(default-ssl-context=serverSSL,host-context-map={www\\.example\\.com=exampleSSL})
ホストのマッチングの属性値は正規表現として機能します。そのため、ドメイン名の区切りに使用されるピリオド (.) をエスケープしてください。
管理コンソールを使用した server-ssl-sni-context の設定
- 管理コンソールにアクセスします。詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
-
Configuration → Subsystems
Security (Elytron) Other Settings と選択し、表示 をクリックします。 -
SSL
Server SSL SNI Context の順にクリックして、必要な ssl-sni-context
を設定します。
Elytron コンポーネントの属性の完全リストは、Elytron サブシステムのコンポーネント を参照してください。
1.11.10. カスタム SSL コンポーネント
elytron
サブシステムで SSL/TLS を設定する場合は、以下のコンポーネントのカスタム実装を提供および使用できます。
-
key-store
-
key-manager
-
trust-manager
-
client-ssl-context
-
server-ssl-context
Java Secure Socket Extension (JSSE) の詳しい知識がない場合は、trust-manager
以外のコンポーネントのカスタム実装を提供することは推奨されません。
FIPS を使用する場合は、カスタムトラストマネージャーまたはキーマネージャーを使用できません。これは、FIPS では、セキュリティー上の理由から、これらのマネージャーを JDK に組み込む必要があるためです。同様に、X509 エビデンスを検証する SecurityRealm
を実装して、同様の動作を実現できます。
Elytron コンポーネントのカスタム実装を作成する場合、それらは適切な機能と要件を提供する必要があります。機能と要件の詳細は、JBoss EAPセキュリティーアーキテクチャーガイドの 性能および要件 セクションを参照してください。各コンポーネントの実装の詳細は、JDK ベンダーによって提供されます。
1.11.10.1. カスタムコンポーネントの Elytron への追加
以下の手順では、Elytron 内でカスタムコンポーネントを追加する方法について説明します。
カスタムコンポーネントのプロバイダーが含まれる JAR をモジュールとして JBoss EAP に追加し、
javax.api
などの必要な依存関係を宣言します。module add --name=MODULE_NAME --resources=FACTORY_JAR --dependencies=javax.api,DEPENDENCY_LIST
重要module
管理 CLI コマンドを使用したモジュールの追加および削除は、テクノロジープレビューとしてのみ提供されます。このコマンドは、マネージドドメインでの使用や、リモートによる管理 CLI への接続時には適していません。本番環境では、モジュールを手作業で追加および削除する必要があります。詳細は、JBoss EAP設定ガイドの カスタムモジュールの手動作成 および 手作業によるカスタムモジュールの削除 を参照してください。テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
コンポーネントが
elytron
サブシステムに追加されると、java.util.ServiceLoader
がプロバイダー検出に使用されます。または、provider-loader
を定義してプロバイダーへの参照を指定することもできます。ローダーを作成する方法は 2 つあります。各コンポーネントには、1 つずつのみ実装する必要があります。provider-loader
を定義する際にプロバイダーを直接参照します。/subsystem=elytron/provider-loader=LOADER_NAME:add(class-names=[CLASS_NAME],module=MODULE_NAME)
META-INF/services/java.security.Provider
にプロバイダーへの参照を含めます。この参照は、org.kohsuke.metainf-services
で@MetaInfServices
アノテーションを使用する際に自動的に作成されます。この方法を使用する場合は、以下のようにprovider-loader
からモジュールのみを参照する必要があります。/subsystem=elytron/provider-loader=LOADER_NAME:add(module=MODULE_NAME)
定義したプロバイダーを追加および参照するタイプに適切な要素を使用して、カスタムコンポーネントを Elytron の設定に追加します。
/subsystem=elytron/COMPONENT_NAME=NEW_COMPONENT:add(providers=LOADER_NAME,...)
たとえば、トラストマネージャーを定義するには、以下のコマンドにあるように
trust-manager
要素が使用されます。例: カスタム信頼マネージャーの追加
/subsystem=elytron/trust-manager=newTrustManager:add(algorithm=MyX509,providers=customProvider,key-store=sampleKeystore)
- 定義が完了すると、コンポーネントは他の要素から参照できるようになります。
関連情報
- 詳しくは モジュールと依存関係 を参照してください。
1.11.10.2. カスタム Elytron コンポーネントに引数を含める
以下に示すように、クラスが initialize
メソッドを実装している場合は、カスタムコンポーネントに引数を含めることができます。
void initialize(final Map<String, String> configuration);
このメソッドにより、定義時にカスタムクラスが設定文字列のセットを受け取ることができます。これらは、コンポーネントを定義する際に configuration
属性を使用して渡されます。たとえば、以下の例では、myValue
の値を持つ myAttribute
という名前の属性を定義します。
/subsystem=elytron/COMPONENT_NAME=NEW_COMPONENT:add(class-name=CLASS_NAME,module=MODULE_NAME,configuration={myAttribute="myValue"}
1.11.10.3. Elytron でのカスタムトラストマネージャーの使用
カスタムトラストマネージャーを実装することで、Undertow で HTTPS、dir-context
で LDAPS を使用する際、または Elytron が SSL 接続に使用される場所において、証明書の検証を拡張できます。このコンポーネントは、サーバーの信頼決定を行います。また、カスタムトラストマネージャーが使用される場合は、これらを実装することが強く推奨されます。
FIPS を使用する場合、カスタムトラストマネージャーは利用できません。これは、FIPS では、セキュリティー上の理由から、これらのマネージャーを JDK に組み込む必要があるためです。同様に、X509 エビデンスを検証する SecurityRealm
を実装して、同様の動作を実現できます。
カスタムストラストマネージャーの実装要件
カスタムトラストマネージャーを使用する場合は、以下を実装する必要があります。
-
X509ExtendedTrustManager
インターフェイスを実装するトラストマネージャー。 -
TrustManagerFactorySpi
を拡張するトラストマネージャーファクトリー。 - トラストマネージャーファクトリーのプロバイダー。
JBoss EAP に追加するには、プロバイダーを JAR ファイルに含める必要があります。実装されたクラスはモジュールとして JBoss EAP に組み込む必要があります。 クラスはモジュールに置く必要はなく、モジュールの依存関係から読み込むことができます。
実装例
以下の例は、カスタムトラストマネージャーファクトリーをサービスとして登録するプロバイダーを示しています。
例: プロバイダー
import org.kohsuke.MetaInfServices; import javax.net.ssl.TrustManagerFactory; import java.security.Provider; import java.util.Collections; import java.util.List; import java.util.Map; @MetaInfServices(Provider.class) public class CustomProvider extends Provider { public CustomProvider() { super("CustomProvider", 1.0, "Demo provider"); System.out.println("CustomProvider initialization."); final List<String> emptyList = Collections.emptyList(); final Map<String, String> emptyMap = Collections.emptyMap(); putService(new Service(this, TrustManagerFactory.class.getSimpleName(),"CustomAlgorithm", CustomTrustManagerFactorySpi.class.getName(), emptyList, emptyMap)); } }
以下の例は、カスタムトラストマネージャーを示しています。このトラストマネージャーには、クライアントまたはサーバーが信頼できるかどうかを確認するためのオーバーロードメソッドが含まれています。
例: TrustManager
import javax.net.ssl.SSLEngine; import javax.net.ssl.X509ExtendedTrustManager; import java.net.Socket; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class CustomTrustManager extends X509ExtendedTrustManager { public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException { // Insert your code here } public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException { // Insert your code here } public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException { // Insert your code here } public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException { // Insert your code here } public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { // Insert your code here } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { // Insert your code here } public X509Certificate[] getAcceptedIssuers() { // Insert your code here } }
以下の例は、トラストマネージャーのインスタンスを返すために使用されるファクトリーです。
例: TrustManagerFactorySpi
import javax.net.ssl.ManagerFactoryParameters; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactorySpi; import java.security.InvalidAlgorithmParameterException; import java.security.KeyStore; import java.security.KeyStoreException; public class CustomTrustManagerFactorySpi extends TrustManagerFactorySpi { protected void engineInit(KeyStore keyStore) throws KeyStoreException { // Insert your code here } protected void engineInit(ManagerFactoryParameters managerFactoryParameters) throws InvalidAlgorithmParameterException { // Insert your code here } protected CustomTrustManager[] engineGetTrustManagers() { // Insert your code here } }
カスタムトラストマネージャーの追加
プロバイダーおよびトラストマネージャーを作成したら、カスタムコンポーネントの Elytron への追加 の手順を使用して elytron
サブシステムに追加します。
1.11.11. デフォルトの SSLContext
デプロイメント内で使用されるライブラリーの多くは、確立する接続に SSL 設定が必要になる場合があります。これらのライブラリーは呼び出し元によって設定可能な傾向があります。設定が指定されていない場合、それらはデフォルトの SSLContext
をプロセスに使用します。
デフォルトの SSLContext
は以下のメソッド呼び出しを使用して利用できます。
javax.net.ssl.SSLContext.getDefault();
デフォルトでは、この SSLContext
はシステムプロパティーを使用して設定されます。ただし、elytron
サブシステム内では、設定したコンテキストのいずれかを割り当て、デフォルトとして使用するように指定できます。
この機能を使用するには、通常通りに SSLContext
を設定します。以下のコマンドを使用することで、デフォルトとして使用する SSLContext
を指定できます。
/subsystem=elytron:write-attribute(name=default-ssl-context, value=client-context)
既存のサービスおよびデプロイメントは、これを設定する前にデフォルトの SSLContext
をキャッシュする可能性があります。そのため、デプロイメントをアクティベートする前にデフォルトが設定されるようリロードが必要となります。
:reload
default-ssl-context
属性が続いて undefined
である場合、標準 API はデフォルトを元に戻すメカニズムを提供しません。この場合、Java プロセスを再起動する必要があります。
/subsystem=elytron:undefine-attribute(name=default-ssl-context) { "outcome" => "success", "response-headers" => { "operation-requires-restart" => true, "process-state" => "restart-required" } }
1.11.12. 証明書失効リストの使用
証明書失効リスト (CRL) に対して証明書を検証する場合は、elytron
サブシステムのトラストマネージャーに certificate-revocation-list
属性を使用してこれを設定できます。以下に例を示します。
/subsystem=elytron/trust-manager=TRUST_MANAGER:write-attribute(name=certificate-revocation-list,value={path=/path/to/CRL_FILE.crl.pem}
トラストマネージャーで使用できる属性の詳細は、trust-manager
属性表 を参照してください。
証明書失効リストと証明書の両方の有効性を確認するには、トラストストアに証明書チェーンが含まれている必要があります。トラストストアには、認証局および中間証明書のみを含むエンドエンティティー証明書を含めることができません。
reload-certificate-revocation-list
操作を使用すると、トラストマネージャーに証明書失効リストを再読み込みするよう指示できます。
/subsystem=elytron/trust-manager=TRUST_MANAGER:reload-certificate-revocation-list
1.11.13. 認証局を使用した署名証明書の管理
JBoss EAP 管理 CLI と管理コンソールを使用すると、署名済み証明書を取得および管理できます。これにより、CLI またはコンソールから直接署名済み証明書を作成し、必要なキーストアにインポートできます。
このセクションのコマンドの多くには、認証局のステージング URL を使用するかどうかを示すオプションの staging
パラメーターがあります。デフォルト値は false
で、テストを支援するように設計されています。このパラメーターは、実稼働環境では有効にしないでください。
Let's Encrypt アカウントの設定
JBoss EAP 7.4 より、Let's Encrypt が唯一対応している認証局となりました。署名付き証明書を管理するには、認証局でアカウントを作成し、以下の情報を指定する必要があります。
- 認証局アカウントキーのエイリアスを含むキーストア。
- 認証局のエイリアス。指定されたエイリアスが指定のキーストアに存在しない場合は、エイリアスが作成され、プライベートキーエントリーとして保存されます。
- 問題が起きた場合に認証局が連絡できる、メールアドレスなどの URL オプションのリストです。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:add(key-store=KEYSTORE,alias=ALIAS,contact-urls=[mailto:EMAIL_ADDRESS])
認証局でアカウントを作成します。
アカウントが設定されたら、サービスの条件に同意して認証局で作成できます。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:create-account(agree-to-terms-of-service=true)
認証局でアカウントを作成します。
認証局アカウントオプションは、update-account
コマンドを使用して更新できます。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:update-account(agree-to-terms-of-service=true)
認証局に関連付けられたアカウントキーの変更
認証局アカウントに関連付けられたキーは、change-account-key
コマンドを使用して変更できます。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:change-account-key()
認証局を使用したアカウントの非アクティブ化
このアカウントが不要になった場合は、deactivate-account
コマンドを使用して非アクティブ化できます。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:deactivate-account()
認証局に関連付けられたメタデータを取得します。
アカウントのメタデータは、get-metadata
コマンドでクエリーできます。これにより、以下の情報が表示されます。
- サービス用語への URL。
- 認証局の Web サイトへの URL。
- 認証局アカウントのリスト。
- 外部アカウントが必要であるかどうか。
/subsystem=elytron/certificate-authority-account=CERTIFICATE_ACCOUNT:get-metadata()
管理コンソールを使用した Let's Encrypt アカウントの設定
管理コンソールを使用して Let's Encrypt アカウントを設定するには、以下の手順に従います。
管理コンソールにアクセスします。
詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
-
Runtime
Host Security (Elytron) SSL の順に選択し、View をクリックします。 - Certificate Auth… をクリックして、Certificate Authority Account ページを開きます。
ラベルの付いたボタンをクリックすると、選択したエイリアスに対して以下の設定を実行できます。
Create
認証局でアカウントを作成します。
Deactivate
選択した認証局アカウントを無効化します。
Update
選択したアカウントを認証局で更新します。
Get Metadata
認証局アカウントについての以下の情報を表示します。
- 関連するエイリアス
- 認証局の名前
- 連絡先の詳細
- キーストア名
- 認証局の詳細
Change Account Key
- 認証局で関連する鍵を変更します。
1.11.14. キーストアの操作
管理 CLI および管理コンソールを使用すると、Elytron key-store
リソースでさまざまなキーストア操作を実行できます。
管理 CLI を使用したキーストア操作
管理 CLI を使用すると、以下のキーストア操作を実行できます。
キーペアを生成します。
generate-key-pair
コマンドは、キーペアを生成し、生成された公開鍵を自己署名の X.509 証明書にラップします。生成された秘密鍵と自己署名証明書がキーストアに追加されます。/subsystem=elytron/key-store=httpsKS:add(path=/path/to/server.keystore.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=httpsKS:generate-key-pair(alias=example,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=www.example.com")
証明書の署名要求を生成します。
generate-certificate-signing-request
コマンドは、キーストアからPrivateKeyEntry
を使用して PKCS #10 証明書署名要求を生成します。生成される証明書署名要求はファイルに書き込まれます。/subsystem=elytron/key-store=httpsKS:generate-certificate-signing-request(alias=example,path=server.csr,relative-to=jboss.server.config.dir,distinguished-name="CN=www.example.com",extensions=[{critical=false,name=KeyUsage,value=digitalSignature}],credential-reference={clear-text=secret})
証明書または証明書チェーンをインポートします。
Import-certificate
コマンドは、ファイルからキーストアのエントリーに、証明書チェーンまたは証明書チェーンをインポートします。/subsystem=elytron/key-store=httpsKS:import-certificate(alias=example,path=/path/to/certificate_or_chain/file,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},trust-cacerts=true)
証明書をエクスポートします。
export-certificate
コマンドは、キーストアのエントリーからファイルに証明書をエクスポートします。/subsystem=elytron/key-store=httpsKS:export-certificate(alias=example,path=serverCert.cer,relative-to=jboss.server.config.dir,pem=true)
エイリアスを変更します。
change-alias
コマンドは、既存のキーストアエントリーを新しいエイリアスに移動します。/subsystem=elytron/key-store=httpsKS:change-alias(alias=example,new-alias=newExample,credential-reference={clear-text=secret})
キーストアに加えられた変更を保存します。
store
コマンドは、キーストアをサポートするファイルに加えられた変更をすべて保持します。/subsystem=elytron/key-store=httpsKS:store()
管理コンソールを使用したキーストア操作
管理コンソールを使用して操作を実行するには、以下を実行します。
管理コンソールにアクセスします。
詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
-
Runtime
Security (Elytron) Stores の順に選択し、View をクリックします。 - Key Store をクリックし、キーストア定義ページを開きます。
必要なキーストア名をクリックします。
ラベルの付いたボタンをクリックすると、選択したキーストアに対して以下の操作を実行できます。
Load
キーストアをロードまたは再読み込みします。
Store
キーストアをサポートするファイルに加えられた変更が永続化されます。
Generate Key Pair
キーペアを生成し、公開鍵を自己署名の X.509 証明書でラップし、秘密鍵と証明書をキーストアに追加します。
Import Certificate
ファイルからキーストアに証明書チェーンをインポートします。
Obtain
認証局から署名済み証明書を取得し、キーストアに保存します。
1.11.14.1. キーストア認証局の操作
Let's Encrypt アカウントの設定 を行うことで、キーストアで以下の操作を行うことができます。
このセクションのコマンドの多くには、認証局のステージング URL を使用するかどうかを示すオプションの staging
パラメーターがあります。デフォルト値は false
で、テストを支援するように設計されています。このパラメーターは、実稼働環境では有効にしないでください。
管理 CLI を使用したキーストア認証局の操作
管理 CLI を使用することで、以下のキーストアの認証局操作を実行できます。
署名済み証明書を取得します。
キーストアに認証局アカウントを定義したら、
obtain-certificate
コマンドを使用して署名済み証明書を取得し、キーストアに保存できます。認証局のアカウントが存在しない場合は、自動的に作成されます。/subsystem=elytron/key-store=KEYSTORE:obtain-certificate(alias=ALIAS,domain-names=[DOMAIN_NAME],certificate-authority-account=CERTIFICATE_ACCOUNT,agree-to-terms-of-service=true,algorithm=RSA,credential-reference={clear-text=secret})
署名付きの証明書を取り消します。
revoke-certificate
コマンドは、認証局が発行した証明書を取り消します。/subsystem=elytron/key-store=KEYSTORE:revoke-certificate(alias=ALIAS,certificate-authority-account=CERTIFICATE_ACCOUNT)
署名付き証明書が更新時かどうかを確認します。
should-renew-certificate
コマンドは、証明書が更新時かどうかを確認します。このコマンドは、証明書の期限切れ日数が指定日数を下回る場合にtrue
を返し、それ以外の場合はfalse
を返します。以下のコマンドは、次の 7 日間で証明書の有効期限が切れるかどうかを判断します。
/subsystem=elytron/key-store=KEYSTORE:should-renew-certificate(alias=ALIAS,expiration=7)
管理コンソールを使用したキーストア認証局の操作
管理コンソールを使用して操作を実行するには、以下を実行します。
管理コンソールにアクセスします。
詳細は、JBoss EAP設定ガイド の 管理コンソール を参照してください。
-
Runtime
Security (Elytron) Stores の順に選択し、View をクリックします。 - Key Store をクリックし、キーストア定義ページを開きます。
- 必要なキーストア名の隣の Aliases をクリックします。
必要なエイリアス名をクリックします。
ラベルの付いたボタンをクリックすると、選択したエイリアスに対して以下の操作を実行できます。
Change Alias
エントリーのエイリアスを変更します。
Export Certificate
キーストアのエントリーからファイルに証明書をエクスポートします。
Generate CSR
証明書の署名要求を生成します。
Remove Alias
選択したエイリアスをキーストアから削除します。
Details
エイリアスに関連付けられた証明書の詳細を表示します。
Revoke
エイリアスに関連付けられた証明書を取り消します。
Verify Renew
関連付けられた証明書の更新時かどうかを判断します。
1.11.15. サブジェクトの別名拡張を使用した X.509 証明書の Evidence Decoder の設定
デフォルトでは、Elytron の X.509 証明書に関連するプリンシパルは証明書のサブジェクト名です。また、X.509 証明書チェーンに関連付けられたプリンシパルは証明書チェーンの最初の証明書のサブジェクト名になります。X.509 証明書のサブジェクトの別名エクステンションをプリンシパルとして使用するように X509-subject-alt-name-evidence-decoder
を設定できます。
X.509 証明書および X.509 証明書チェーンのサブジェクトの別名拡張仕様は、RFC 5280 で定義されています。
前提条件
- クライアント証明書の想定形式が分かっているか、ローカルで利用可能なクライアント証明書がある。
手順
使用するサブジェクトの別名エクステンションを特定します。
クライアント証明書がローカルにある場合は、
keytool
コマンドを使用してサブジェクトの別名の拡張子を表示できます。keytool -printcert -file /path/to/certificate/certificate.cert
サブジェクトの別名の拡張子は、以下のようにリスト表示されています。
SubjectAlternativeName [ DNS:one.example.org IP Address:127.0.0.1 ]
識別されたサブジェクトの代替名を使用するために、
x509-subject-alt-name-evidence-decoder
を作成します。/subsystem=elytron/x509-subject-alt-name-evidence-decoder=exampleDnsDecoder:add(alt-name-type=__EXTENSION_TO_USE__)
エビデンスデコーダーを使用するには、security-domain で参照します。
/subsystem=elytron/security-domain=__Security_Domain_Name__:write-attribute(name="evidence-decoder",value="exampleDnsDecoder")
1.11.16. 集約エビデンスデコーダーの設定
2 つ以上のエビデンスデコーダーを組み合わせるように集約エビデンスデコーダーを設定できます。エビデンスデコーダーが null 以外のプリンシパルを返すまで、もしくは試行するエビデンスデコーダーがなくなるまで、設定された順序でエビデンスデコーダーが適用されます。
前提条件
集約されるエビデンスデコーダーが設定されます。
エビデンスデコーダーの設定は、サブジェクトの別名拡張を使用した X.509 証明書の Evidence Decoder の設定 を参照してください。
手順
既存のエビデンスデコーダーから集約エビデンスデコーダーを作成します。
/subsystem=elytron/aggregate-evidence-decoder=aggregateDecoder:add(evidence-decoders=[__DECODER_1__,__DECODER_2__,...,__DECODER_N__])
エビデンスデコーダーを使用するには、セキュリティードメインで参照します。
/subsystem=elytron/security-domain=__SECURITY_DOMAIN__:write-attribute(name="evidence-decoder",value="aggregateDecoder")
1.11.17. X.500 サブジェクトエビデンスデコーダーの設定
x500-subject-evidence-decoder
を設定して、証明書チェーンの最初の証明書からサブジェクトを抽出します。
手順
x.500 サブジェクトエビデンスデコーダーを作成します。
/subsystem=elytron/x500-subject-evidence-decoder=exampleSubjectDecoder:add()
1.11.18. カスタムエビデンスデコーダー実装の使用
Elytron でカスタム org.wildfly.security.auth.server.EvidenceDecoder
実装を使用するには、JBoss EAP にモジュールとして追加します。
手順
- カスタム実装クラスを Java Archive (JAR) としてパッケージ化します。
JAR を含む JBoss EAP にモジュールを追加します。
JBoss EAP にモジュールを追加する方法は、設定ガイドの カスタムモジュールの作成 を参照してください。
カスタムエビデンスデコーダーを Elytron に追加します。
/subsystem=elytron/custom-evidence-decoder=myCustomEvidenceDecoder:add(module=__MODULE_NAME__, class-name=__FULLY_QUALIFIED_CLASS_NAME__)