Red Hat Training
A Red Hat training course is available for Red Hat JBoss Operations Network
4.2. サーバーおよびエージェント間のクライアント認証の設定
認証 は、何かのアイデンティティーを検証するプロセスです。証明書ベースの認証では、エンティティーはそのエンティティーを識別するために使用される信頼されたソースから証明書ファイルを取得し、SSL 接続を開始する際にそのエンティティーを特定します。これにより、SSL 接続に関与する唯一の参加者が、そのユーザーであると判断されます。
JBoss ON に証明書ベースの認証を設定するには、複数の手順を実行する必要があります。暗号化を有効にするには、JBoss ON のサーバーおよびエージェントに対して証明書を発行および保存する必要があります。また、信頼できないクライアントからのメッセージを拒否するようサーバーおよびエージェントを設定する必要があります。
JBoss ON の SSL 認証は 双方向 です。エージェントはサーバーに対して認証するよう設定され、サーバーはエージェントに対して認証するように設定されます。
注記
サーバーまたはエージェントのみが認証する必要がある一方向認証を設定できます。最善のセキュリティーは双方向認証を使用したものです。これはここで説明する設定です。
JBoss ON には、SSL 接続を許可するトランスポートメソッドが 2 つ sslservlet あり sslsocketます。
以下の手順では sslsocket、サーバーエージェント SSL 接続に特別なポートが使用される一方で、GUI 接続にデフォルトの指定ポートを使用できるようにします。
sslservlet は組み込みの Tomcat サーバーを利用しますが、GUI ユーザーがサーバーへの認証と、エージェントの証明書ベースの認証を有効にする必要があります。
これを行うには、ブラウザーが使用するセキュアで認証されていない https コネクターを提供する JON Server の Tomcat 設定に別の Web コネクターを追加する必要があります。
この新しい Web コネクターを追加したら、ユーザーはそのコネクターのポート(例: https://your-server-hostname:9443)に接続し、証明書の認証なしに https を使用して JON GUI にアクセスできます。
これにより、元のセキュアな Tomcat コネクターは、証明書が認証されたエージェント要求を受け入れるために解放されます。
このような Web コネクターは、にある JBoss EAP CLI を使用して追加でき
JBOSS_HOME/bin/jboss-cli.\[sh,bat]
ます。
たとえば、ポート 9443 に新しい Web コネクターを追加するには、最初に JBoss CLI を使用してそのポート 9443 の新しいソケットバインディングを作成し、その新しいソケットバインディングを使用して新しい Web コネクターを作成します。
手順4.1 (オプション)新しい Tomcat Web コネクターの追加
jboss-cli.sh --controller=127.0.0.1:6999 --connect --command='/socket-binding-group=standard-sockets/socket-binding=httpsbrowser/:add(port=9443)'
jboss-cli.sh --controller=127.0.0.1:6999 --connect --command='/subsystem=web/connector=httpsbrowser/:add(socket-binding=httpsbrowser,scheme=https,protocol=HTTP/1.1,secure=true,enabled=true)'
jboss-cli.sh --controller=127.0.0.1:6999 --connect --command='/subsystem=web/connector=httpsbrowser/ssl=configuration:add(name=ssl,verify-client=false,key-alias=RHQ,password=${VAULT::restricted::rhq.server.tomcat.security.keystore.password::5fb458952ebdaa86aa0b4e8d3eac5d13},certificate-key-file=${jboss.server.config.dir}/rhq.keystore,certificate-file=${jboss.server.config.dir}/rhq.keystore'
- JBoss ON サーバーの再起動
rhqctl restart --server
注記
上記の手順では、JON のキーストアにある自己署名証明書を使用する場合に SSL 設定を作成します。証明書(特に自己署名なしの証明書)を使用することが推奨されます。独自のキーストア情報を使用するには、上記の手順(具体的には key-alias、password、certificate-key-file、および certificate-file の値)で変更します。
手順4.2 サーバーとエージェント間のクライアント認証の設定
- にあるように暗号化を有効にします。これは 「暗号化の設定」、クライアント認証が無効になら ない ようにします。
- SSL ソケット接続は、ユーザー定義のポートで行われます。必要に応じて、ファイアウォールまたは VPN を開き、そのポートへのアクセスを許可します。
- 各 JBoss ON サーバーおよびエージェントの SSL 証明書を生成します。例:
keytool -genkey -dname "CN=server1.example.com" -keystore server1-keystore.dat -validity 3650 -alias server1 -keyalg RSA -storetype JKS -keypass secret -storepass secret
これにより、以下の特徴を持つ自己署名証明書が作成されます。- サーバーのホスト名と同じ共通名(CN)値 server1.example.com。この
-dname
値は、SSL 接続の初期ステップ(SSL ハンドシェイク)において、証明書を発行したアイデンティティーと同じものであることを確認するため、ホスト名と同じ値である必要があります。つまり、CN のホスト名と、証明書を示すサーバーまたはエージェントのホスト名が一致します。 - 「キーストアファイル」
server1-keystore.dat
- 有効期間(3650 日)
- エイリアス server1
- RSA の鍵アルゴリズム
- キーストアの JKS 形式で保存
- のキーおよびストレージのパスワード secret
組織では、証明書の生成または取得にすでに方法がある場合があります。この例では、他のユーティリティーを使用することも certutilできます keytool。他のユーティリティーも使用できます。この keytool ドキュメントは、http://java.sun.com/javase/6/docs/technotes/tools/windows/keytool.html の Oracle-Sun サイトから入手でき ます。 - 各自己署名証明書を単一のトラストストアファイルに配置します。
- 各キーストアから自己署名証明書をエクスポートします。
keytool
-export
-keystore server1-keystore.dat -alias server1 -storetype JKS -storepass secret-file server1-cert
- すべての証明書を単一のトラストストアファイルにインポートします。
keytool
-import
-keystore truststore.dat -alias server1 -storetype JKS-file server1-cert
-noprompt -keypass secret -storepass secret-alias
は、トラストストアのインポートされた証明書に付与する名前です。便宜上、これは元のキーストアファイルのエイリアスと同じです。重要エクスポートしたすべてのサーバー証明書とエージェント証明書を、同じトラストストアファイル に インポートします。 - を使用して証明書を一覧表示し、すべての証明書が正常 keytool にインポートされたことを確認します。
keytool -list -keystore truststore.dat -storepass secret -storetype JKS Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entries server1, Feb 25, 2017, trustedCertEntry, Certificate fingerprint (MD5): 24:D9:8A:50:BA:1B:26:08:DC:44:A8:2A:9E:8A:43:D9
- キーストアとトラストストアファイルをすべての JBoss ON およびサーバーマシンおよびエージェントマシンに分散します。キーストアは、証明書の CN のホスト名に一致するマシンにのみ配布し、キーストアを誤ったマシンに追加すると、SSL 接続が失敗します。
- サーバーでは、キーストア(
server1-keystore.dat
)を JBoss Operations Network サーバーに埋め込まれた JBoss AS サーバーのjon-server-version/jbossas/standalone/configuration/
ディレクトリーにコピーします。server1-keystore.dat
に変更しkeystore.dat
ます。 - サーバーでは、トラストストアを組み込み JBoss AS サーバーの
serverRoot/jon-server-3.3.0.GA/jbossas/standalone/configuration/
ディレクトリーにコピーします。このファイルに名前を付けてくださいtruststore.dat
。 - エージェントの場合は、キーストアを
agentRoot/rhq-agent/conf
ディレクトリーにコピーします。agentRoot/rhq-agent/conf
ディレクトリーの証明書ファイルは、自動更新後も保持されます。
- JBoss ON サーバーをシャットダウンします。
serverRoot/jon-server-3.3.0.GA/bin/rhqctl.sh stop
- JBoss ON サーバーの
rhq-server.properties
ファイルを開きます。vim serverRoot/jon-server-3.3.0.GA/bin/rhq-server.properties
rhq.communications.connector.security.client-auth-mode
パラメーターをneed
およびにに設定し、sslsocket を使用する際にクライアント認証を有効rhq.server.client.security.server-auth-mode-enabled
にしtrue
ます。sslservlet set パラメーターをtrue
、およびrhq.server.tomcat.security.client-auth-mode
パラメーターがと使用する場合rhq.server.client.security.server-auth-mode-enabled
true
。キーストアおよびトラストストアファイルに関する情報を設定します。受信メッセージ(sslsocket 使用時のエージェント間通信)の設定はすべてrhq.communications.connector.security.*
パラメーターで設定されます。送信メッセージの設定は、rhq.server.client.security.*
パラメーターで設定されます。# Server-side SSL Security Configuration (for incoming messages from agents) # These are used when secure transports other than sslservlet are used rhq.communications.connector.security.secure-socket-protocol=TLS rhq.communications.connector.security.keystore.file=${jboss.server.config.dir}/keystore.dat rhq.communications.connector.security.keystore.algorithm=SunX509 rhq.communications.connector.security.keystore.type=JKS rhq.communications.connector.security.keystore.password=secret rhq.communications.connector.security.keystore.key-password=secret rhq.communications.connector.security.keystore.alias=server1 rhq.communications.connector.security.truststore.file=${jboss.server.config.dir}/truststore.dat rhq.communications.connector.security.truststore.algorithm=SunX509 rhq.communications.connector.security.truststore.type=JKS rhq.communications.connector.security.truststore.password=secret rhq.communications.connector.security.client-auth-mode=need ... # Client-side SSL Security Configuration (for outgoing messages to agents) rhq.server.client.security.secure-socket-protocol=TLS rhq.server.client.security.keystore.file=${jboss.server.config.dir}/keystore.dat rhq.server.client.security.keystore.algorithm=SunX509 rhq.server.client.security.keystore.type=JKS rhq.server.client.security.keystore.password=secret rhq.server.client.security.keystore.key-password=secret rhq.server.client.security.keystore.alias=server1 rhq.server.client.security.truststore.file=${jboss.server.config.dir}/truststore.dat rhq.server.client.security.truststore.algorithm=SunX509 rhq.server.client.security.truststore.type=JKS rhq.server.client.security.truststore.password=secret rhq.server.client.security.server-auth-mode-enabled=true
- ファイルを保存し、サーバーを再起動します。
serverRoot/jon-server-3.3.0.GA/bin/rhqctl start
- エージェント設定ファイルで、セキュアな接続に関連する行のコメントを解除します。これらのパラメーターは、rhq.communications.connector.security.* とで始まり、rhq.agent.client.security.* エージェント間の通信とサーバー間の通信はそれぞれで始まります。適切な値を入力します。
<entry key="rhq.communications.connector.security.secure-socket-protocol" value="TLS" /> <entry key="rhq.communications.connector.security.keystore.file" value="conf/keystore.dat" /> <entry key="rhq.communications.connector.security.keystore.algorithm" value="SunX509" /> <entry key="rhq.communications.connector.security.keystore.type" value="JKS" /> <entry key="rhq.communications.connector.security.keystore.password" value="rhqpwd" /> <entry key="rhq.communications.connector.security.keystore.key-password" value="rhqpwd" /> <entry key="rhq.communications.connector.security.keystore.alias" value="rhq" /> <entry key="rhq.communications.connector.security.truststore.file" value="conf/truststore.dat" /> <entry key="rhq.communications.connector.security.truststore.algorithm" value="SunX509" /> <entry key="rhq.communications.connector.security.truststore.type" value="JKS" /> <entry key="rhq.communications.connector.security.truststore.password" value="" /> <entry key="rhq.communications.connector.security.client-auth-mode" value="need" /> <entry key="rhq.agent.client.security.secure-socket-protocol" value="TLS" /> <entry key="rhq.agent.client.security.keystore.file" value="conf/keystore.dat" /> <entry key="rhq.agent.client.security.keystore.algorithm" value="SunX509" /> <entry key="rhq.agent.client.security.keystore.type" value="JKS" /> <entry key="rhq.agent.client.security.keystore.password" value="rhqpwd" /> <entry key="rhq.agent.client.security.keystore.key-password" value="rhqpwd" /> <entry key="rhq.agent.client.security.keystore.alias" value="rhq" /> <entry key="rhq.agent.client.security.truststore.file" value="conf/truststore.dat" /> <entry key="rhq.agent.client.security.truststore.algorithm" value="SunX509" /> <entry key="rhq.agent.client.security.truststore.type" value="JKS" /> <entry key="rhq.agent.client.security.truststore.password" value="" /> <entry key="rhq.agent.client.security.server-auth-mode-enabled" value="true" />
注記ここでは、エージェント設定ファイルを編集してエージェント設定を編集する方法を説明します。エージェント設定は、エージェント起動スクリプトの高度な設定モードに移動して編集することもできます。agentRoot/rhq-agent/bin/rhq-agent.sh --cleanconfig --setup --advanced