Home > Windows にまつわる e.t.c.

コマンドラインで RD-Gateway で使用する証明書を AD CS に要求し RD-Gateway にセットする


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 の作成

テキストエディタで、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 を AD CS に送信し証明書を入手

作成した 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 にセット

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

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.