Windows Server 2012 R2に搭載されているAD FS 3.0も、だいぶ導入が増えてきたように思えます。最初の方に導入された方は導入から1年経過してSSL証明書の更新などを迎えられているユーザーもいらっしゃるかと思います。
今回は、あまり公開されている情報も無く、トラブルも多く聞かれているので、AD FS 3.0のSSL証明書更新についてまとめていきたいと思います。(なお、こちら基本的には以前勉強会で実施したLT「ADFSの証明書入れ替えではまった話」をブラッシュアップした物になります)
まずは、AD FSならびにWeb Application Proxyの各サーバに新しい証明書をインポートします。Windows Server 2012 R2から、AD FSの動作にはIISは利用されなくなったので必要に応じて別の環境で作成してエクスポートした物を利用します。
基本的にはローカルコンピュータにインポートして、インポート先を自動的に証明書ストアを選択するとしておけば、MMCで確認すると[証明書(ローカルコンピュータ)]-[個人]-[証明書]に表示されると思います。
これで準備は完了です。
1.AD FS #1のSSL証明書更新(Set-AdfsSslCertificate)
AD FS#1(AD FSファームを構成しているプライマリ機をAD FS#1と便宜上表記します)において、PowerShellを起動します。
まず、新しい証明書のThumbprintを取得します。調査方法は色々ありますが、オフィシャルで案内されている証明書管理ツールからだとスペースが入ったりして面倒なので、dir(これはGet-ChileItemのエイリアスです)コマンドで表示してしまうのが一番楽です。有効期限や発行元などの情報を元に、新しい証明書を特定してThumbprintをメモ帳などにコピーします。
Get-ChildItem cert:\LocalMachine\My\ | FL
続いて、こちらの情報を指定してSet-AdfsSslCertificateコマンドレットを実行します。この瞬間、AD FS#1の通信は新しい証明書に切り替わりますので、テストクライアントにHostsを設定するなどして、切り替わり後の証明書に問題がないことはこのタイミングで見ておいた方が良いでしょう。
Set-AdfsSslCertificate -Thumbprint 新しい証明書のThumbprint
このコマンドは、主にAD FS管理ツールによって実施されない2つのことを実施しています。特に後者の方は手動でやると面倒なので、コマンド 1発で済ませられるのは便利ですね。
- SSL証明書のバインドの変更(手動の場合netshコマンドで変更する)
- SSL証明書の秘密鍵に対してAD FSサービスがアクセスできるよう権限設定を行う(手動の場合証明書管理ツールから変更する)
いきなり証明書を切り替えるのには若干違和感はありますが、1番の工程より先に3番の工程を実施した場合、セカンダリ側のAD FSで秘密鍵へのアクセス権限の問題でAD FSの133番のエラーが出ます。
2.AD FS#2以降のSSL証明書更新(Set-AdfsSslCertificate)
同様の操作を、AD FS#2(#3や#4などがある場合はそちらも)についても行います。
3.AD FS#1でAD FSのサービス通信証明書の変更(Set-AdfsCertificate -CertificateType Service-Communications)
続いて、AD FSのサービス通信証明書を変更します。従来でいうSSL証明書の入れ替えの作業の工程です。GUIから実施してもいいですが、せっかくWindows Server 2012 R2の環境なのでPowerShellから実施してみます。
Set-AdfsCertificate -CertificateType Service-Communications -Thumbprint 新しい証明書のThumbprint
ファーム内の各サーバでAD FSサービスを再起動するように指示がありますので、順に行います。
4.AD FS#1でAF FSサービスの再起動
最初にプライマリを実施します。
5.AD FS#2以降でAD FSサービスの再起動
続いてセカンダリ。セカンダリは5分おきにプライマリに設定変更をポーリングしてますので、念のため5分程度待ってから実施します。
これで基本的な項目は完了です。
6.全AD FSでKB2973873の再対応
Lync MobileなどからAD FS接続ができないという問題(KB2973873)のために、netshでSSL証明書のバインドを手動で修正している場合は、こちらの方はSet-AdfsSslCertificateコマンドレットでは差し替えてくれないので手動で差し替えます。
コマンドは最初に設定した際と同じくnetshコマンドで行いますが、上書きができないので削除~再指定を行います。AD FSのAppidは確認した限りでは固定の様ですが、エラーが出たら上記のKBをご確認いただき適宜修正下さい。
netsh
HTTP
DELETE SSLCert IPPORT=0.0.0.0:443
ADD SSLCert IPPORT=0.0.0.0:443 Certhash=新しい証明書のThumnbprint Appid={5d89a20c-beab-4389-9447-324788eb944a}
7.Web Application Proxy #1のSSL証明書更新(Set-WebApplicationProxySslCertificate)
続いて、WAP(旧AD FS Proxy)側に移ります。こちらもまずは各コンピュータのSSL証明書の差し替えから入ります。コマンドレット名が変わりますが基本的には同じです。
Set-WebApplicationProxySslCertificate -Thumbprint 新しい証明書のThumnbprint
8.Web Application Proxy #2以降のSSL証明書更新(Set-WebApplicationProxySslCertificate)
7番と同様です。
9.Web Application Proxy のアプリケーションの設定更新
Web Application Proxyで公開されているアプリケーション(通常はAD FSのみになりますが)について、外部証明書として設定されている証明書を差し替えます。Set-WebApplicationProxyApplicationに必要な引数はGUIDで入力が面倒なので、Get-WebApplicationProxyApplicationしたものをそのままパイプしてしまう方が楽ですね。
Get-WebApplicationProxyApplication | Set-WebApplicationProxyApplication -ExternalCertificateThumbprint 新しい証明書のThumnbprint
10.全Web Application ProxyでKB2973873の再対応
6番と同様の工程をWAP側でも実施します。
という訳で、今回はAD FS 3.0のSSL証明書の入れ替えについてご紹介しました。IISが無くなった分、AD FS 2.0と比較して少し面倒ですが、手順さえ確立できれば後は作業です。
それにしても、AD FSは証明書関係は色々ありますね…、鬼門でしょうか。
関連記事: ADFS証明書の更新について (2008 R2の際の記事になります)