ADFS用別名付き証明書の発行の方法

ADFSのインストールを先に実施してしまいましたが、クライアント証明書を利用するケースでは別サブジェクト名を持った証明書を利用すると、1つのポートでクライアント証明書の受け入れも行えるようになります。 (Windows Server 2016以降で有効です。)

その別サブジェクト名を持つ証明書を作成していきましょう。

まずはIISマネージャーを利用して証明書要求を作成します。

左ペインでトップを選択し、サーバー証明書に入り、右ペインにある操作の証明書要求の作成を押しましょう。

f:id:mohessu:20190811145204p:plain

押下すると、証明書の情報を入力する画面が表示されます。
ここでSubjectを設定しますが、この値はADFSのホスト名を入力する必要があるので間違えないようにしましょう。 
そのほかの項目は任意の内容で入力していきます。

f:id:mohessu:20190811145112p:plain

続いて証明書の強度です。1024ビットの長さではすでに解析ができてしまう長さなので、最低でも2048ビット以上にしておきましょう。次の証明書発行までの間は2048でもしのげるかと思います。

f:id:mohessu:20190811134146p:plain

次は先の内容を記した証明書のリクエストをファイル化します。
このファイルの中身を証明機関に渡して証明書を発行してもらうのですね。

f:id:mohessu:20190811134356p:plain

出来上がったリクエストの内容は以下の形になります。
-----BIGIN NEWからREQUEST-----を含めてリクエストなので、出来上がった文字列すべてをコピー・貼り付けして利用します。 

f:id:mohessu:20190811134509p:plain

その前に、証明機関側では以下のコマンドを実行する必要があります。
このコマンドを実行することで、別のサブジェクトを保存できるようになります。

エディット可能なポリシーを追加するというわけですね。 

certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2

追加したら証明機関の再起動を行っておきましょう。
net stop certsvc
net start certsvc

f:id:mohessu:20190811142219p:plain

これが終わったら、証明書Webサービスに移動し、証明書の要求を行っていきます。
証明書Webサービスの場所はhttps://サービスサーバー/certsrv/がデフォルト設定です。

f:id:mohessu:20190811134850p:plain

証明書の種類選択が出てきますが、下の方にある証明書の要求の詳細設定を押しましょう。 

f:id:mohessu:20190811134920p:plain

詳細設定に入ったらBase64 エンコードCMCまたは~を押下します。

f:id:mohessu:20190811134943p:plain

ここで先のリクエストをペーストしていきます。

また、追加属性として別サブジェクト名を記するのを忘れないようにしましょう。
この別サブジェクト名は「san:dns=」の後ろに続けて記載します。
URLなのでFQDNになることを忘れないようにしましょう。

証明書テンプレートはWebサーバーにしておきます。
また、別サブジェクト名は複数持てるので、2個目を付ける際は「&」を付けて記載します。以下は例です。
san:dns=URLHost1(&dns=URLHost2)

f:id:mohessu:20190811140208p:plain

送信を押下するとWebアクセスの確認が出ますが、このサーバーは自分で作成しているのではいを押下しましょう。

f:id:mohessu:20190811140753p:plain

これで証明書が発行されました。
そのまま証明書のダウンロードを行います。

f:id:mohessu:20190811141004p:plain

ダウンロードすると秘密鍵の入った証明書がダウンロードされます。
速やかにADFSサーバーにインストールし、証明書ファイルは削除してしまいましょう。

f:id:mohessu:20190811141114p:plain

ADFSサーバーにインストールする方法ですが、ダブルクリックもしくはIISマネージャーからサーバー証明書を選び、右ペインにある証明書の要求の完了を押下します。

f:id:mohessu:20190811145204p:plain

先にダウンロードした証明書ファイルを選択します。
フレンドリ名はわかりやすい名前を入力します。
ここでの証明書ストアは個人向けにしておく必要があります。

f:id:mohessu:20190811144130p:plain

これで証明書が個人ストアに展開されました。
サーバー証明書の一覧にも表示されます。 

f:id:mohessu:20190811144213p:plain

ダブルクリックすると秘密鍵があることがわかります。

f:id:mohessu:20190811150149p:plain

詳細タブを見ると、サブジェクト代替名という名前で別名が入っていることがわかります。

f:id:mohessu:20190811151822p:plain

この証明書はこのままでは利用されません。
以下コマンドを利用することでADFSのサービス通信用の証明書が入れ替わります。
Set-AdfsAlternateTlsClientBinding -Member サーバー名 -Thumbprint '拇印'

f:id:mohessu:20190811152115p:plain

入れ替わったことはADFS管理コンソールのサービス - 証明書の画面で確認することができます。

f:id:mohessu:20190818201433p:plain

この時点では49443のポートは有効なままの状態になるので、以下コマンドを打って削除しておくのが良いでしょう。

netsh http show sslcert

netsh http delete sslcert hostnameport=上記で見つけたホスト名:ポート

トークン暗号化解除、トークン署名も入れ替えておくことができますが、無理に変更しなくてもよさそうでした。もしも変更した場合はAzure Active Directory Connectを実行していると影響があるので、Azure AD Connectのコンソールを開き、フェデレーションの管理からAD FS SSL 証明書の更新を押すことを忘れないようにしましょう。(AADCを利用していなければ以下は別の仕組みで管理されているはずなので、そちらも忘れないようにしておきましょう。)

f:id:mohessu:20190818202617p:plain

と、ここまでがADFSの証明書変更ですが、意外と面倒なので、構築時に別名付き証明書を用意しておくのが良いかもしれませんね。笑

音楽:波打ち際にて