Jak vytvořit certifikát s vlastním podpisem v systému Windows

Většina správců Windows obeznámených s tématem PKI zná tuto utilitu Makecert.exe, pomocí kterého můžete vytvořit certifikát podepsaný sebou. Tento nástroj je součástí sady Microsoft .NET Framework SDK a Microsoft Windows SDK. Windows 8 a Windows Server 2012 mají vestavěnou schopnost vytvořit certifikát podepsaný sám sebou pomocí PowerShell 3.0 a vyšší bez použití speciálních utilit.

Obsah:

  • Použití Cmdlet New-SelfSignedCertificate k vytvoření certifikátů
  • Vytvořte certifikát podepsání kódu s vlastním podpisem pro podepsání kódu

Použití Cmdlet New-SelfSignedCertificate k vytvoření certifikátů

PowerShell navrhuje použití rutiny cmdlet k vytvoření certifikátu s vlastním podpisem Nové-SelfSignedCertificate, část PoSh modulu s názvem PKI (Infrastruktura veřejného klíče).

Chcete-li zobrazit seznam všech dostupných rutin v modulu PKI, spusťte příkaz:

Get-Command -Module PKI

Doporučujeme používat certifikáty s vlastním podpisem pro účely testování nebo k poskytování certifikátů pro interní intranetové služby (IIS, Exchange, proxy webových aplikací, LDAPS, ADRMS, DirectAccess atd.) V případech, kdy z nějakého důvodu zakoupíte certifikát od externího poskytovatele nebo nasazení infrastruktury PKI / CA nemožné.

Tip. Nezapomeňte také na možnost využití plnohodnotných SSL certifikátů z Let's Encrypt. Příklad, jak vydat Let's Encrypt SSL certificate a vázat jej na web IIS.

Chcete-li vytvořit certifikát, musíte zadat hodnoty -Dnsname (Název serveru DNS, název může být libovolný a může se lišit od názvu localhost) a -CertStoreLocation (část místního úložiště certifikátů, kam bude vygenerovaný certifikát umístěn). Pomocí rutiny cmdlet můžete vytvořit certifikát s vlastním podpisem v systému Windows 10 (v našem příkladu), Windows 8 / 8.1 a Windows Server 2016/2012/2012 R2.

Chcete-li vytvořit certifikát pro název DNS test.contoso.com a umístit jej do seznamu certifikátů osobního počítače, spusťte příkaz:

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

Adresář: Microsoft.PowerShell.Security \ Certificate :: LocalMachine \ My
Thumbprint předmět
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN = test.contoso.com

Ve výchozím nastavení je certifikát s vlastním podpisem generován s následujícím nastavením:

  • Kryptografický algoritmus: RSA;
  • Velikost klíče: 2048 trochu;
  • Platné možnosti využití klíče:  Ověření klienta a Ověřování serveru;
  • Certifikát lze použít pro: Digitální podpis, Klíčové šifrování ;
  • Platnost certifikátu: 1 rok.

Tento příkaz vytvoří nový certifikát a importuje jej do úložiště osobního počítače. Úvodní snímek certlm.msc, zkontrolujte to v sekci Osobní počítačový certifikát uložit nový certifikát se objevil.

Jak vidíte, vlastnosti certifikátu naznačují, že tento certifikát lze použít pro ověření klienta (ověření klienta), ale platí také pro ověření serveru (ověření serveru).

Poznámka:. Doba platnosti takového self-signed certifikátu je omezena na 1 rok od data jeho vytvoření. Chcete-li vydat certifikát na 3 roky, spusťte následující příkazy:

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

K exportu přijatého certifikátu soukromým klíčem do souboru pfx chráněného heslem potřebujeme jeho Thumbprint, který musí být zkopírován z výsledků příkazu New-SelfSignedCertificate:

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

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

Můžete exportovat veřejný klíč certifikátu:

Exportní certifikát -Cert Cert: \ LocalMachine \ My \ 2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C: \ testcert.cer

Výsledný veřejný klíč nebo samotný soubor certifikátu lze nainstalovat na webový server nebo klienty domény pomocí GPO (příklad instalace certifikátu na PC pomocí skupinových zásad).

Jednou z užitečných vlastností rutiny New-SelfSignedCertificate je schopnost vytvořit certifikát s několika různými jmény. Předmět Alternativní Jména (SAN).

Poznámka:. Pokud je vytvořen certifikát s více jmény, bude jako certifikát CN (Common Name) použito první jméno v parametru DnsName..

Například vytvořte certifikát s následujícími názvy:

  • Název subjektu (CN): adfs1.contoso.com
  • Alternativní název subjektu (DNS): web_gw.contoso.com
  • Alternativní název subjektu (DNS): enterprise_reg.contoso.com

Příkaz k vytvoření certifikátu bude následující:

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

Můžete také vydat certifikát pro celý obor názvů v doméně, proto zadejte název serveru jako * .contoso.com.

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

Vytvořte certifikát podepsání kódu s vlastním podpisem pro podepsání kódu

V PoweShell 3.0 generoval rutina New-SelfSifgnedCertificate pouze certifikáty SSL, které nemohly být použity k podepsání kódu ovladače a aplikace (na rozdíl od certifikátů generovaných programem MakeCert)..

V PowerShell 5 lze novou verzi rutiny New-SelfSifgnedCertificate nyní použít k vydávání certifikátů typu Signing Type..

Chcete-li vytvořit certifikát s vlastním podpisem pro podepsání kódu aplikace, spusťte příkaz:

$ cert = New-SelfSignedCertificate -Subject "Cert for Signing Code" --Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

Zkusme podepsat skript PowerShell pomocí tohoto certifikátu:

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

Pokud se během provádění příkazu objeví varování UnknownError, není tento certifikát nedůvěryhodný, protože je v osobním úložišti uživatelských certifikátů.

Musíte jej přesunout do kořenových certifikátů (nezapomeňte pravidelně kontrolovat nedůvěryhodné certifikáty v úložišti certifikátů Windows a aktualizovat seznamy kořenových certifikátů):

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

Poté můžete pomocí tohoto podepsaného certifikátu podepsat skript PowerShell.