RD-Gateway で使用する証明書は AD CS で発行することが可能ですし、GUI で操作すれば証明書要求と RD-Gateway にセットするのは簡単ですね。
GUI を持たない環境や、自動化するためにコマンドラインでの操作を調べたので共有します。
手順は以下となります。
・CSR の作成
・CSR を AD CS に送信し証明書を入手
・証明書をインストール
・証明書を RD-Gateway にセット
今回は、RD-Gateway 上で上記手順を全て実施する想定ですが、別のマシン上で CSR を作成した場合は、CSR を作成したマシンに証明書をインストールし、その証明書をエクスポート、RD-Gateway でインポートする手順が増えます。
これは、CSR を作成したマシンにバックグラウンドで秘密鍵が作られ、入手した証明書に秘密鍵を合体させる事で証明書として完成させるからです。
今回は説明を割愛しますが、インポート/エクスポートは「Export-PfxCertificate」と「Import-PfxCertificate」を使います。
テキストエディタで、CSR に必要な情報をテキストファイルで作ります。(Code:ASCII)
[Version] Signature="$Windows NT$" [NewRequest] Subject = "CN=FQDN" Exportable = TRUE KeyLength = 2048 KeySpec = 1 KeyUsage = 0xA0 MachineKeySet = True ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 HashAlgorithm = sha256 RequestType = PKCS10 [RequestAttributes] CertificateTemplate= WebServer |
CN=の「FQDN」に RD-Gateway の FQDN をセットします。
例えば、gw01.example.com の証明書を作る場合は以下のようになります
[c:\cert\gw01.txt]
[Version] Signature="$Windows NT$" [NewRequest] Subject = "CN=gw01.example.com" Exportable = TRUE KeyLength = 2048 KeySpec = 1 KeyUsage = 0xA0 MachineKeySet = True ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 HashAlgorithm = sha256 RequestType = PKCS10 [RequestAttributes] CertificateTemplate= WebServer |
こいつを「certreq -new」コマンドで CSR にします。
certreq -new 情報ファイル CSR |
c:\cert\gw01.txt を食わせて、c:\cert\gw01.req を出力する場合はこんな感じです。
certreq -new c:\cert\gw01.txt c:\cert\gw01.req |
この段階で秘密鍵がバックグランドで作成されます。
作成した CSR を「certreq -submit」コマンドで AD CS に提出します。
この際に AD CS の選択ダイアログが出てしまう事があるので、-config オプションで CA を指定します。
-config は「CAのFQDN\CA名」です。
certreq -submit -config CAのFQDN\CA名 CSR 証明書 |
CA 名は、発行済みの証明書を見るといいでしょう。
AD CS の FQDN が、ca01.example.com で、CA 名が example-CA01-CA-1 の場合に、c:\cert\gw01.req を食わせて、c:\cert\gw01.cer を出力する場合は、こんな感じですね。
certreq -submit -config ca01.example.com\example-CA01-CA-1 c:\cert\gw01.req c:\cert\gw01.cer |
受け取った証明書は秘密鍵がセットされていないので、「certreq -accept」コマンドで証明書をイントールして秘密鍵と合体させます。
certreq -accept 証明書 |
c:\cert\gw01.cer の証明書をインストールする場合はこんな感じです。
certreq -accept c:\cert\gw01.cer |
certreq -new を実行した環境に秘密鍵が作られているので、certreq -new を実行した環境で certreq -accept する必要があります。
RD-Gateway に証明書認識させるには、インストールした証明書の拇印を RDS:\GatewayServer\SSLCertificate\Thumbprint にセットし、TSGateway サービスを再起動します。
PowerShell で書くとこんな感じになります
# 証明書を取得 $Certs = Get-ChildItem Cert:\LocalMachine\My\ # 一番新しい NotBefore を抽出 $obj = $certs | Measure-Object -Property NotBefore -Maximum # 一番新しい NotBefore 持つ証明書 $TergetCert = $certs | ? NotBefore -eq ($obj.Maximum) # 一番新しい NotBefore 持つ証明書の拇印をセット Import-Module RemoteDesktopServices Set-Item -Path "RDS:\GatewayServer\SSLCertificate\Thumbprint" -Value ($TergetCert.Thumbprint) # RD-Gateway サービスを再起動 Restart-Service TSGateway |
証明書が切れる時期が近付くと、Application ログに AutoEnrollment 64 警告が出るので、こいつをトラップすれば自動化できそうですね。
certreq.exe で SSL 証明書発行に必要な CSR を作る
https://www.vwnet.jp/Windows/WS16/2017092701/Certreq.htm
スケジュールジョブ(PowerShell)でパスワードをセキュアに使う(証明書編)
http://www.vwnet.jp/Windows/WS12R2/Password/CertPassword.htm
Copyright © MURA All rights reserved.