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

certreq.exe で SSL 証明書発行に必要な CSR を作る


認証局に SSL 証明書を発行を依頼する際には CSR(Certificate Signing Request) を使用します。

IIS が稼働していれば、IIS で CSR は作成できますが、IIS が稼働していない場合にどうやって CSR を作るか...

色々調べていると、Windows には CSR を作成する certreq.exe が入っているって事を初めて知りました(恥

 

Certreq の説明はこちら

英語
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/certreq_1?WT.mc_id=WD-MVP-36880

日本語(機械翻訳がイケてないですけど)
https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/certreq_1?WT.mc_id=WD-MVP-36880

 

CSR の作成

まずは CSR に必要な情報をテキストファイルで作ります。

[CSR_Base.inf]

[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "属性情報"
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xA0
MachineKeySet = True
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
HashAlgorithm = sha256
RequestType = PKCS10
ProviderType = 12
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1

 

設定する箇所は「属性情報」です。

C= 2桁の国コード。日本なら JP
ST= 組織の所在地: 都道府県名
L= 組織の所在地: 都市名
O= 組織名
CN= 証明を利用するホスト名、コモンネーム(www.cotoso.com とか *.cotoso.com)

 

例えば、東京都港区にある Cotoso という組織が sts.cotoso.com の CSR を作る場合は以下のようになります。

Subject = "C=JP,ST=Tokyo,L=Minato,O=Contoso,CN=sts.cotoso.com"

 

Subject のデフォルトの区切り文字はカンマなので、組織名とかにカンマを含めることはできません。

Subject の組織名に「Co.,Ltd」みたいな感じでカンマを含ませたい場合は、区切り文字はセミコロンに変更します。

区切り文字をセミコロンに変更する場合は、X500NameFlags = CERT_NAME_STR_SEMICOLON_FLAG を追加します。

こんな感じですね

Subject = "C=JP;ST=Tokyo;L=Minato;O=Contoso Co.,Ltd;CN=sts.cotoso.com"
X500NameFlags = CERT_NAME_STR_SEMICOLON_FLAG

 

これを読み込ませて CSR.req を出力する場合は、以下のようにします。(要管理権限)

C:\> certreq -new -f CSR_Base.inf CSR.req

 

証明書の取り込み

認証局から発行されたX.509 証明書(.cer)あるいは、PKCS#7 証明書(.p7b)を以下コマンドで取り込みます。
(バックグラウンドで発行された秘密鍵と結合させるので、CSR を発行した PC で実行する必要あり)

certreq -accept 証明書

 

cert.cer を取り込む場合は以下のようにします。

C:\> certreq -accept cert.cer

 

PKCS#12 証明書の作成

AD FS 等で使用する PKCS#12 証明書(.pfx) にする場合は、certlm.msc を使って秘密鍵付き(すべての拡張プロパティ)で pfx にエクスポートします。

certlm.msc で取り込んだ証明書を PKCS#12証明書(.pfx) にエクスポート

秘密鍵をエクスポート

全ての拡張プロパティをエクスポート

パスワードの設定

出力するファイル名

 

GUI ではなく、PowerShell で Export する場合はこんな感じ

PS C:\> Get-Item Cert:\LocalMachine\My\*


   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\My

Thumbprint                                Subject
----------                                -------
BA244FEAAF99D3A2C23EFC4A8C3E8F4DF5715B63  CN=sts.contoso.com


PS C:\> $Cert = Get-Item Cert:\LocalMachine\My\BA244FEAAF99D3A2C23EFC4A8C3E8F4DF5715B63
PS C:\> $Password = ConvertTo-SecureString -AsPlainText -Force "P@ssw0rd"
PS C:\> Export-PfxCertificate -Cert $Cert -FilePath "C:\Cert\cert.pfx" -Password $Password


    ディレクトリ: C:\Cert


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/09/29     18:21           5857 cert.pfx


PS C:\>

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.