Большинству администраторов 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
Самоподписанные 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
Команда вернет отпечаток нового сертификата (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 *
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
Также можно сгенерировать 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 адрес.
Экспорт самоподписаного сертификата в 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-Certificate -Cert Cert:LocalMachineMy2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:testcert.cer
Проверьте, что в указанном каталоге появился CER (PFX) файл сертификата. Если щелкнуть по нему правой клавишей и выбрать пункт меню Install Certificate, можно с помощью мастера импорта сертификатов добавить сертификат в корневые доверенные сертификаты компьютера.
Выберите 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, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.
Нужно переместить его в корневые сертификаты (не забывайте периодически проверять хранилище сертификатов 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.
Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.
Запустите консоль 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.exe
tool, 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
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
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.
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 *
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)}
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.exe
tool, 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
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.
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
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.
Select Cert Store location -> Local Machine, Place all certificates in the following store -> 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.
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.
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.
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
Самозаверяющие сертификаты рекомендуются для целей тестирования или для предоставления сертификатов для внутренних служб интрасети (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
Каталог: 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'
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
Вы можете экспортировать открытый ключ сертификата:
$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) отображается в указанном каталоге. Если вы щелкните правой кнопкой мыши и выберите «Установить сертификат», вы можете использовать мастер импорта сертификатов, чтобы добавить сертификат в корневые доверенные сертификаты на вашем компьютере.
Выберите «Местоположение хранилища» -> «Локальный компьютер», введите все сертификаты в следующем хранилище -> «Доверенные корневые центры сертификации.
Вы можете создать сертификат и сразу же импортировать его в доверенные корневые сертификаты вашего компьютера с помощью команд:$ 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
вы также можете сгенерировать подстановочный сертификат для всего пространства имен домена, указав * .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
Если во время выполнения команды отображается предупреждение о неизвестной ошибке, этот сертификат не является доверенным, поскольку он находится в личном хранилище сертификатов пользователя.
Вам необходимо переместить его в корневые сертификаты (не забывайте периодически проверять хранилище сертификатов 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.
вы можете привязать самозаверяющий сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы создадите сертификат SSL с помощью PowerShell и поместите его в хранилище сертификатов своего компьютера, он будет автоматически доступен для сайтов 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