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 コネクターの追加

  1. jboss-cli.sh --controller=127.0.0.1:6999 --connect --command='/socket-binding-group=standard-sockets/socket-binding=httpsbrowser/:add(port=9443)'
    
  2. 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)'
    
  3. 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'
    
  4. JBoss ON サーバーの再起動
    rhqctl restart --server
    
注記
上記の手順では、JON のキーストアにある自己署名証明書を使用する場合に SSL 設定を作成します。証明書(特に自己署名なしの証明書)を使用することが推奨されます。独自のキーストア情報を使用するには、上記の手順(具体的には key-alias、password、certificate-key-file、および certificate-file の値)で変更します。

手順4.2 サーバーとエージェント間のクライアント認証の設定

  1. にあるように暗号化を有効にします。これは 「暗号化の設定」、クライアント認証が無効になら ない ようにします。
  2. SSL ソケット接続は、ユーザー定義のポートで行われます。必要に応じて、ファイアウォールまたは VPN を開き、そのポートへのアクセスを許可します。
  3. 各 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 サイトから入手でき ます
  4. 各自己署名証明書を単一のトラストストアファイルに配置します。
    1. 各キーストアから自己署名証明書をエクスポートします。
      keytool -export -keystore server1-keystore.dat -alias server1 -storetype JKS -storepass secret -file server1-cert
    2. すべての証明書を単一のトラストストアファイルにインポートします。
      keytool -import -keystore truststore.dat -alias server1 -storetype JKS -file server1-cert -noprompt -keypass secret -storepass secret
      -alias は、トラストストアのインポートされた証明書に付与する名前です。便宜上、これは元のキーストアファイルのエイリアスと同じです。
      重要
      エクスポートしたすべてのサーバー証明書とエージェント証明書を、同じトラストストアファイル インポートします。
    3. を使用して証明書を一覧表示し、すべての証明書が正常 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
      
  5. キーストアとトラストストアファイルをすべての JBoss ON およびサーバーマシンおよびエージェントマシンに分散します。キーストアは、証明書の CN のホスト名に一致するマシンにのみ配布し、キーストアを誤ったマシンに追加すると、SSL 接続が失敗します。
    1. サーバーでは、キーストア(server1-keystore.dat)を JBoss Operations Network サーバーに埋め込まれた JBoss AS サーバーの jon-server-version/jbossas/standalone/configuration/ ディレクトリーにコピーします。server1-keystore.dat に変更し keystore.datます。
    2. サーバーでは、トラストストアを組み込み JBoss AS サーバーの serverRoot/jon-server-3.3.0.GA/jbossas/standalone/configuration/ ディレクトリーにコピーします。このファイルに名前を付けてください truststore.dat
    3. エージェントの場合は、キーストアを agentRoot/rhq-agent/conf ディレクトリーにコピーします。agentRoot/rhq-agent/conf ディレクトリーの証明書ファイルは、自動更新後も保持されます。
  6. JBoss ON サーバーをシャットダウンします。
    serverRoot/jon-server-3.3.0.GA/bin/rhqctl.sh stop
  7. JBoss ON サーバーの rhq-server.properties ファイルを開きます。
    vim serverRoot/jon-server-3.3.0.GA/bin/rhq-server.properties
  8. 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
  9. ファイルを保存し、サーバーを再起動します。
    serverRoot/jon-server-3.3.0.GA/bin/rhqctl start
  10. エージェント設定ファイルで、セキュアな接続に関連する行のコメントを解除します。これらのパラメーターは、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