Как да създадете самоподписан сертификат в Windows

Повечето администратори на Windows, запознати с темата PKI, знаят полезността MakeCert.Търсейки, с който можете да създадете самоподписан сертификат. Тази помощна програма е включена в Microsoft .NET Framework SDK и Microsoft Windows SDK. Windows 8 и Windows Server 2012 имат вградена способност да създават самоподписан сертификат с помощта на PowerShell 3.0 и по-нови версии, без да използват специални помощни програми.

Съдържание:

  • Използване на New-SelfSignedCertificate Cmdlet за създаване на сертификати
  • Създайте самоподписан сертификат за подписване на код за подписване на код

Използване на New-SelfSignedCertificate Cmdlet за създаване на сертификати

PowerShell предлага използването на командлета за създаване на самоподписан сертификат нов-SelfSignedCertificate, част от модула PoSh с името PKI (Инфраструктура с публичен ключ).

За да изброите всички налични командлети в PKI модула, изпълнете командата:

Get-Command -Модул PKI

Препоръчва се да използвате самоподписани сертификати за тестови цели или да предоставите сертификати за вътрешни интранет услуги (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и др.), В случаите, когато по някаква причина закупите сертификат от външен доставчик или внедряване на инфраструктура PKI / CA невъзможно.

съвет. Не забравяйте и за възможността за използване на пълноценни безплатни SSL сертификати от Let's Encrypt. Пример за това как да се издаде сертификат Да шифроваме SSL и да го свържем към IIS сайт.

За да създадете сертификат, трябва да посочите стойностите -DnsName (Име на DNS сървъра, името може да бъде произволно и различно от името на localhost) и -CertStoreLocation (раздел на локалния магазин за сертификати, където ще бъде поставен генерираният сертификат). Можете да използвате командлета, за да създадете самоподписан сертификат в Windows 10 (в нашия пример), Windows 8 / 8.1 и Windows Server 2016/2012/2012 R2.

За да създадете сертификат за DNS име test.contoso.com и да го поставите в списъка на сертификатите за персонален компютър, изпълнете командата:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert: \ LocalMachine \ My

Директория: Microsoft.PowerShell.Security \ Сертификат :: LocalMachine \ My
Тема с палец
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN = test.contoso.com

По подразбиране се генерира самоподписан сертификат със следните настройки:

  • Криптографски алгоритъм: RSA;
  • Размер на ключ: 2048 малко;
  • Валидни опции за използване на ключовете:  Удостоверяване на клиента и Удостоверяване на сървъра;
  • Сертификатът може да се използва за: Цифров подпис, Ключово шифроване ;
  • Валидност на сертификата: 1 година.

Тази команда ще създаде нов сертификат и ще го импортира в паметта на личния компютър. Отваряне щракване certlm.MSC, проверете това в секцията персонален появи се нов сертификат в магазина за компютърни сертификати.

Както можете да видите, свойствата на сертификата показват, че този сертификат може да се използва за удостоверяване на клиент (Удостоверяване на клиент), но е валиден и за удостоверяване на сървър (Удостоверяване на сървър).

забележка. Срокът на валидност на такъв самоподписан сертификат е ограничен до 1 година от датата на неговото създаване. За да издадете сертификат за 3 години, изпълнете следните команди:

$ todaydate = Дата на получаване
$ add3year = $ todaydate.AddYears (3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $ add3year -CertStoreLocation cert: \ LocalMachine \ My

За да експортираме получения сертификат с частен ключ в защитен с парола pfx файл, се нуждаем от неговия Thumbprint, който трябва да бъде копиран от резултатите от командата New-SelfSignedCertificate:

$ CertPassword = ConvertTo-SecureString -String „YourPassword“ -Force -AsPlainText

Export-PfxCertificate -Cert cert: \ LocalMachine \ My \ 2779C0490D558B31AAAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ test.pfx -Password $ CertPassword

Можете да експортирате публичния ключ на сертификата:

Export-Certificate -Cert Cert: \ LocalMachine \ My \ 2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ testcert.cer

Полученият публичен ключ или самият файл на сертификата могат да бъдат инсталирани на уеб сървър или клиенти на домейни с помощта на GPO (пример за инсталиране на сертификат на компютър чрез групови правила).

Една полезна характеристика на командлета New-SelfSignedCertificate е възможността да се създаде сертификат с няколко различни имена. предмет алтернатива Имена (SAN).

забележка. Ако се създаде сертификат с няколко имена, първото име в параметъра DnsName ще се използва като сертификат CN (общо име).

Например, създайте сертификат със следните имена:

  • Име на предмета (CN): adfs1.contoso.com
  • Тема за алтернативно име (DNS): web_gw.contoso.com
  • Тема за алтернативно име (DNS): enterprise_reg.contoso.com

Командата за създаване на сертификата ще бъде следната:

New-SelfSignedCertificate -DnsName adfs1.contoso.com, web_gw.contoso.com, enterprise_reg.contoso.com -CertStoreLocation cert: \ LocalMachine \ My

Можете също така да издадете сертификат за цялото пространство на имена в домейна, за това посочете името на сървъра като * .contoso.com.

New-SelfSignedCertificate -certstorelocation cert: \ localmachine \ my -dnsname * .contoso.com

Създайте самоподписан сертификат за подписване на код за подписване на код

В PoweShell 3.0 командлетът New-SelfSifgnedCertificate генерира само SSL сертификати, които не могат да бъдат използвани за подписване на драйвер и код на приложение (за разлика от сертификатите, генерирани от MakeCert).

В PowerShell 5 новата версия на командлета New-SelfSifgnedCertificate вече може да се използва за издаване на сертификати за типово подписване..

За да създадете самоподписан сертификат за подписване на код на приложението, изпълнете командата:

$ cert = New-SelfSignedCertificate -Subject "Серт за подписване на код" -Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

Нека се опитаме да подпишем PowerShell скрипт, използвайки този сертификат:

Set-AuthenticodeSignature -FilePath C: \ PS \ test_script.ps1 -Сертификат $ cert

Ако предупреждението UnknownError се появи по време на изпълнението на командата, тогава този сертификат е недоверен, защото е в личния магазин на потребителски сертификати.

Трябва да го преместите в коренни сертификати (не забравяйте периодично да проверявате хранилището на сертификати на Windows за ненадеждни сертификати и да актуализирате списъците с коренови сертификати):

Move-Item -Path $ cert.PSPath -Определение "Cert: \ CurrentUser \ Root"

След това можете да подпишете своя PowerShell скрипт, като използвате този самоподписан сертификат.