Sitecore XPの xConnect サービスは、httpsによる暗号化通信とクライアント証明書を使ったクライアントの認証によりセキュアな通信を行うようになっています。
開発環境や検証用にシングルインストレーション環境で自己証明書を使ってSitecore 9の環境をセットアップすると、有効期限が1年の証明書が作成されて利用されます。 Sitecore 9 の xConnect で使用される証明書の概要についてはこちらを参照ください。
有効期限が切れるとSitecore 9の環境は動作しなくなります。そのため、証明書をリニューアルする必要があります。実際は、自己証明書は更新することができないので、新しい自己証明書を作成して、Sitecore XP 9 環境で作り直した証明書を利用するように設定する必要があります。
そこで、今回の記事では、Sitecore 9のシングルインストレーション環境で、SSL用とクライアント認証用の2つの自己証明書を作成して、Sitecore 9で利用する手順を掲載します。
今回の検証環境
- Sitecore 9.0 update 2 シングルインストレーション環境
- Sitecoreのサイト名 xp902.sc
- xConnectのサイト名 x902.xconnect
1. 自己証明書を作成する
何はなくとも、自己証明書を作成しないと話になりません。今回は、PowerShellスクリプトを用意したので、こちらをそのまま使うか、必要に応じてカスタムのパラメーターを設定してください。
ソースが表示されない場合は、こちらをクリックしてください。
スクリプトを作成する際次のURLのコードを参考にさせていただきました
https://gist.github.com/Jaykul/b6c366c0e580f6350e0aaef55036903c
これで、サーバー証明書とクライアント証明書を作成してみます。
例えば次の用のコードを実行して証明書を作成します。 このとき、ルート証明書とクライアント/サーバー証明書のpfx ファイルをエクスポートするようにサンプルスクリプトは作成していますのでパスワードを適当に入力して下さい。
まず、クライアント証明書を作成してみます。ルート証明書と、クライアント証明書の名前を RootName, Subject パラメーターで指定します。
.\New-SitecoreXConnectSignedCert.ps1 -RootName "DONOT_TRUST_Client_SSL_Renew" -Subject "xp902.xconnect_client_renew" Root Certificate Password: <適当にパスワード入力> Certificate Password: <適当にパスワード入力>
次に、SSL/TLS用のサーバー証明書を作成します。 Subject では、更新対象と同じ x902.connect という名前を指定しています。これは、xConnect のサイトの名前と一致させたいからです。サンプルスクリプトをカスタマイズして、DnsName パラメーターも明示的に指定するようにするれば、別の名前で証明書を作成して、https用の証明書として使えるかもしれません。ここら辺はブラウザーによって判断のされ方が分かれるかもしれませんが未検証です。
.\New-SitecoreXConnectSignedCert.ps1 -RootName "DONOT_TRUST_Sitecore_SSL_Renew" -Subject "xp902.xconnect" Root Certificate Password: <適当にパスワード入力> Certificate Password: <適当にパスワード入力>
これで、証明書が作成されました。pfx ファイルにエクスポートしていますので、マルチサーバー構成の場合、他のサーバーにインストールして使えるかと思います。
これで有効期限が10年間用証明書の準備ができました。
2. ルート証明書に移動およびクライアント証明書にアクセス権限の付与
ローカルコンピューターの証明書のスナップインを起動し、個人ストアに証明書が作成されていることを確認します。
ルート証明書用に作成した DONOT_TRUST_XXXX という名前の証明書をそれぞれ右クリックし、切り取り を選択します。信頼されたルート証明機関 のフォルダーの 証明書を右クリックして、 貼り付け を選択して、ルート証明機関に移動します。この手順が面倒な場合は PowerShell で実施することもできます。
再び、個人ストアに戻り、クライアント証明書(今回の場合 xp902.xconnect_client_renew) を右クリックし、 すべてのタスク > 秘密キーの管理 をクリックします。
Sitecoreのサイトと、xConnectのサイドを実行するアプリケーションプールのユーザー(音階の場合はIIS AppPool\xp902.scとIIS AppPool\xp902.xconnect) に読み取り権限を付与します。
次に、 同じくクライアント証明書 xp902.xconnect_client_renew をダブルクリックします。
詳細タブのThumbpring (拇印) をコピーして、メモ帳などの貼り付けておきます。今回は、019C9CE6626102006016CD227955F0492C2C4CD5 です。
3. 構成ファイルの構成
xConnect サービスと接続するSitecoreのロールは、クライアント証明書を使用して認証を受けますが、このとき証明書を見つけるために、メモしたサムプリントを使用します。
今回は、シングルインストール環境前提で、変更箇所を記載してきます。
3.1 Sitecore ウェブサイトの ConnectionStrings.config の変更
Sitecoreのウェブサイトフォルダー(デフォルトでは C:\inetpub\wwwroot\xp902.sc) の App_Config フォルダー配下の ConnectionStrings.config をメモ帳などで開きます。ファイル内の、xxxxx.certificate (例えば xconnect.collection.certificate) という接続文字列の FindValue という設定で、これまで使用していた証明書のサムプリントが指定されているのでそこをすべて、新しく作成した証明書のサムプリントに置き換えます。 Visual Studio Codeなどの一括編集機能などを使うと安全に全部変更できます。9.0.2の場合は4か所変更になります。
3.2 xConnect の AutomationEngine の ConnectionStrings.config
次に、xConnectのサーバーロールである、AutomationEngine の ConnectionStrings.config を同様に変更します。デフォルトの設定でインストールしている場合は、C:\inetpub\wwwroot\xp902.xconnect\App_data\jobs\continuous\AutomationEngine の App_Configフォルダーに、ConnectionStrings.config ファイルがあります。xconnect.collection.certificate 接続文字列の FindValue の値を新しいクライアントの証明書のサムプリントに変更します。
3.3 xConnect ウェブサイトの AppSettings.config を変更する
クライアントから送られてきたクライアント証明書を認証するために、クライアント証明書のサムプリントを更新します。デフォルトのインストールでは C:\inetpub\wwwroot\xp902.xconnect\ 配下のApp_Config フォルダーに AppSettings.config があるので、こちらのvalidateCertificateThumbprintのvalueに新しいサムプリントを設定します。
4. HTTPS用のバインドの更新
今度はhttps用の証明書を変更します。IISマネージャーを起動して、xconnectのサイトを右クリック > バインドの編集 をクリックします。
サイトバインド画面で https 用のバインドを編集します。 証明書で、新しく作成した証明書を選択して下さい。置き換え前と同じ名前で証明書をつくったので少しややこしいですが、表示ボタンをクリックすれば証明書の詳細を確認できます。
バインドの設定まで終わったら、 IISの再起動、IndexWorkerとMarketingEngine サービスの再起動を行います。
面倒な場合は、サーバー自身を再起動して下さい。
再起動が終わったら、Sitecore, xConnect のサイトのログの確認および、 IndexWorker, AutomationEngine Windowsサービスでエラーログが出力されていないことを確認します。
次に、Sitecoreの編集環境にログインして、 エクスペリエンスアナリティクスやエクスペリエンスプロファイルなどを表示できることを確認します。
細かい検証はしていないのですが、この手順を実施すると、開発環境等の証明書の有効期限にわずららしい思いをしないようにできます。
さんのコメント: さんのコメント: