Оглавление:
Этот модуль официально не поддерживается. Он был создан как удобный модуль для генерации самозаверяющих сертификатов для упрощения тестирования функциональности HTTPS.
Этот модуль не следует использовать ни в каких производственных сценариях; он предназначен для создания самозаверяющих сертификатов только в целях тестирования.
Этот модуль предназначен для удобного кросс-платформенного способа создания самозаверяющих сертификатов как в PowerShell Core, так и в Windows PowerShell 5.1.
Поскольку в .NET Core уже встроен собственный кроссплатформенный API криптографии/сертификатов, этот модуль представляет собой собственный модуль сценария PowerShell без двоичных зависимостей.
Некоторые цели этого модуля включают в себя:
X509HighlySpecificCryptoObject
Возможно, вы захотите взглянуть на несколько других альтернатив создания самозаверяющего сертификата, перечисленных здесь:
Командлет New-SelfSignedCertificate
Windows PowerShell из модуля PkiClient.
Его можно использовать из PowerShell Core в Windows с помощью модуля WindowsCompatibility следующим образом:
Install-Module WindowsCompatibility
Import-WinModule PKI
New-SelfSignedCertificate # args as needed
Однако этот модуль доступен только в Windows — версии для Linux нет.
Глобальный инструмент dotnet dotnet-dev-certs
, предназначенный для создания самозаверяющих сертификатов для разработки ASP.NET Core.
Его можно установить из CLI dotnet.
openssl
, который работает кроссплатформенно, но может быть не выгоден по сравнению с собственным вариантом PowerShell и использует формат PEM, а не PFX.
Для создания простого сертификата подойдет следующее:
> New-SelfSignedCertificate
Certificate written to C:UsersroholtDocumentsDevsandboxcertificate.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A51B016324B5D2F11340CDCC52004B8129C88D3B CN = localhost
Это создаст новый сертификат с именем certificate.pfx
в вашем CWD для localhost
. Сама команда возвращает объект X509Certificate2
, описывающий сертификат, записанный на диск. Вы можете проверить этот объект, чтобы найти его свойства. Этот сертификат не будет иметь никакого использования ключей, базовых ограничений, расширенного использования ключей и расширения ключа идентификатора субъекта.
Примечание . Чтобы повторить эту команду, вам понадобится параметр -Force
, чтобы перезаписать старый сертификат, созданный вами ранее.
Команда New-SelfSignedCertificate
позволяет указывать полные отличительные имена, а также несколько других параметров:
> $password = ConvertTo-SecureString - Force - AsPlainText ' your password '
> $distinguishedName = @ {
CommonName = ' example.org '
Country = ' US '
StateOrProvince = ' Nebraska '
Locality = ' Omaha '
Organization = ' Umbrella Corporation '
OrganizationalUnit = ' Sales '
EmailAddress = ' [email protected] '
}
> $certificateParameters = $distinguishedName + @ {
OutCertPath = ' C:UsersyouDocumentscert.pfx '
StartDate = [ System.DateTimeOffset ]::Now
Duration = [ timespan ]::FromDays( 365 )
Passphrase = $password
CertificateFormat = ' Pfx ' # Values from [System.Security.Cryptography.X509Certificates.X509ContentType]
KeyLength = 4096
ForCertificateAuthority = $true
KeyUsage = ' DigitalSignature ' , ' KeyEncipherment ' # Values from [System.Security.Cryptography.X509Certificates.X509KeyUsageFlags]
EnhancedKeyUsage = ' ServerAuthentication ' , ' ClientAuthentication '
}
> New-SelfSignedCertificate @certificateParameters - Force
WARNING: Parameter ' EmailAddress ' is obsolete. The email name component is deprecated by the PKIX standard
Certificate written to C:UsersroholtDocumentsDevsandboxhere.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
7445433CB2BB4948E12794A167C6725DC214AA84 CN = example.org , O.. . {Server Authentication , Client Authentication}
Сертификат, созданный приведенной выше командой, будет иметь следующие свойства:
Отличительное имя эмитента и субъекта установлено следующим образом:
CN=example.org, OU=Sales, O=Umbrella Corporation, L=Omaha, S=Nebraska, C=US, [email protected]
Защита паролем (в данном случае паролем 'Your password'
).
Срок действия составляет один год, начиная с момента создания (с усеченными миллисекундами).
Ключ RSA длиной 4096 бит.
Расширение базовых ограничений, в котором для CertificateAuthority
установлено значение true
.
Указано использование основных ключей Digital Signature
и Key Encipherment
.
Указано расширенное использование ключей Server Authentication
и Client Authentication
.
Команда также предлагает параметр -AdditionalExtension
, который принимает массив System.Security.Cryptography.X509Certificates.X509Extension
для добавления к любому генерируемому сертификату.
Модуль пока не поддерживает файлы PEM, которые активно используются в мире Linux. Хотя они не являются форматом сертификатов сами по себе, они представляют собой общую кодировку сертификатов, и мы должны постараться каким-то образом их поддерживать.
В настоящее время автору не известно о встроенной поддержке PEM в PowerShell Core или .NET Core.
В настоящее время все расширения сертификатов, созданные этим модулем, устанавливают для поля Critical
false
чтобы обеспечить большую гибкость.
Однако может быть желательно настроить некоторые или все из них как Critical
. В идеале это можно было бы сделать, не загромождая команды и без того большим количеством параметров.
В настоящее время в ServerAuthentication
и ClientAuthentication
поддерживается расширенное использование ключей (в ограниченном виде, для простоты использования).
В идеале для этого можно было бы предоставить больше возможностей.
Модуль может предоставить набор классов, которые генерируют X509Extension
, описывающие часто используемые расширения сертификатов.
Этот модуль имеет лицензию MIT. См. ЛИЦЕНЗИЯ.txt.