Выпускаем SSL сертификаты без установки Certification Authority

2016-09-07, 14:10 / Argon

Иногда для тестовых целей могут понадобиться сертификаты, но не просто самоподписанные, а с расширением SAN и входящие в иерархию с одним корневым сертификатом. Если по такому случаю не хочется поднимать полноценный PKI, то можно построить его подобие с помощью команды PowerShell New-SelfSignedCertificate, которая в Windows 10 позволяет делать удивительные вещи.

# задаём даты действия выпускаемых сертификатов и расположение
$CertNotBefore = [datetime]::Today
$CertNotAfter = ([datetime]::Today).AddYears(100)
$CertLocation = 'Cert:\CurrentUser\My'

# выпускаем корневой сертификат, в параметре Subject указываем всё, что хотим видеть в свойствах сертификата
$RootCert = New-SelfSignedCertificate -CertstoreLocation $CertLocation -NotBefore $CertNotBefore -NotAfter $CertNotAfter -KeyUsage CertSign -Subject 'CN = Argon-Root-Cert, O = Argon On-Line, OU = argon.pro, C = RU'

# корневой сертификат сразу экспортируем в файл, замтем импортируем в хранилище доверенных сертификатов, чтобы выпущенные им сертификаты признавались доверенными
$RootCert | Export-Certificate -Type CERT -FilePath ($RootCert.Thumbprint+'.cer')
Import-Certificate -FilePath ($RootCert.Thumbprint+'.cer') -CertStoreLocation 'Cert:\CurrentUser\Root'

# запоминаем Thumbprint сертификата, он будет нужен для выпуска дочерних сертификатов
$RootCertThumbprint = $RootCert.Thumbprint
$RootCertThumbprint

# для многократного использования в будущем - находим корневой сертификат по его отпечатку
$SigningCert= Get-ChildItem -Path $CertLocation | where Thumbprint -eq 'DFB81C04914D2489D07386F1786D8BFD7A559E5B'

# выпускаем нужное нам количество дочерних сертификатов, имена DNS для SAN указываем в параметре DnsName, Subject - по вкусу, можно не заполнять
$NewCert = New-SelfSignedCertificate -CertStoreLocation $CertLocation -NotBefore $CertNotBefore -NotAfter $CertNotAfter -Signer $SigningCert -Subject 'CN=server.argon.pro, O = Argon On-Line, OU = argon.pro, C = RU' -DnsName 'server.argon.pro', 'server.argon.com.ru' , '*.demo.irom.info'

# выпущенный дочерний сертификат можно экспортировать в PFX
$Password = 'SecurePassword' | ConvertTo-SecureString -asPlainText -Force
$NewCert | Export-PfxCertificate -FilePath ($NewCert.Thumbprint+'.pfx') -Password $Password



Добавить комментарий