Самоподписанный сертификат ssl windows server 2012

Как с помощью Powershell создать самоподписанный SSL сертификат

Большинству администраторов Windows, знакомых с темой PKI, известна утилита MakeCert.exe, с помощью которой можно создать самоподписанный сертификат. Эта утилита включена в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В современных версиях Windows 11/10/8.1 и Windows Server 2022/2019/2016/2012R2 вы можете создать самоподписанный сертификат с помощью встроенных командлетов PowerShell без использования дополнительных утилит.

Содержание:

  • New-SelfSignedCertificate: создать самоподписанный SSL сертификат в PowerShell
  • Как сгенерировать SAN (SubjectAltName) сертификат с помощью PowerShell?
  • Экспорт самоподписаного сертификата в Windows
  • Сгенерировать сертификат для подписи кода типа Code Signing
  • Создать самоподписанный SSL сертификат SHA-256 для IIS

New-SelfSignedCertificate: создать самоподписанный SSL сертификат в PowerShell

Для создания самоподписанного сертификата в PowerShell нужно использовать командлет New-SelfSignedCertificate, входящий в состав модуля PKI (Public Key Infrastructure).

Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:

Get-Command -Module PKI

управление самоподписанными сертфикатми встроенным модулем powershell pki

Самоподписанные SSL сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.

Совет. Не забывайте, что вы можете использования полноценные бесплатные SSL сертификаты от Let’s Encrypt. Например, вы можете SSL сертификат Let’s Encrypt и привязать его к сайту IIS.

Для создания сертификата нужно указать значения -DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и -CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат).

Чтобы создать новый SSL сертификат для DNS имени test.contoso.com (указывается FQDN имя) и поместить его в список персональных сертификатов компьютера, выполните команду:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:LocalMachineMy

New-SelfSignedCertificate командлет создать SSL сертификат в Windows

Команда вернет отпечаток нового сертификата (Thumbprint), Subject и EnhancedKeyUsageList. По умолчанию такой сертификат можно использовать для аутентификации клиента Client Authentication (1.3.6.1.5.5.7.3.2) или сервера Server Authentication (1.3.6.1.5.5.7.3.1).

Если вы запустите эту команду в PowerShell без прав администратор, появится ошибка:

New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

Если вы указали нестандартный криптографический провайдер CSPs (например, с помощью параметров
-KeyAlgorithm "ECDSA_secP256r1" -Provider 'Microsoft Smart Card Key Storage Provider'
), убедитесь, что он установлен на компьютере (по умолчанию используется CSP Microsoft Enhanced Cryptographic Provider). Иначе появится ошибка:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

По-умолчанию генерируется самоподписанный сертификат со следующим параметрами:

  • Криптографический алгоритм: RSA;
  • Размер ключа: 2048 бит;
  • Допустимые варианты использования ключа: Client Authentication и Server Authentication;
  • Сертификат может использоваться для: Digital Signature, Key Encipherment ;
  • Срок действия сертификата: 1 год.
  • Криптопровадер: Microsoft Software Key Storage Provider

Данная команда создаст новый сертификат и импортирует его в персональное хранилище компьютера. Откройте оснастку certlm.msc и проверьте, что в разделе Personal хранилища сертификатов компьютера появился новый сертификат.

Самоподписанный сертифкат в разделе личных сертификатов

С помощью командлета Get-ChildItem можно вывести все параметры созданного сертификата по его отпечатку (Thumbprint):

Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -eq 76360EAA92D958ECF2717261F75D426E6DB5B4D1 | Select-Object *

вывести параметры самоподписанного сертификата из powershell

PSPath                   : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy76360EAA92D958ECF2717261F75D426E6
                           DB5B4D1
PSParentPath             : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
PSChildName              : 76360EAA92D958ECF2717261F75D426E6DB5B4D1
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.SecurityCertificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {test.contoso.com}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
                           System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName             :
HasPrivateKey            : True
PrivateKey               : System.Security.Cryptography.RSACng
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 12/2/2023 3:41:18 PM
NotBefore                : 12/2/2022 3:21:18 PM
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
 RawData                  : {48, 130, 3, 45…}
SerialNumber             : 24682351DA9C59874573BA2B5BB39874
SignatureAlgorithm       : System.Security.Cryptography.Oid
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
Thumbprint               : 76360EAA92D958ECF2717261F75D426E6DB5B4D1
Version                  : 3
Handle                   : 2007435579936
Issuer                   : CN=test.contoso.com
Subject                  : CN=test.contoso.com 

Примечание. Срок действия такого самоподписанного сертификата истекает через 1 год с момента его создания. Можно задать другой срок действия сертификата с помощью атрибута NotAfter.Чтобы выпустить сертификат на 3 года, выполните следующие команды:

$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $add3year -CertStoreLocation cert:LocalMachineMy

Можно создать цепочку сертификатов. Сначала создается корневой сертификат (CA), а на основании него генерируется SSL сертификат сервера:

$rootCert = New-SelfSignedCertificate -Subject "CN=TestRootCA,O=TestRootCA,OU=TestRootCA" -KeyExportPolicy Exportable  -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA'  -HashAlgorithm 'SHA256'  -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider"
New-SelfSignedCertificate -CertStoreLocation cert:LocalMachineMy -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature

Чтобы изменить длину ключа сертификата и алгоритм шифрования, нужно использовать параметры
–KeyAlgorithm
,
–KeyLength
и
–HashAlgorithm
. Например:

New-SelfSignedCertificate -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm "SHA256"

Если на компьютере доступен модуль TPM 2.0, можно использовать его для защиты ключа:

New-SelfSignedCertificate -Type Custom -Provider "Microsoft Platform Crypto Provider" ...

Провайдер Microsoft Platform Crypto Provider использует Trusted Platform Module чип устройства для создания ассиметричного ключа.
$Params = @{
"DnsName" = "mylocalhostname"
"CertStoreLocation" = "Cert:\CurrentUser\My"
"KeyUsage" = "KeyEncipherment","DataEncipherment","KeyAgreement"
"Type" = "DocumentEncryptionCert"
}
New-SelfSignedCertificate @Params

Как сгенерировать SAN (SubjectAltName) сертификат с помощью PowerShell?

Командлет New-SelfSignedCertificate позволяет создать сертификат с несколькими различными именами Subject Alternative Names (SAN).

Примечание. Утилита Makecert.exe, в отличии от командлета New-SelfSignedCertificate, не умеет создавать сертификаты с SAN.

Если создается сертификат с несколькими именами, первое имя в параметре DnsName будет использоваться в качестве CN (Common Name) сертификата. К примеру, создадим сертификат, у которого указаны следующие имена:

  • Subject Name (CN): adfs1.contoso.com
  • Subject Alternative Name (DNS): web-gw.contoso.com
  • Subject Alternative Name (DNS): enterprise-reg.contoso.com

Команда создания сертификата будет такой:

New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:LocalMachineMy

Сертификат на несколько DNS имен

Также можно сгенерировать wildcard сертификат для всего пространства имен домена, для этого в качестве имени сервера указывается *.contoso.com.

New-SelfSignedCertificate -certstorelocation cert:localmachinemy -dnsname *.contoso.com

Вы можете привязать сертификат не только к DNS имени, но и к IP адресу. Для этого вместе параметр -DnsName нужно использовать -TextExtension. Например:

New-SelfSignedCertificate -TextExtension @("2.5.29.17={text}IPAddress=10.10.2.3&DNS=TESTServer1&DNS=TESTServer1.local")

Как вы видите, в поле Subject Alternative Name теперь содержится IP адрес.

сгенерировать ssl сертификат для ip адреса

Экспорт самоподписаного сертификата в Windows

Для экспорта полученного сертификата c закрытым ключом в pfx файл, защищенный паролем, нужно получить его отпечаток (Thumbprint). Сначала нужно указать пароль защиты сертификата и преобразовать его в формат SecureString. Значение Thumbprint нужно скопировать из результатов выполнения команды New-SelfSignedCertificate.

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

Export-PfxCertificate -Cert cert:LocalMachineMy2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:test.pfx -Password $CertPassword

Export-PfxCertificate - экспорт сертификата в файлМожно экспортировать открытый ключ сертификата:

Export-Certificate -Cert Cert:LocalMachineMy2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:testcert.cer

Проверьте, что в указанном каталоге появился CER (PFX) файл сертификата. Если щелкнуть по нему правой клавишей и выбрать пункт меню Install Certificate, можно с помощью мастера импорта сертификатов добавить сертификат в корневые доверенные сертификаты компьютера.

установить cer/pfx сертификат с помощью powershell

Выберите Store location -> Local Machine, Place all certificates in the following store -> Trusted Root Certification Authorities.

импорт сертфиката в доверенные корневые сертфикаты компьютера

Можно создать сертификат и сразу импортировать его в доверенные корневые сертификаты компьютера командами:
$cert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $cert -FilePath C:certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName

Полученный открытый ключ или сам файл сертификата можно распространить на все компьютеры и сервера в домене с помощью GPO (пример установки сертификата на компьютеры с помощью групповых политик).

Сгенерировать сертификат для подписи кода типа Code Signing

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

В версии PowerShell 5 командлет New-SelfSifgnedCertificate теперь можно использовать чтобы выпустить сертификат типа Code Signing.

Вы можете обновить версию PowerShell согласно инструкции.

Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:

$cert = New-SelfSignedCertificate -Subject "Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy

Теперь можно подписать ваш PowerShell скрипт эти сертификатом:

Set-AuthenticodeSignature -FilePath C:PStest_script.ps1 -Certificate $cert

Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.

Ошибка UnknownError при подписывании PowerShell скрипта самоподписанным сертификатом

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

Move-Item -Path $cert.PSPath -Destination "Cert:CurrentUserRoot"

Теперь вы можете использовать этот самоподписанный сертификат для подписи PowerShell скриптов, драйверов или приложений.

Создать самоподписанный SSL сертификат SHA-256 для IIS

Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с использованием алгоритма шифрования SHA-1. Такие сертификаты многими браузерами считаются недоверенными, поэтому они могут выдавать предупреждение о небезопасном подключении. Командлет New-SelfSignedCertificate позволяет создать более популярный тип сертификата с помощью алгоритма шифрования SHA-256.

сгенерировать самоподписанный сертификат в iis

Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.

привязать самоподписанный ssl сертфикат к сайту в IIS Manager

Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.

Также можно привязать SSL сертификат к сайту IIS по его отпечатку:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation "*:443:" -CertificateThumbPrint $yourCert.Thumbprint -CertStoreLocation "Cert:LocalMachineMy" -Protocol https

  • Главная
  •  — 
  • Статьи 1С
  •  — 
  • Статьи и инструкции по 1С
  •  — 
  • Техподдержка

В статье рассмотрим как создать самоподписанный SSL сертификат с помощью OpenSSL на Windows Server, а также установка сертификата в IIS и привязка к сайту.

Что такое SSL-сертификат и для чего он нужен?

По сути, SSL-сертификат — это цифровая подпись вашего сайта, подтверждающая его подлинность. Использование сертификата позволяет защитить как владельца сайта, так и его клиентов.

SSL-сертификат даёт возможность владельцу применить к своему сайту технологию SSL-шифрования.

Таким образом, назначение SSL-сертификата — обеспечить безопасное соединение между сервером и браузером пользователя, надёжно защитить данные от перехвата и подмены.

Как создать самоподписанный SSL сертификат и установить его на Windows Server (IIS)

Прежде всего нужно установить утилиту OpenSSL. Как ее установить рассказано в отдельной статье.

Далее, создаем отдельную папку в которой будем создавать файлы сертификата (к примеру C:OpenSSL)

Открыть командную строку в режиме Администратор

Правой кнопкой по кнопке ПУСК — Командная строка (Администратор)

Перейдем в нашу папку

Команда cd «c:OpenSSL»

Генерируем приватный ключ

Команда openssl genrsa -out server.key 2048

Выполняем запрос на сертификат

Команда: openssl req -new -key server.key -out server.csr

Вводим информацию и компании и домене

Генерируем самоподписанный сертификат

Команда openssl req -new -x509 -days 365 -key server.key -out server.crt

Преобразуем сертификат и ключ в файл .pfx

Команда openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx

придумайте пароль и вводите его два раза, при этом не будет видно что он вводится

Импортируем сертификат в наш веб-сервер

Открываем Диспетчер служб IIS

Приязываем сертификат к сайту

Делаем перезапуск

Готово.

После этих действий ваш сайт будет доступен по протоколу HTTPS

Назад к списку статей


Павел4 декабря 2021 13:46

Добрый день.  А в чем разника созданного в Open SSL  сертификате  и  просто  созданного  из  самого ISS в  разделе Сертификаты Сервера  самозаверенного сертификата ?  

ИмяЦитировать0

Комментировать

external help file Module Name online version schema

Microsoft.CertificateServices.PKIClient.Cmdlets.dll-Help.xml

pki

https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate?view=windowsserver2012-ps&wt.mc_id=ps-gethelp

2.0.0

SYNOPSIS

Creates a new self-signed certificate for testing purposes.

SYNTAX

New-SelfSignedCertificate [-DnsName <String[]>] [-CloneCert <Certificate>] [-CertStoreLocation <String>]
 [-WhatIf] [-Confirm] [<CommonParameters>]

DESCRIPTION

The New-SelfSignedCertificate cmdlet creates a self-signed certificate for testing purposes.
Using the CloneCert parameter, a test certificate can be created based on an existing certificate with all settings copied from the original certificate except for the public key.
A new key of the same algorithm and length will be created.

If an existing certificate is not being cloned, then an SSL server certificate with the following default settings is created:

— Subject: Empty

— Key: RSA 2048

— EKUs: Client Authentication and Server Authentication

— Key Usage: Digital Signature, Key Encipherment (a0)

— Validity Period: One year

Delegation may be required when using this cmdlet with Windows PowerShell® remoting and changing user configuration.

EXAMPLES

EXAMPLE 1

PS C:>New-SelfSignedCertificate -DnsName www.fabrikam.com, www.contoso.com -CertStoreLocation cert:LocalMachineMy

This example creates a self-signed SSL server certificate in the computer MY store with the Subject Alternative Name set to www.fabrikam.com, www.contoso.com and Subject and Issuer name set to www.fabrikam.com.

EXAMPLE 2

PS C:>Set-Location -Path cert:LocalMachineMy



PS C:>$copyOf = (Get-ChildItem -Path E42DBC3B3F2771990A9B3E35D0C3C422779DACD7)



PS C:>New-SelfSignedCertificate -CloneCert $copyOf

This example creates a copy of the certificate specified by the CloneCert parameter and puts it in the computer MY store.

PARAMETERS

-CertStoreLocation

Specifies the certificate store in which a new certificate will be stored.
The current path is the default value.

Type: String
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: .
Accept pipeline input: False
Accept wildcard characters: False

-CloneCert

Identifies the certificate to copy when creating a new certificate.
The certificate being cloned can be identified by an X509 certificate or the file path in the certificate provider.
When this parameter is used, all fields and extensions of the certificate will be inherited except the public key (a new key of the same algorithm and length will be created) and the NotAfter and NotBefore fields (the validity period for the NotBefore field is set to ten minutes in the past).

Type: Certificate
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: None
Accept pipeline input: True (ByValue)
Accept wildcard characters: False

-Confirm

Prompts you for confirmation before running the cmdlet.

Type: SwitchParameter
Parameter Sets: (All)
Aliases: cf

Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False

-DnsName

Specifies one or more DNS names to put into the Subject Alternative Name extension of the certificate when a certificate to be copied is not specified via the CloneCert parameter.
The first DNS name is also saved as Subject Name and Issuer Name.

Type: String[]
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-WhatIf

Shows what would happen if the cmdlet runs.
The cmdlet is not run.

Type: SwitchParameter
Parameter Sets: (All)
Aliases: wi

Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).

INPUTS

Microsoft.CertificateServices.Commands.Certificate

The Certificate object can either be provided as a Path object to a certificate or a X509Certificate2 object.

OUTPUTS

System.Security.Cryptography.X509Certificates.X509Certificate2

A X509Certificate2 object for the certificate that has been created.

NOTES

RELATED LINKS

Get-ChildItem

Set-Location

external help file Module Name online version schema

Microsoft.CertificateServices.PKIClient.Cmdlets.dll-Help.xml

pki

https://learn.microsoft.com/powershell/module/pki/new-selfsignedcertificate?view=windowsserver2012-ps&wt.mc_id=ps-gethelp

2.0.0

SYNOPSIS

Creates a new self-signed certificate for testing purposes.

SYNTAX

New-SelfSignedCertificate [-DnsName <String[]>] [-CloneCert <Certificate>] [-CertStoreLocation <String>]
 [-WhatIf] [-Confirm] [<CommonParameters>]

DESCRIPTION

The New-SelfSignedCertificate cmdlet creates a self-signed certificate for testing purposes.
Using the CloneCert parameter, a test certificate can be created based on an existing certificate with all settings copied from the original certificate except for the public key.
A new key of the same algorithm and length will be created.

If an existing certificate is not being cloned, then an SSL server certificate with the following default settings is created:

— Subject: Empty

— Key: RSA 2048

— EKUs: Client Authentication and Server Authentication

— Key Usage: Digital Signature, Key Encipherment (a0)

— Validity Period: One year

Delegation may be required when using this cmdlet with Windows PowerShell® remoting and changing user configuration.

EXAMPLES

EXAMPLE 1

PS C:>New-SelfSignedCertificate -DnsName www.fabrikam.com, www.contoso.com -CertStoreLocation cert:LocalMachineMy

This example creates a self-signed SSL server certificate in the computer MY store with the Subject Alternative Name set to www.fabrikam.com, www.contoso.com and Subject and Issuer name set to www.fabrikam.com.

EXAMPLE 2

PS C:>Set-Location -Path cert:LocalMachineMy



PS C:>$copyOf = (Get-ChildItem -Path E42DBC3B3F2771990A9B3E35D0C3C422779DACD7)



PS C:>New-SelfSignedCertificate -CloneCert $copyOf

This example creates a copy of the certificate specified by the CloneCert parameter and puts it in the computer MY store.

PARAMETERS

-CertStoreLocation

Specifies the certificate store in which a new certificate will be stored.
The current path is the default value.

Type: String
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: .
Accept pipeline input: False
Accept wildcard characters: False

-CloneCert

Identifies the certificate to copy when creating a new certificate.
The certificate being cloned can be identified by an X509 certificate or the file path in the certificate provider.
When this parameter is used, all fields and extensions of the certificate will be inherited except the public key (a new key of the same algorithm and length will be created) and the NotAfter and NotBefore fields (the validity period for the NotBefore field is set to ten minutes in the past).

Type: Certificate
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: None
Accept pipeline input: True (ByValue)
Accept wildcard characters: False

-Confirm

Prompts you for confirmation before running the cmdlet.

Type: SwitchParameter
Parameter Sets: (All)
Aliases: cf

Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False

-DnsName

Specifies one or more DNS names to put into the Subject Alternative Name extension of the certificate when a certificate to be copied is not specified via the CloneCert parameter.
The first DNS name is also saved as Subject Name and Issuer Name.

Type: String[]
Parameter Sets: (All)
Aliases: 

Required: False
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

-WhatIf

Shows what would happen if the cmdlet runs.
The cmdlet is not run.

Type: SwitchParameter
Parameter Sets: (All)
Aliases: wi

Required: False
Position: Named
Default value: False
Accept pipeline input: False
Accept wildcard characters: False

CommonParameters

This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).

INPUTS

Microsoft.CertificateServices.Commands.Certificate

The Certificate object can either be provided as a Path object to a certificate or a X509Certificate2 object.

OUTPUTS

System.Security.Cryptography.X509Certificates.X509Certificate2

A X509Certificate2 object for the certificate that has been created.

NOTES

RELATED LINKS

Get-ChildItem

Set-Location

Most Windows administrators, who are familiar with PKI, know about the MakeCert.exetool, which allows to create self-signed certificates. This tool is part of the Microsoft .NET Framework SDK and Microsoft Windows SDK. On modern Windows versions (Windows 11/10/8.1 and Windows Server 2022/2019/2016/2012R2) you can create a self-signed certificate using the built-in PowerShell cmdlet New-SelfSignedCertificate without using additional tools.

Contents:

  • New-SelfSignedCertificate: Creating a Self-Signed Certificate with PowerShell
  • Create a Certificate with the Subject Alternative Name (SAN) Using PowerShell
  • How to Export a Self-Signed Certificate on Windows?
  • Generating a Self-Signed Certificate for Code Signing on Windows
  • Creating SHA-256 Self-Signed SSL Certificate in IIS on Windows Server

New-SelfSignedCertificate: Creating a Self-Signed Certificate with PowerShell

To create a self-signed certificate with PowerShell, you can use the built-in New-SelfSignedCertificate cmdlet, which is a part of PowerShell PKI (Public Key Infrastructure) module:

To list all available cmdlets in the PKI module, run the command:

Get-Command -Module PKI

powershell pki module - manage certificates on windows

It is recommended to use self-signed certificates for testing/developing tasks or to provide certificates for internal Intranet services (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess, etc.) if you cannot deploy PKI/CA infrastructure or purchase a trusted certificate from an external provider.

To create a certificate, you have to specify the values of –DnsName (name of a server, the name may be arbitrary and even different from the current hostname) and -CertStoreLocation (a local certificate store in which the generated certificate will be placed).

To create a new SSL certificate (with the default SSLServerAuthentication type) for the DNS name test.contoso.com (use an FQDN name) and place it to the personal certificates on a computer, run the following command:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:LocalMachineMy

New-SelfSignedCertificate powershell cmdlet on windows

The command will return the Thumbprint, Subject, and EnhancedKeyUsageList of the new certificate. By default, such a certificate can be used for Client Authentication (1.3.6.1.5.5.7.3.2) or Server Authentication (1.3.6.1.5.5.7.3.1).

If you run this command in a non-elevated PowerShell prompt (without local admin permissions), an error will appear:

New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)

If you have specified a non-standard cryptographic provider (CSP) ( for example, using the -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider"parameters), make sure it is installed on your computer (the default is Microsoft Enhanced Cryptographic Provider). Otherwise, an error will appear:

New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

By default, a self-signed certificate is generated with the following settings:

  • Cryptographic algorithm: RSA;
  • Key length: 2048 bit;
  • Acceptable key usage: Client Authentication and Server Authentication;
  • The certificate can be used for: Digital Signature, Key Encipherment;
  • Certificate validity period: 1 year;
  • Crypto provider: Microsoft Software Key Storage Provider.

This command creates a new certificate and imports it into the computer’s personal certificate store. Open the certlm.msc MMC snap-in and make sure that a new certificate appears in the Personal section of the computer’s certificate store.

certlm.msc personal certificate storage

Using the Get-ChildItem cmdlet, you can display all the parameters of the created certificate by its Thumbprint:

Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -eq 2175A76B10F843676951965F52A718F635FFA043 | Select-Object *

list self-signed certificate properties with powershell

PSPath                   : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy2175A76B10F843676951965F52A718F635FFA043
PSParentPath             : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
PSChildName              : 2175A76B10F843676951965F52A718F635FFA043
PSDrive                  : Cert
PSProvider               : Microsoft.PowerShell.SecurityCertificate
PSIsContainer            : False
EnhancedKeyUsageList     : {Client Authentication (1.3.6.1.5.5.7.3.2), Server Authentication (1.3.6.1.5.5.7.3.1)}
DnsNameList              : {test.contoso.com}
SendAsTrustedIssuer      : False
EnrollmentPolicyEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
EnrollmentServerEndPoint : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty
PolicyId                 :
Archived                 : False
Extensions               : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}
FriendlyName             :
IssuerName               : System.Security.Cryptography.X509Certificates.X500DistinguishedName
NotAfter                 : 12/4/2023 5:35:15 PM
NotBefore                : 12/4/2022 5:15:15 PM
HasPrivateKey            : True
PrivateKey               :
PublicKey                : System.Security.Cryptography.X509Certificates.PublicKey
RawData                  : {48, 130, 3, 45...}
SerialNumber             : 6797F5E3F870478D4D3798BEB291DBF3
SubjectName              : System.Security.Cryptography.X509Certificates.X500DistinguishedName
SignatureAlgorithm       : System.Security.Cryptography.Oid
Thumbprint               : 2175A76B10F843676951965F52A718F635FFA043
Version                  : 3
Handle                   : 2834444631568
Issuer                   : CN=test.contoso.com
Subject                  : CN=test.contoso.com

Note. This self-signed certificate will expire 1 year after it was created. You can set a different certificate validity period using the –NotAfter option. For example, you can issue an SSL/TLS certificate with a three-year validity period with the following commands:

$todaydt = Get-Date
$3years = $todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:LocalMachineMy

You can create a certificate chain. First, a root certificate (CA) is created. Then based on it, an SSL server certificate is generated:

$rootCert = New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable  -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA'  -HashAlgorithm 'SHA256'  -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:LocalMachineMy -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature

To change the certificate key length and encryption algorithm, you need to use the -KeyAlgorithm, -KeyLength, and -HashAlgorithm options. For example:

New-SelfSignedCertificate -KeyAlgorithm RSA -KeyLength 2048 -HashAlgorithm "SHA256" …

The Microsoft Platform Crypto Provider allows you to use the device’s Trusted Platform Module chip (TPM 2.0) to protect the key.

New-SelfSignedCertificate -Type Custom -Provider "Microsoft Platform Crypto Provider" ...

You can generate a document encryption certificate to protect your document and email. Use the DocumentEncryptionCert type when creating a cert:

$Params = @{
"DnsName" = "myhostname"
"CertStoreLocation" = "Cert:\CurrentUser\My"
"KeyUsage" = "KeyEncipherment","DataEncipherment","KeyAgreement"
"Type" = "DocumentEncryptionCert"
}
$doccert=New-SelfSignedCertificate @Params

Check the certificate EnhancedKeyUsageList value:

$doccert|select EnhancedKeyUsageList

{Document Encryption (1.3.6.1.4.1.311.80.1)}

get certificate enhancedkeyusagelist: document encryption cert

Create a Certificate with the Subject Alternative Name (SAN) Using PowerShell

The New-SelfSignedCertificate cmdlet allows you to create a certificate with several different Subject Alternative Names (SANs).

Note. The Makecert.exetool, unlike the New-SelfSignedCertificate cmdlet, cannot create SAN and Wildcard certificates.[/alert]

If you want to create a certificate with multiple names, the first name of the DnsName parameter will be used as the CN (Common Name) of the certificate. For example, let’s create a self-signed SAN certificate with the following names:

  • Subject Name (CN): adfs1.contoso.com
  • Subject Alternative Name (DNS): web_gw.contoso.com
  • Subject Alternative Name (DNS): enterprise_reg.contoso.com

You can the following command to generate a certificate with different common names (or even for multiple domains):

New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:LocalMachineMy

certificate with several Subject Alternative Name

Also, you can generate a wildcard certificate for the entire domain namespace by specifying *.contoso.com as the server name.

New-SelfSignedCertificate -certstorelocation cert:localmachinemy -dnsname *.contoso.com

You can generate a self-signed certificate not only for a DNS hostname, but also for an IP address. To do this, you need to use -TextExtension instead of -DnsName parameter. For example:

New-SelfSignedCertificate -TextExtension @("2.5.29.17={text}IPAddress=10.1.2.3&DNS=TESTServer1&DNS=TESTServer1.local")

As you can see, the Subject Alternative Name field now contains the IP address of the host and its DNS names.

create self-signed certificate for an IP address on windows

How to Export a Self-Signed Certificate on Windows?

In order to export the generated certificate with a private key to a password-protected PFX file, you need to specify its Thumbprint. It can be copied from the results of New-SelfSignedCertificate command. You also need to specify the certificate’s security password and convert it to SecureString format:

$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:LocalMachineMy2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:test.pfx -Password $CertPassword

Export-PfxCertificate

You can export the certificate public key as follows (the private key is not included in the export):

Export-Certificate -Cert Cert:LocalMachineMy2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:tstcert.cer

Make sure the *.CER (PFX) certificate file appears in the specified directory. If you right-click it and select the “Install Certificate” menu item, you can use the Certificate Import Wizard to add the certificate to the trusted root certificates on your computer.

install certificate with file explorer on windows 10

Select Cert Store location -> Local Machine, Place all certificates in the following store -> Trusted Root Certification Authorities.

install certificate to trusted root certification authorities

[alert]You can create a certificate and immediately import it into the Trusted Root Certificate store of the computer using the commands:

$SelfSignCert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $SelfSignCert -FilePath C:psexport-certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName

You can deploy this public key or the certificate file itself on all user computers and servers in the Active Directory domain using GPO (How to deploy certificates to users with GPO?).

Generating a Self-Signed Certificate for Code Signing on Windows

In PowerShell 3.0, the New-SelfSifgnedCertificate cmdlet only generates SSL certificates which cannot be used to sign the driver code, application, or script (unlike the certificates generated by the MakeCert utility).

You can use the New-SelfSifgnedCertificate cmdlet to issue Code Signing certificates in PowerShell version 5.0 and newer.

In order to create a self-signed certificate for sign application code, run the command:

$cert = New-SelfSignedCertificate -Subject "My Code Signing Certificate” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy

Now you can sign your PowerShell script file with a self-signed certificate:

Set-AuthenticodeSignature -FilePath C:PSmy_posh_script.ps1 -Certificate $cert

If you are receiving an UnknownError warning when executing the command, this means that the certificate is not trusted, because it is located in the user’s personal certificates store.

signing powershell script using self-signed cert - unknown error

You need to move it to the Trusted Root Certificate store (don’t forget to periodically scan the Windows certificate root store for untrusted and suspicious certificates and update the lists of trusted root certificates).

Move-Item -Path $cert.PSPath -Destination "Cert:CurrentUserRoot"

Now you can use this self-signed certificate to sign your PowerShell scripts, drivers, or applications.

Creating SHA-256 Self-Signed SSL Certificate in IIS on Windows Server

Please note that when creating a self-signed certificate for IIS through the Internet Information Manager console (using Create Self-Signed Certificate action menu item), an SSL certificate is created using the SHA-1 encryption algorithm. Such certificates are considered untrusted by many browsers and cannot be used to establish a secure connection (or you may see other SSL warnings and errors). The New-SelfSignedCertificate cmdlet allows you to create a more popular type of certificate using the SHA-256 encryption algorithm.

iis create self signed ssl certificate on windows server

You can bind a self-signed SHA-256 certificate generated with PowerShell to an IIS site on Windows Server. If you created an SSL certificate using PowerShell and placed it in the computer’s certificate store, it will automatically be available to IIS sites.

binding self signed sha256 certificate to iis site on windows server

Open the IIS Manager console (inetmgr.exe), select your site, and then select the certificate you created in the Site Binding options. Save your changes.

You can also bind an SSL certificate by its thumbprint to an IIS site:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation "*:443:" -CertificateThumbPrint $yourCert.Thumbprint -CertStoreLocation "Cert:LocalMachineMy" -Protocol https

Большинство администраторов Windows, знакомых с PKI, знакомы с утилитой MakeCert.exe, которая может генерировать самозаверяющий сертификат. Эта служебная программа входит в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В современных версиях Windows 10 / 8.1 и Windows Server 2016 / 2012R2 вы можете создать самозаверяющий сертификат с помощью PowerShell без использования дополнительных утилит.

New-SelfSignedCertificate: командлет PowerShell для генерации самоподписанного сертификата

Чтобы создать самозаверяющий сертификат в PowerShell, необходимо использовать командлет New-SelfSignedCertificate, который является частью модуля инфраструктуры открытых ключей (PKI).

Чтобы вывести список всех командлетов, доступных в модуле PKI, выполните команду:

Get-Command -Module PKI

управление самоподписанными сертификатами с помощью встроенного модуля pki powershell

Самозаверяющие сертификаты рекомендуются для целей тестирования или для предоставления сертификатов для внутренних служб интрасети (IIS, Exchange, прокси-сервер веб-приложений, LDAPS, ADRMS, DirectAccess и т.д.) в тех случаях, когда по какой-либо причине вы покупаете сертификат у внешний провайдер или реализация инфраструктуры PKI / CA невозможны.

Совет. Не забывайте о возможности использовать полноценные бесплатные SSL-сертификаты от Let’s Encrypt. Пример того, как выпустить SSL-сертификат Let’s Encrypt и связать его с сайтом IIS.

Для создания сертификата необходимо указать значения –DnsName (DNS-имя сервера, имя может быть произвольным и отличаться от имени локального хоста) и –CertStoreLocation (раздел локального хранилища сертификатов, в котором будет сгенерирован сертификат быть размещенным). Командлет можно использовать для создания самозаверяющего сертификата в Windows 10 (в нашем примере), Windows 8 / 8.1 и Windows Server 2019/2016/2012 R2.

Чтобы создать новый сертификат SSL типа SSLServerAuthentication (по умолчанию) для DNS-имени test.contoso.com (заданного именем FQDN) и вставить его в список сертификатов персонального компьютера, выполните команду:

New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:LocalMachineMy

New-SelfSignedCertificate - командлет для создания сертификата

Каталог: Microsoft.PowerShell.Security Certificate :: LocalMachine My
Объект идентификации личности
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN = test.contoso.com

Если вы запустите эту команду в PowerShell без прав администратора, вы получите сообщение об ошибке:

New-SelfSignedCertificate: CertEnroll :: CX509Enrollment :: _ CreateRequest: доступ запрещен. 0x80090010 (-2146893808 NTE_PERM)

Если вы указали нестандартный CSP поставщика криптографии (например, с помощью параметров

Directory: Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
Thumbprint                               Subject
----------                               -------
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN=test.contoso.com

), убедитесь, что он установлен на вашем компьютере (по умолчанию используется Microsoft Enhanced Cryptographic Provider CSP). В противном случае отобразится ошибка:

New-SelfSignedCertificate: CertEnroll :: CX509Enrollment :: _ CreateRequest: Неопределенный тип поставщика. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).

По умолчанию самозаверяющий сертификат создается со следующими параметрами:

  • Криптографический алгоритм: RSA;
  • Размер ключа: 2048 бит;
  • Допустимые варианты использования ключа: аутентификация клиента и аутентификация сервера;
  • Сертификат может использоваться для: цифровой подписи, шифрования ключа ;
  • Срок действия сертификата: 1 год.

Эта команда создаст новый сертификат и импортирует его в личную память вашего компьютера. Откройте оснастку certlm.msc и убедитесь, что новый сертификат отображается в разделе «Личные» хранилища сертификатов компьютера.

Как видите, в свойствах сертификата указано, что этот сертификат можно использовать для аутентификации клиента (Client Authentication). Это также действительно для аутентификации сервера).

Самозаверяющий сертификат в разделе личных сертификатов

Используя командлет Get-ChildItem, вы можете просмотреть все параметры сертификата, созданного с помощью его отпечатка):

-KeyAlgorithm "ECDSA_secP256r1" -Provider 'Microsoft Smart Card Key Storage Provider'

просматривать все параметры самозаверяющего сертификата с помощью PowerShell

Microsoft.PowerShell.Security  Сертификат :: LocalMachine  Tools  DC1A0FDE0120085A45D8E14F870148D1E BCB82AE PSParentPath: Microsoft.PowerShell.Security  Сертификат :: LocalMachine  My PSChildName: DC1A0FDE0120085A45D8E14F870148D1E BCB82AE PSParentPath: Microsoft.PowerShell.Security  Сертификат :: LocalMachine  My PSChildName: DC1A0FDE0120085A45D8E14F82Acurity . Проверка подлинности клиента (1.3.6.1.5.5.7.3.2), проверка подлинности сервера (1.3.6.1.5.5.7.3.1)} DnsNameList: {test.contoso.com} SendAsTrustedIssuer: False EnrollmentPolicyEndPoint: Microsoft.CertificateServices.Commands.EnrollmentEndPointPropertyPoint EnrollmentSerrollment : Microsoft.CertificateServices.Commands.EnrollmentEndPointProperty PolicyId: В архиве: Ложные расширения: {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Oid, System.Security.Cryptography.Name: FriendOlyOid Имя эмитента: System.Security.Cryptography.X509Certificates.X500DistinguishedName NotAfter: 30.10.2021 13:10:44 NotBefore: 1/30 0/2020 11:50:44 HasPrivateKey: True PrivateKey: PublicKey: System.Security.Cryptography .X509Certificates.PublicKey RawData: {48, 130, 3, 45...} Серийный номер: 165ECC120612668C4D741A28D4BB8203 Имя субъекта: System.Security.Cptography.Cpto .X500DistinguishedName SignatureAlgorithm: System.Sectography личный: DC1A0FDE0120085A45D8E14F870148D1EBCB82AE Версия: 3 Дескриптор: 2834446249312 Издатель: CN = test.contoso.com Объект: CN = test.contoso.com

Примечание. Срок действия этого самоподписанного сертификата истекает через 1 год с даты его создания. Вы можете установить другой срок действия сертификата с помощью атрибута –NotAfter. Чтобы выдать сертификат на 3 года, выполните следующие команды:

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

Вы можете создать цепочку сертификатов. Сначала создается корневой сертификат (CA) и на его основе создается сертификат сервера SSL:

$ rootCert = New-SelfSignedCertificate -Subject "CN = TestRootCA, O = TestRootCA, OU = TestRootCA" -KeyExportPolicy Exportable -KeyUsage CertSign, CRLSign, DigitalSignature -KeyLength RSA 2048 -Key -Keygraphic
New-SelfSignedCertificate -CertStoreLocation cert: LocalMachine My -DnsName "test2.contoso.com" -Signer $ rootCert -KeyUsage KeyEncipherment, DigitalSignature

Чтобы экспортировать сертификат, полученный с закрытым ключом, в файл pfx, защищенный паролем, вам необходимо получить его личную идентификацию. Во-первых, вам необходимо предоставить пароль безопасности сертификата и преобразовать его в формат SecureString. Значение отпечатка необходимо скопировать из результатов команды New-SelfSignedCertificate.

Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -eq DC1A0FDE0120085A45D8E14F870148D1EBCB82AE | Select-Object *

$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $add3year -CertStoreLocation cert:LocalMachineMy

Export-PfxCertificate: экспортирует сертификат в файл

Вы можете экспортировать открытый ключ сертификата:

$rootCert = New-SelfSignedCertificate -Subject "CN=TestRootCA,O=TestRootCA,OU=TestRootCA" -KeyExportPolicy Exportable  -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA'  -HashAlgorithm 'SHA256'  -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
New-SelfSignedCertificate -CertStoreLocation cert:LocalMachineMy -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature

Убедитесь, что файл сертификата cer (PFX) отображается в указанном каталоге. Если вы щелкните правой кнопкой мыши и выберите «Установить сертификат», вы можете использовать мастер импорта сертификатов, чтобы добавить сертификат в корневые доверенные сертификаты на вашем компьютере.

установить сертификат cer / pfx с помощью PowerShell

Выберите «Местоположение хранилища» -> «Локальный компьютер», введите все сертификаты в следующем хранилище -> «Доверенные корневые центры сертификации.

импорт сертификата в доверенные корневые сертификаты компьютера

Вы можете создать сертификат и сразу же импортировать его в доверенные корневые сертификаты вашего компьютера с помощью команд:
$ cert = Новый самозаверяющий сертификат …..
$ certFile = Экспорт-сертификат -Cert $ cert -FilePath C: certname.cer
Импорт-сертификат -CertStoreLocation Cert: LocalMachine AuthRoot -FilePath $ certFile.FullName

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

Одной из полезных функций командлета New-SelfSignedCertificate является возможность создания сертификата с несколькими альтернативными именами субъектов (SAN).

Примечание. Утилита Makecert.exe, в отличие от командлета New-SelfSignedCertificate, не может создавать сертификаты из SAN.

Если вы создаете сертификат с несколькими именами, имя в параметре DnsName будет использоваться как CN (общее имя) сертификата. Например, давайте создадим сертификат со следующими именами:

  • Имя субъекта (CN): adfs1.contoso.com
  • Альтернативное имя субъекта (DNS): web-gw.contoso.com
  • Альтернативное имя субъекта (DNS): enterprise-reg.contoso.com

Команда для создания сертификата будет выглядеть так:

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

Сертифицирован для нескольких DNS-имен

вы также можете сгенерировать подстановочный сертификат для всего пространства имен домена, указав * .contoso.com в качестве имени сервера.

Export-PfxCertificate -Cert cert:LocalMachineMy2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:test.pfx -Password $CertPassword

Создать самоподписанный сертфикат типа Code Signing для подписывания кода

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

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

Вы можете обновить свою версию PowerShell в соответствии с инструкциями.

Чтобы создать самозаверяющий сертификат подписи кода для приложений, выполните команду:

Export-Certificate -Cert Cert:LocalMachineMy2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:testcert.cer

Теперь вы можете подписать свой сценарий PowerShell следующими сертификатами:

$cert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $cert -FilePath C:certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName

Если во время выполнения команды отображается предупреждение о неизвестной ошибке, этот сертификат не является доверенным, поскольку он находится в личном хранилище сертификатов пользователя.

Неизвестная ошибка при подписании сценария PowerShell самозаверяющим сертификатом

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

New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:LocalMachineMy

Позже вы можете подписать свой сценарий PowerShell этим самозаверяющим сертификатом.

Использование самоподписанного SSL сертификата SHA-256 в IIS

Обратите внимание, что при создании самозаверяющего сертификата для IIS через консоль Internet Information Manager (пункт меню «Создать самоподписанный сертификат») сертификат создается с использованием алгоритма шифрования SHA-1. Многие браузеры считают эти сертификаты ненадежными, поэтому они могут нанести ущерб. Командлет New-SelfSignedCertificate создает более популярный тип сертификата с использованием алгоритма шифрования SHA-256.

создать самоподписанный сертификат в iis

вы можете привязать самозаверяющий сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы создадите сертификат SSL с помощью PowerShell и поместите его в хранилище сертификатов своего компьютера, он будет автоматически доступен для сайтов IIS.

привязать самоподписанный сертификат SSL к сайту в диспетчере IIS

Запустите консоль диспетчера IIS, выберите свой сайт, затем в настройках привязки сайта выберите созданный сертификат и сохраните изменения.

Источник изображения: winitpro.ru

НЕКЕШЕРОВАННЫЙ КОНТЕНТ

Разработчики и ИТ-администраторы, несомненно, нуждаются в развертывании какого-либо веб-сайта через HTTPS с использованием сертификата SSL. Хотя этот процесс довольно прост для производственного сайта, для целей разработки и тестирования вам может понадобиться использовать сертификат SSL и здесь.

В качестве альтернативы приобретению и продлению годового сертификата вы можете воспользоваться способностью вашего Windows Server создавать самоподписанный сертификат, который удобен, прост и полностью отвечает этим требованиям.

Создание самозаверяющего сертификата в IIS

Хотя есть несколько способов выполнить задачу по созданию самозаверяющего сертификата, мы будем использовать служебную программу SelfSSL от Microsoft. К сожалению, он не входит в состав IIS, но доступен бесплатно как часть набора ресурсов IIS 6.0 (ссылка приведена в конце статьи). Несмотря на название «IIS 6.0», эта утилита отлично работает в IIS 7.

Все, что требуется, — это извлечь IIS6RT, чтобы получить утилиту selfssl.exe. Отсюда вы можете скопировать его в свой каталог Windows или на сетевой путь / USB-накопитель для будущего использования на другом компьютере (так что вам не нужно загружать и извлекать полную версию IIS6RT).

Установив служебную программу SelfSSL, выполните следующую команду (от имени администратора), заменив значения в <> соответствующим образом:

selfssl / N: CN = <your.domain.com> / V: <количество действительных дней>

В приведенном ниже примере создается самозаверяющий сертификат с подстановочными знаками для «mydomain.com» и устанавливается его срок действия 9 999 дней. Кроме того, при ответе «да» на запрос этот сертификат автоматически настраивается для привязки к порту 443 внутри веб-сайта по умолчанию IIS.

Хотя к этому моменту сертификат готов к использованию, он хранится только в личном хранилище сертификатов на сервере. Рекомендуется также установить этот сертификат в доверенном корне.

Выберите Пуск> Выполнить (или Windows Key + R) и введите «mmc». Вы можете получить приглашение UAC, примите его, и откроется пустая консоль управления.

В консоли выберите «Файл»> «Добавить / удалить оснастку».

Добавьте сертификаты с левой стороны.

Выберите учетную запись компьютера.

Выберите Локальный компьютер.

Щелкните OK, чтобы просмотреть хранилище локальных сертификатов.

Перейдите в Личные> Сертификаты и найдите сертификат, который вы установили с помощью утилиты SelfSSL. Щелкните сертификат правой кнопкой мыши и выберите Копировать.

Перейдите к Надежным корневым центрам сертификации> Сертификаты. Щелкните правой кнопкой мыши папку «Сертификаты» и выберите «Вставить».

В списке должна появиться запись для сертификата SSL.

На этом этапе у вашего сервера не должно быть проблем с работой с самоподписанным сертификатом.

Экспорт сертификата

Если вы собираетесь получить доступ к сайту, который использует самоподписанный сертификат SSL на любом клиентском компьютере (то есть на любом компьютере, который не является сервером), во избежание потенциального нападения ошибок сертификата и предупреждений следует установить самоподписанный сертификат. на каждой из клиентских машин (которые мы подробно обсудим ниже). Для этого нам сначала нужно экспортировать соответствующий сертификат, чтобы его можно было установить на клиентах.

В консоли с загруженным управлением сертификатами перейдите в раздел Доверенные корневые центры сертификации> Сертификаты. Найдите сертификат, щелкните правой кнопкой мыши и выберите Все задачи> Экспорт.

Когда будет предложено экспортировать закрытый ключ, выберите Да. Нажмите «Далее.

Оставьте значения по умолчанию для формата файла и нажмите Далее.

Введите пароль. Это будет использоваться для защиты сертификата, и пользователи не смогут импортировать его локально без ввода этого пароля.

Введите место для экспорта файла сертификата. Он будет в формате PFX.

Подтвердите свои настройки и нажмите Готово.

Полученный PFX-файл будет установлен на ваши клиентские машины, чтобы сообщить им, что ваш самоподписанный сертификат получен из надежного источника.

Развертывание на клиентских машинах

После того, как вы создали сертификат на стороне сервера и все работает, вы можете заметить, что когда клиентский компьютер подключается к соответствующему URL-адресу, отображается предупреждение о сертификате. Это происходит потому, что центр сертификации (ваш сервер) не является надежным источником сертификатов SSL на клиенте.

Вы можете просмотреть предупреждения и получить доступ к сайту, однако вы можете получать повторяющиеся уведомления в виде выделенной строки URL-адреса или повторяющихся предупреждений о сертификатах. Чтобы избежать этого раздражения, вам просто нужно установить собственный сертификат безопасности SSL на клиентском компьютере.

В зависимости от используемого вами браузера этот процесс может отличаться. IE и Chrome читают из хранилища сертификатов Windows, однако Firefox имеет собственный метод обработки сертификатов безопасности.


Важная заметка:

Вам следует

никогда

установить сертификат безопасности из неизвестного источника. На практике вам следует устанавливать сертификат локально, только если вы его создали. Ни один законный веб-сайт не потребует от вас выполнения этих действий.

Internet Explorer и Google Chrome — установка сертификата локально


Примечание. Хотя Firefox не использует собственное хранилище сертификатов Windows, это все же рекомендуется.

Скопируйте сертификат, который был экспортирован с сервера (файл PFX), на клиентский компьютер или убедитесь, что он доступен по сетевому пути.

Откройте управление локальным хранилищем сертификатов на клиентском компьютере, выполнив те же действия, что и выше. В конечном итоге вы попадете на экран, подобный показанному ниже.

С левой стороны разверните Сертификаты> Доверенные корневые центры сертификации. Щелкните правой кнопкой мыши папку «Сертификаты» и выберите «Все задачи»> «Импорт».

Выберите сертификат, который был скопирован локально на ваш компьютер.

Введите пароль безопасности, назначенный при экспорте сертификата с сервера.

Магазин «Доверенные корневые центры сертификации» должен быть предварительно указан в качестве пункта назначения. Нажмите «Далее.

Проверьте настройки и нажмите Готово.

Вы должны увидеть сообщение об успешном выполнении.

Обновите представление папки «Доверенные корневые центры сертификации»> «Сертификаты», и вы должны увидеть самоподписанный сертификат сервера, указанный в магазине.

Когда это будет сделано, вы сможете перейти на сайт HTTPS, который использует эти сертификаты, и не получать никаких предупреждений или запросов.

Firefox — разрешение исключений

Firefox обрабатывает этот процесс немного по-другому, поскольку он не считывает информацию сертификата из магазина Windows. Вместо того, чтобы устанавливать сертификаты (как таковые), он позволяет вам определять исключения для сертификатов SSL на определенных сайтах.

Когда вы посещаете сайт с ошибкой сертификата, вы получите предупреждение, подобное приведенному ниже. В области синего цвета будет указан соответствующий URL-адрес, к которому вы пытаетесь получить доступ. Чтобы создать исключение для обхода этого предупреждения для соответствующего URL-адреса, нажмите кнопку «Добавить исключение».

В диалоговом окне Добавить исключение безопасности щелкните Подтвердить исключение безопасности, чтобы настроить это исключение локально.

Обратите внимание, что если конкретный сайт перенаправляет на поддомены изнутри себя, вы можете получить несколько предупреждений системы безопасности (каждый раз URL-адрес немного отличается). Добавьте исключения для этих URL-адресов, выполнив те же действия, что и выше.

Вывод

Стоит повторить указанное выше, что вам следует

никогда

установить сертификат безопасности из неизвестного источника. На практике вам следует устанавливать сертификат локально, только если вы его создали. Ни один законный веб-сайт не потребует от вас выполнения этих действий.

Ссылки

Загрузите IIS 6.0 Resource Toolkit (включая служебную программу SelfSSL) от Microsoft

How To Create A Self Signed Certificate

IIS — How To Create Self Signed SSL Certificate For HTTPS

Server 2016 Tutorial: Create Self Signed Certificate And Bind In IIS

How To Create And Configure Self Signed Ssl Certificate For IIS 8 In Windows Server 2012

Chapter 18 : Creating Self Signed Certificate — SSL HTTPS [ HD Version ]

Securing LDAP With A Self Signed Certificate

Tutorial: Client Certificate Authentication

Simple Way To Enable Self Signed Ssl Certificate On Tomcat Server

15. How To Create A Self Signed Certificate In IIS 10 | Windows Server 2019

Docker Private Registry With Self Signed Certificate

Securing Website TLS SSL, Certificate Authority, Self Signed Certificate, And Open Source Tools

How To Create A Self-Signed SSL Certificate For You Websites Using Apache On Ubuntu

How To Generate And Use A SSL Certificate In NodeJS

Понравилась статья? Поделить с друзьями:
  • Самые быстрые браузеры для windows 7 для слабых компьютеров
  • Самоотключение звука по прошествии времени realtek windows 10
  • Самсунг ысх 3400 драйвер windows 10
  • Самая последняя стабильная версия windows 10
  • Самонастраиваемая служба недоступна на удаленном компьютере windows 10