第3章 高度な手順の実行
この章では、Red Hat Single Sign-On サーバーのキーストアとトラストストアの設定、管理者アカウントの作成、使用可能な Red Hat Single Sign-On クライアント登録方法の概要、およびクラスタリングの設定に関するガイダンスなどの高度な手順について説明します。
3.1. パススルー TLS ターミネーションテンプレートのデプロイメント
これらのテンプレートを使用してデプロイできます。HTTPS、JGroups キーストア、および Red Hat Single Sign-On サーバートラストストアがすでに存在している必要があるため、カスタム HTTPS、JGroups キーストア、および Red Hat Single Sign-On サーバートラストストアを使用して Red Hat Single Sign-On サーバー Pod をインスタンス化するために使用できます。
3.1.1. デプロイメントの準備
手順
- cluster:admin ロールを持つユーザーとして OpenShift CLI にログインします。
新しいプロジェクトを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-project sso-app-demo
$ oc new-project sso-app-demo
view
ロールをデフォルト
のサービスアカウントに追加します。これにより、サービスアカウントが sso-app-demo 名前空間のすべてのリソースを表示できるようになります。これは、クラスターの管理に必要です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
$ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
3.1.2. Red Hat Single Sign-On サーバーの HTTPS および JGroups キーストアの作成
この手順では、openssl ツールキットを使用して、HTTPS キーストアに署名するための CA 証明書を生成し、Red Hat Single Sign-On サーバー用のトラストストアを作成します。Java Development Kit に含まれる パッケージの keytool を使用して、これらのキーストアの自己署名証明書を生成します。
再暗号化 TLS ターミネーション を使用する Red Hat Single Sign-On アプリケーションテンプレートでは、HTTPS および JGroups キーストアと Red Hat Single Sign-On サーバートラストストアを事前に準備することは、必要 なく、期待 もされません。
再暗号化テンプレートは、OpenShift の内部サービス提供証明書のシークレットを使用して、HTTPS および JGroups キーストアを自動的に作成します。Red Hat Single Sign-On サーバートラストストアも自動的に作成されます。Java システムパスにある、既知の信頼できる CA 証明書ファイルがすべて事前に設定されています。
既存の HTTPS/JGroups キーストアを使用して Red Hat Single Sign-On サーバーをプロビジョニングする場合は、代わりにいくつかのパススルーテンプレートを使用してください。
前提条件
パススルー TLS ターミネーションを使用する Red Hat Single Sign-On アプリケーションテンプレートでは、以下をデプロイする必要があります。
- https トラフィックの暗号化に使用される HTTPS キーストア
- クラスターのノード間の JGroups 通信の暗号化に使用される JGroups キーストア
- Red Hat Single Sign-On 要求のセキュリティー保護に使用される Red Hat Single Sign-On サーバートラストストア
実稼働環境の場合、Red Hat は、SSL 暗号化接続 (HTTPS) 用に検証された認証局 (CA) から購入した独自の SSL 証明書を使用することを推奨します。
自己署名証明書または購入した SSL 証明書でキーストアを作成する方法に関する詳細は、SSL 暗号化キーおよび証明書の生成 を参照してください。
HTTPS キーストアを作成します。
手順
CA 証明書を生成します。パスワードを選択し、忘れないようにしてください。以下の CA 証明書で証明書署名要求に署名する際に、同じパスワードを指定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
$ openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
HTTPS キーストアの秘密鍵を生成する
mykeystorepass
をキーストアパスワードとして提供します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
$ keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
HTTPS キーストアの証明書署名要求を生成します。
mykeystorepass
をキーストアパスワードとして提供します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
$ keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
CA 証明書を使用して証明書署名要求に署名します。CA 証明書の生成 に使用されたパスワードを指定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
$ openssl x509 -req -extfile <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
注記上記のコマンドを 1 行で機能させるために、コマンドにはプロセス置換 (
<() 構文
) が含まれています。現在のシェル環境がそのような構文をサポートしていることを確認してください。そうしないと、syntax error near unexpected token `('
が発生する可能性があります。CA 証明書を HTTPS キーストアにインポートします。
mykeystorepass
をキーストアパスワードとして提供します。Trust this certificate? [no]:
の質問にyes
を返信します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
署名済み証明書署名要求を HTTPS キーストアにインポートします。
mykeystorepass
をキーストアパスワードとして提供します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow keytool -import -file sso.crt -alias jboss -keystore keystore.jks
$ keytool -import -file sso.crt -alias jboss -keystore keystore.jks
JGroups キーストアのセキュアキーを生成します。
キーストアパスワードとして パスワード
を指定します。
keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
$ keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
CA 証明書を新しい Red Hat Single Sign-On サーバートラストストアにインポートします。
mykeystorepass
をトラストストアのパスワードとして指定します。Trust this certificate? [no]:
の質問に yes
を返信します。
keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
3.1.3. シークレットの作成
手順
OpenShift がパスワードやキーストアなどの機密情報を保持するために使用するシークレットと呼ばれるオブジェクトを作成します。
前のセクション で生成された HTTPS および JGroups キーストアのシークレットと Red Hat Single Sign-On サーバートラストストアを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
$ oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
これらのシークレットを、Red Hat Single Sign-On Pod の実行に使用されるデフォルトのサービスアカウントにリンクします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc secrets link default sso-app-secret
$ oc secrets link default sso-app-secret
3.1.4. OpenShift CLI を使用したパススルー TLS テンプレートのデプロイ
keystores と secrets を作成したら、oc
コマンドを使用してパススルー TLS ターミネーションテンプレートをデプロイします。
3.1.4.1. oc
コマンドガイドライン
次の oc
コマンドでは、SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD、HTTPS_PASSWORD、JGROUPS_ENCRYPT_PASSWORD、および SSO_TRUSTSTORE_PASSWORD 変数の値は 、sso76-ocp4-https Red Hat Single Sign-On アプリケーションテンプレートのデフォルト値と一致します。
実稼働環境では、Red Hat Single Sign-On サーバーの管理者ユーザーアカウントの強力なユーザー名とパスワード、および HTTPS と JGroups キーストア、および Red Hat Single Sign-On サーバーのトラストストアのパスワードを生成するためのガイダンスについて、組織のオンサイトポリシーを参照することを Red Hat は推奨します。
また、テンプレートを作成するときは、パスワードをキーストアの作成時に提供されたパスワードと一致させてください。別のユーザー名またはパスワードを使用した場合は、環境に合わせてテンプレートのパラメーターの値を変更してください。
次の keytool コマンドを使用して、証明書に関連付けられているエイリアス名を確認できます。keytool は、Java Development Kit に含まれているパッケージです。
keytool -v -list -keystore keystore.jks | grep Alias
$ keytool -v -list -keystore keystore.jks | grep Alias
Enter keystore password: mykeystorepass
Alias name: xpaas.ca
Alias name: jboss
keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
$ keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
Enter keystore password: password
Alias name: secret-key
最後に、次のコマンドの SSO_ADMIN_USERNAME、SSO_ADMIN_PASSWORD、SSO_REALM テンプレートパラメーターは任意です。
3.1.4.2. サンプル oc
コマンド
oc new-app --template=sso76-ocp4-https \ -p HTTPS_SECRET="sso-app-secret" \ -p HTTPS_KEYSTORE="keystore.jks" \ -p HTTPS_NAME="jboss" \ -p HTTPS_PASSWORD="mykeystorepass" \ -p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \ -p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \ -p JGROUPS_ENCRYPT_NAME="secret-key" \ -p JGROUPS_ENCRYPT_PASSWORD="password" \ -p SSO_ADMIN_USERNAME="admin" \ -p SSO_ADMIN_PASSWORD="redhat" \ -p SSO_REALM="demorealm" \ -p SSO_TRUSTSTORE="truststore.jks" \ -p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \ -p SSO_TRUSTSTORE_SECRET="sso-app-secret"
$ oc new-app --template=sso76-ocp4-https \
-p HTTPS_SECRET="sso-app-secret" \
-p HTTPS_KEYSTORE="keystore.jks" \
-p HTTPS_NAME="jboss" \
-p HTTPS_PASSWORD="mykeystorepass" \
-p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \
-p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \
-p JGROUPS_ENCRYPT_NAME="secret-key" \
-p JGROUPS_ENCRYPT_PASSWORD="password" \
-p SSO_ADMIN_USERNAME="admin" \
-p SSO_ADMIN_PASSWORD="redhat" \
-p SSO_REALM="demorealm" \
-p SSO_TRUSTSTORE="truststore.jks" \
-p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \
-p SSO_TRUSTSTORE_SECRET="sso-app-secret"
--> Deploying template "openshift/sso76-ocp4-https" to project sso-app-demo
Red Hat Single Sign-On 7.6.11 (Ephemeral with passthrough TLS)
---------
An example Red Hat Single Sign-On 7 application. For more information about using this template, see https://github.com/jboss-openshift/application-templates.
A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm via the Red Hat Single Sign-On console is admin/redhat. Please be sure to create the following secrets: "sso-app-secret" containing the keystore.jks file used for serving secure content; "sso-app-secret" containing the jgroups.jceks file used for securing JGroups communications; "sso-app-secret" containing the truststore.jks file used for securing Red Hat Single Sign-On requests.
* With parameters:
* Application Name=sso
* Custom http Route Hostname=
* Custom https Route Hostname=
* Server Keystore Secret Name=sso-app-secret
* Server Keystore Filename=keystore.jks
* Server Keystore Type=
* Server Certificate Name=jboss
* Server Keystore Password=mykeystorepass
* Datasource Minimum Pool Size=
* Datasource Maximum Pool Size=
* Datasource Transaction Isolation=
* JGroups Secret Name=sso-app-secret
* JGroups Keystore Filename=jgroups.jceks
* JGroups Certificate Name=secret-key
* JGroups Keystore Password=password
* JGroups Cluster Password=yeSppLfp # generated
* ImageStream Namespace=openshift
* Red Hat Single Sign-On Administrator Username=admin
* Red Hat Single Sign-On Administrator Password=redhat
* Red Hat Single Sign-On Realm=demorealm
* Red Hat Single Sign-On Service Username=
* Red Hat Single Sign-On Service Password=
* Red Hat Single Sign-On Trust Store=truststore.jks
* Red Hat Single Sign-On Trust Store Password=mykeystorepass
* Red Hat Single Sign-On Trust Store Secret=sso-app-secret
* Container Memory Limit=1Gi
--> Creating resources ...
service "sso" created
service "secure-sso" created
service "sso-ping" created
route "sso" created
route "secure-sso" created
deploymentconfig "sso" created
--> Success
Run 'oc status' to view your app.