Jak utworzyć samopodpisany certyfikat w systemie Windows

Większość administratorów systemu Windows zaznajomionych z kompozycją PKI zna to narzędzie Makecert.exe, za pomocą którego możesz utworzyć samopodpisany certyfikat. To narzędzie jest dołączone do zestawu Microsoft .NET Framework SDK i Microsoft Windows SDK. Windows 8 i Windows Server 2012 mają wbudowaną możliwość tworzenia certyfikatu z podpisem własnym przy użyciu programu PowerShell 3.0 lub nowszego bez użycia specjalnych narzędzi.

Treść

  • Korzystanie z polecenia cmdlet New-SelfSignedCertificate do tworzenia certyfikatów
  • Utwórz samopodpisany certyfikat podpisywania kodu do podpisywania kodu

Korzystanie z polecenia cmdlet New-SelfSignedCertificate do tworzenia certyfikatów

PowerShell sugeruje użycie polecenia cmdlet do utworzenia certyfikatu z podpisem własnym Nowy-SelfSignedCertificate, część modułu PoSh o nazwie PKI (Infrastruktura klucza publicznego).

Aby wyświetlić listę wszystkich dostępnych poleceń cmdlet w module PKI, uruchom polecenie:

Get-Command -Module PKI

Zaleca się używanie certyfikatów z podpisem własnym do celów testowych lub dostarczania certyfikatów dla wewnętrznych usług intranetowych (IIS, Exchange, proxy aplikacji sieci Web, LDAPS, ADRMS, DirectAccess itp.), W przypadku, gdy z jakiegoś powodu kupujesz certyfikat od zewnętrznego dostawcy lub wdrożenie infrastruktury PKI / CA jest niemożliwe.

Wskazówka. Nie zapomnij również o możliwości korzystania z pełnoprawnych bezpłatnych certyfikatów SSL od Let's Encrypt. Przykład wydania certyfikatu Let's Encrypt SSL i powiązania go z witryną IIS.

Aby utworzyć certyfikat, musisz określić wartości -Dnsname (Nazwa serwera DNS, nazwa może być dowolna i inna niż nazwa hosta lokalnego) i -CertStoreLocation (sekcja lokalnego magazynu certyfikatów, w którym zostanie umieszczony wygenerowany certyfikat). Za pomocą polecenia cmdlet można utworzyć certyfikat z podpisem własnym w systemie Windows 10 (w naszym przykładzie), Windows 8 / 8.1 i Windows Server 2016/2012/2012 R2.

Aby utworzyć certyfikat dla nazwy DNS test.contoso.com i umieścić go na liście certyfikatów komputerów osobistych, wykonaj polecenie:

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

Katalog: Microsoft.PowerShell.Security \ Certificate :: LocalMachine \ My
Temat odcisku palca
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN = test.contoso.com

Domyślnie samopodpisany certyfikat jest generowany z następującymi ustawieniami:

  • Algorytm kryptograficzny: RSA;
  • Rozmiar klucza: 2048 trochę;
  • Prawidłowe opcje użycia klucza:  Uwierzytelnianie klienta i Uwierzytelnianie serwera;
  • Certyfikat może być wykorzystany do: Podpis cyfrowy, Kluczowe szyfrowanie ;
  • Ważność certyfikatu: 1 rok.

To polecenie utworzy nowy certyfikat i zaimportuje go do pamięci komputera osobistego. Przystawka otwierająca certlm.msc, sprawdź to w sekcji Osobiste pojawiła się nowa baza certyfikatów komputerowych.

Jak widać, właściwości certyfikatu wskazują, że tego certyfikatu można używać do uwierzytelniania klienta (uwierzytelnianie klienta), ale jest on również ważny do uwierzytelniania serwera (uwierzytelnianie serwera).

Uwaga. Okres ważności takiego samopodpisanego certyfikatu jest ograniczony do 1 roku od daty jego utworzenia. Aby wystawić certyfikat na 3 lata, uruchom następujące polecenia:

$ Todaydate = Get-Date
$ add3year = $ Todaydate.AddYears (3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $ add3year -CertStoreLocation cert: \ LocalMachine \ My

Aby wyeksportować otrzymany certyfikat z kluczem prywatnym do chronionego hasłem pliku pfx, potrzebujemy jego odcisku palca, który należy skopiować z wyników polecenia New-SelfSignedCertificate:

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

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

Możesz wyeksportować klucz publiczny certyfikatu:

Certyfikat eksportowy - Cert Cert: \ LocalMachine \ My \ 2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ testcert.cer

Wynikowy klucz publiczny lub sam plik certyfikatu można zainstalować na serwerze sieciowym lub w klientach domeny przy użyciu obiektu zasad grupy (przykład instalacji certyfikatu na komputerze przy użyciu zasad grupy).

Jedną przydatną funkcją cmdletu New-SelfSignedCertificate jest możliwość utworzenia certyfikatu o kilku różnych nazwach. Temat Alternatywa Nazwy (SAN).

Uwaga. Jeśli tworzony jest certyfikat o wielu nazwach, pierwsze imię w parametrze DnsName zostanie użyte jako certyfikat CN (nazwa zwyczajowa).

Na przykład utwórz certyfikat o następujących nazwach:

  • Nazwa podmiotu (CN): adfs1.contoso.com
  • Alternatywna nazwa podmiotu (DNS): web_gw.contoso.com
  • Alternatywna nazwa podmiotu (DNS): enterprise_reg.contoso.com

Polecenie utworzenia certyfikatu będzie wyglądać następująco:

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

Możesz także wystawić certyfikat dla całej przestrzeni nazw w domenie, w tym celu podaj nazwę serwera jako * .contoso.com.

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

Utwórz samopodpisany certyfikat podpisywania kodu do podpisywania kodu

W PoweShell 3.0 cmdlet New-SelfSifgnedCertificate wygenerował tylko certyfikaty SSL, których nie można było użyć do podpisania kodu sterownika i aplikacji (w przeciwieństwie do certyfikatów generowanych przez MakeCert).

W PowerShell 5 nowej wersji cmdletu New-SelfSifgnedCertificate można teraz używać do wydawania certyfikatów typu podpisywania kodu..

Aby utworzyć samopodpisany certyfikat do podpisywania kodu aplikacji, uruchom polecenie:

$ cert = New-SelfSignedCertificate -Temat „Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

Spróbujmy podpisać skrypt PowerShell przy użyciu tego certyfikatu:

Set-AuthenticodeSignature -FilePath C: \ PS \ test_script.ps1 -Certificate $ cert

Jeśli ostrzeżenie UnknownError pojawi się podczas wykonywania polecenia, to certyfikat jest niezaufany, ponieważ znajduje się w osobistym magazynie certyfikatów użytkownika.

Musisz przenieść go do certyfikatów głównych (nie zapomnij okresowo sprawdzać magazynu certyfikatów systemu Windows pod kątem niezaufanych certyfikatów i aktualizować listy certyfikatów głównych):

Move-Item -Path $ cert.PSPath -Destination "Cert: \ CurrentUser \ Root"

Następnie możesz podpisać skrypt PowerShell przy użyciu tego samopodpisanego certyfikatu.