New-SelfSignedCertificate на Win2012 r2 имеет меньше параметров
Я пытаюсь создать самозаверяющий сертификат с определенными значениями параметров шифрования.
на Win Server 2012 r2 standard под управлением PowerShell 5.0, когда я пытаюсь использовать
New-SelfSignedCertificate
Я получаю сообщение об ошибке:
New-SelfSignedCertificate: не удается найти параметр, соответствующий имени параметра "Subject".
когда я пытаюсь использовать -Subject
параметр, который в дополнение к другим параметрам разрешен на моем ноутбук, не отображается в intellisense.
однако на моем ноутбуке (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:LocalMachineMy" -KeySpec KeyExchange -KeyUsage KeyEncipherment, DataEncipherment -Extension $Ext
2 ответов
используйте-DnsName вместо CN=
.
из справки PowerShell:
-DnsName <String>
Указывает одно или несколько DNS-имен, которые необходимо поместить в расширение альтернативного имени субъекта сертификата, если сертификат скопировано не указано с помощью параметра CloneCert. первый DNS имя также сохраняется как имя субъекта и имя издателя.
- KeySpec и другие связанные с ним параметры, к сожалению, нет поддерживается New-SelfSignedCertificate в Windows Server 2012 R2 и Windows 8.1. В противном случае вы смотрите на один из трех вариантов создания нужного сертификата; адаптировать код на основе COM-объекта в ответе на как создать самозаверяющий сертификат с помощью C#? для использования в PowerShell используйте внешний исполняемый файл, например makecert.exe или создайте пару сертификат / ключ в другом месте, а затем импортируйте ее в хранилище сертификатов на другом машина.
обновление: после дальнейших исследований, похоже, адаптация кода на основе COM в PowerShell является хорошим вариантом. Я нашел запись в блоге Вишала Агарвала,создание сертификата (самозаверяющего) с помощью интерфейсов 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, "")
далее работал просто отлично для самозаверяющего вариант...
New-SelfSignedCertificate -DnsName "*.costoso100.com" -CertStoreLocation "cert:\LocalMachine\My"
я смог экспортировать и настроить LDAPS примерно за 15 минут.