4.7.2. ブローカークライアント接続のセキュリティー保護
アクセプターまたはコネクター (sslEnabled
を true
に設定) でセキュリティーを有効にしている場合、ブローカーとクライアント間での証明書ベースの認証を許可するように Transport Layer Security (TLS) を設定する必要があります。TLS は、よりセキュアな SSL バージョンで更新されています。2 つの主要な TLS 設定があります。
- 一方向 TLS
- ブローカーのみが証明書を表示します。証明書はクライアントによってブローカーを認証するために使用されます。これが最も一般的な設定です。
- 双方向 TLS
- ブローカーとクライアントの両方が証明書を提示します。これは相互認証と呼ばれることもあります。
これ以降のセクションで以下を説明します。
一方向と双方向 TLS の両方の場合、ブローカーとクライアント間の正常な TLS ハンドシェイクに必要な認証情報を保存するシークレットを生成して、設定を完了します。これは、セキュアなアクセプターまたはコネクターの sslSecret
パラメーターに指定する必要のあるシークレット名です。シークレットには、Base64 でエンコードされたブローカーキーストア (一方向と双方向 TLS の両方)、Base64 でエンコードされたブローカートラストストア (two-way TLS のみ)、およびこれらのファイルに対応するパスワード (Base64 エンコード) が含まれる必要があります。一方向および双方向 TLS の設定手順では、このシークレットの生成方法を説明します。
セキュアなアクセプターまたはコネクターの sslSecret
パラメーターにシークレット名を明示的に指定しないと、アクセプターまたはコネクターはデフォルトのシークレット名を想定します。デフォルトのシークレット名は、 <custom_resource_name>- <acceptor_name>-secret
または<custom_resource_name>- <connector_name>-secret
の形式を使用します。例: my-broker-deployment-my-acceptor-secret
アクセプターまたはコネクターがデフォルトのシークレット名を想定している場合でも、このシークレットを独自に生成する必要があります。これは自動的に作成されません。
4.7.2.1. ホスト名検証用のブローカー証明書の設定
本セクションでは、一方向または双方向 TLS の設定時に生成する必要のあるブローカー証明書の要件をいくつか説明します。
クライアントがデプロイメントでブローカー Pod への接続を試行する場合、クライアント接続 URL の verifyHost
オプションはクライアントによって、ブローカーの証明書の Common Name (CN) をホスト名に比較するかどうかを判別し、一致することを確認します。クライアントが、クライアント接続 URL に verifyHost=true
や同様の場合、クライアントはこの検証を実行します。
たとえば、ブローカーが分離されたネットワークの OpenShift クラスターにデプロイされる場合など、接続のセキュリティーに懸念がない場合、この検証を省略する場合があります。セキュアな接続では、クライアントがこの検証を実行することが推奨されます。この場合、ブローカーキーストア証明書の正しい設定は、クライアント接続を成功させるために不可欠です。
通常、クライアントがホストの検証を使用している場合、ブローカー証明書の生成時に指定する CN はクライアントが接続しているブローカー Pod の Route の完全なホスト名と一致する必要があります。たとえば、単一のブローカー Pod を持つデプロイメントがある場合、CN は以下のようになります。
CN=my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain
CN が複数のブローカーを持つデプロイメントの任意のブローカー Pod に解決するようにするには、ブローカー Pod の ordinal の場所でアスタリスク (*
) ワイルドカード文字を指定できます。以下に例を示します。
CN=my-broker-deployment-*-svc-rte-my-openshift-project.my-openshift-domain
前述の例に記載されている CN は、my-broker-deployment
デプロイメントのブローカー Pod に正常に解決します。
さらに、ブローカー証明書の生成時に指定する SAN (Subject Alternative Name) は、カンマ区切りのリストとして、デプロイメント内のすべてのブローカー Pod を個別に一覧表示する必要があります。以下に例を示します。
"SAN=DNS:my-broker-deployment-0-svc-rte-my-openshift-project.my-openshift-domain,DNS:my-broker-deployment-1-svc-rte-my-openshift-project.my-openshift-domain,..."