web-dev-qa-db-ja.com

Win2012 r2のNew-SelfSignedCertificateのパラメーターが少ない

特定の暗号化パラメーター値を使用して自己署名証明書を作成しようとしています。

PowerShell 5.0を実行するWin Server 2012 r2標準で、使用しようとすると

New-SelfSignedCertificate

エラーが表示されます:

New-SelfSignedCertificate:パラメーター名 'Subject'と一致するパラメーターが見つかりません。

-Subjectパラメーターを使用しようとすると、ラップトップで許可されている他のパラメーターに加えて、インテリセンスに表示されません。

しかし、私のラップトップ(Win 10およびPowerShell 5.0)では、これらのパラメーターを使用することが許可されており、次のコードを使用して自己署名証明書を作成します。

#create a Certificate
# OID for document encryption
    $Oid = New-Object System.Security.Cryptography.Oid "1.3.6.1.4.1.311.80.1"
    $oidCollection = New-Object System.Security.Cryptography.OidCollection
    $oidCollection.Add($oid) > $Null
# Create enhanced key usage extension that allows document encryption
$Ext = New-Object System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension $oidCollection, $true 

$myCert = New-SelfSignedCertificate -Subject 'CN=myservernameasubject' -CertStoreLocation "Cert:\LocalMachine\My" -KeySpec KeyExchange -KeyUsage KeyEncipherment, DataEncipherment -Extension $Ext
9
Samer s Salib

代わりに、CN=なしで-DnsNameを使用してください。

PowerShellヘルプから:

-DnsName <String>コピーする証明書がCloneCertパラメーターで指定されていない場合に、証明書のサブジェクトの別名拡張に含める1つ以上のDNS名を指定します。 最初のDNS名もサブジェクト名と発行者名として保存されます。

残念ながら、-KeySpecおよびその他の関連オプションは、Windows Server 2012 R2およびWindows 8.1の New-SelfSignedCertificate ではサポートされていません。それ以外の場合は、目的の証明書を生成するための3つのオプションのいずれかを検討しています。 C#を使用して自己署名証明書を作成する方法 への回答のCOMオブジェクトベースのコードをPowerShellで使用する、makecert.exeなどの外部実行可能ファイルを使用する、または他の場所で証明書/キーペアを生成する次に、それを他のマシンの証明書ストアにインポートします。

更新:さらに調査した結果、PowerShellでCOMベースのコードを適応させることは良いオプションのようです。 Vishal Agarwalによるブログエントリ PowershellおよびCertEnrollインターフェイスを使用した証明書(自己署名)の生成 を見つけました。これにより、次のPowerShellコードが得られます。

$name = new-object -com "X509Enrollment.CX500DistinguishedName.1"
$name.Encode("CN=TestServer", 0)

$key = new-object -com "X509Enrollment.CX509PrivateKey.1"
$key.ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
$key.KeySpec = 1
$key.Length = 1024
$key.SecurityDescriptor = "D:PAI(A;;0xd01f01ff;;;SY)(A;;0xd01f01ff;;;BA)(A;;0x80120089;;;NS)"
$key.MachineContext = 1
$key.Create()

$serverauthoid = new-object -com "X509Enrollment.CObjectId.1"
$serverauthoid.InitializeFromValue("1.3.6.1.5.5.7.3.1")
$ekuoids = new-object -com "X509Enrollment.CObjectIds.1"
$ekuoids.add($serverauthoid)
$ekuext = new-object -com "X509Enrollment.CX509ExtensionEnhancedKeyUsage.1"
$ekuext.InitializeEncode($ekuoids)

$cert = new-object -com "X509Enrollment.CX509CertificateRequestCertificate.1"
$cert.InitializeFromPrivateKey(2, $key, "")
$cert.Subject = $name
$cert.Issuer = $cert.Subject
$cert.NotBefore = get-date
$cert.NotAfter = $cert.NotBefore.AddDays(90)
$cert.X509Extensions.Add($ekuext)
$cert.Encode()

$enrollment = new-object -com "X509Enrollment.CX509Enrollment.1"
$enrollment.InitializeFromRequest($cert)
$certdata = $enrollment.CreateRequest(0)
$enrollment.InstallResponse(2, $certdata, 0, "")
13
JamieSee

以下は自己署名オプションでうまくいきました...

New-SelfSignedCertificate -DnsName "*.costoso100.com" -CertStoreLocation "cert:\LocalMachine\My"

約15分でLDAPSをエクスポートしてセットアップすることができました。

0
CLBdS