Как создать самоподписанный сертификат с помощью PowerShell – CloudSavvy IT
Самозаверяющие сертификаты это простой способ выполнить тестирование и другие менее важные задачи. Самозаверяющие сертификаты не имеют доверенной цепочки сертификатов, которые их поддерживают, и подписаны пользователем, который их создал. Если вы доверяете субъекту, подписавшему сертификат, вы можете использовать его так же, как и правильно проверенный.
Если вам нужно создать самозаверяющий сертификат, вы можете сделать это с помощью PowerShell. В этой статье вы узнаете, как создать самозаверяющий сертификат в PowerShell.
Создание самоподписанного сертификата
Чтобы создать самозаверяющий сертификат с помощью PowerShell, вы можете использовать New-SelfSignedCertificate
Командлет. Этот командлет включен в PKI
модуль.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Существует много вариантов создания сертификатов. Общие самозаверяющие типы сертификатов SSLServerAuthentication
(по умолчанию для командлета) и CodeSigning
, Также вы можете создать DocumentEncryptionCert
, что очень полезно для шифрования файлов, и, наконец, Custom
сертификат, который позволяет вам указать множество пользовательских параметров.
Давайте идти вперед и создать регулярный SSLServerAuthentication
сертификат. Это тот, который обычно используется для защиты сайтов с шифрованием SSL. Вы можете увидеть пример этого ниже. В этом примере сертификат хранится в Cert:LocalMachineMy Certificate Store
,
$Params = @{
"DnsName" = @("mywebsite.com","www.mywebsite.com")
"CertStoreLocation" = "Cert:LocalMachineMy"
"NotAfter" = (Get-Date).AddMonths(6)
"KeyAlgorithm" = "RSA"
"KeyLength" = "2048"
}
PS C:> New-SelfSignedCertificate @Params
PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
4EFF6B1A0F61B4BG692C77F09889BD151EE8BB58 CN=mywebsite.com {Client Authentication, Server Authentication}
Если все прошло хорошо, теперь у вас должен быть новый сертификат! Вы заметите, что выходные данные возвращают субъект, но субъект отображает только первый элемент, переданный ему через DnsName
параметр. Это потому, что второй URL становится частью альтернативного списка субъекта.
* Обратите внимание, что если вы попытаетесь запустить это, а не как администратор, вы получите сообщение об ошибке, например ниже:
New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)
Как вы можете сказать с Access denied
, у вас еще нет разрешения на запуск этого. *
Поиск информации в нашем сертификате
Давайте удостоверимся, что сертификат был создан так, как мы ожидали. Чтобы найти информацию о конкретном сертификате с PowerShell, вы можете использовать Get-ChildItem
Командлет, как вы могли бы перечислить файлы в каталоге.
PS C:> Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -EQ 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58 | Select-Object *
PSPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
58
PSParentPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy
PSChildName : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
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 : {mywebsite.com, www.mywebsite.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 : 6/22/2020 11:50:15 AM
NotBefore : 12/22/2019 10:40:20 AM
PublicKey : System.Security.Cryptography.X509Certificates.PublicKey
RawData : {48, 130, 3, 55…}
SerialNumber : 608C4D5E6B8D41B44ADDC6BD725FE264
SignatureAlgorithm : System.Security.Cryptography.Oid
SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName
Thumbprint : 4EFF6B1A0F61B4BF692C77F09889AD151EE8BB58
Version : 3
Handle : 2628421609632
Issuer : CN=mywebsite.com
Subject : CN=mywebsite.com
Здесь много полезной информации, но вы можете заметить в DnsNameList
что оба сайта теперь показаны. В дополнение NotAfter
дата правильно заполнена, чтобы быть 6 месяцев с даты создания.
Сертификат подписи кода
Если вы работаете в PowerShell, вы узнаете о политика исполнения, Если у вас установлена политика выполнения AllSigned
тогда вам нужно будет подписать каждый скрипт, который работает в вашей системе. Чтобы создать сертификат, сделать это довольно просто!
PS C:> New-SelfSignedCertificate -Type 'CodeSigningCert' -DnsName 'MyHost'
PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
14D535EG834370293BA103159EB00876A79959D8 CN=MyHost Code Signing
Сертификат защиты документов
Возможно, раньше вы с этим не сталкивались, но PowerShell с API защиты данных может шифровать файлы в вашей системе с помощью сертификата защиты документов. Используя New-SelfSignedCertificate
Командлет, мы можем легко сделать сертификат для шифрования ваших документов.
$Params = @{
"DnsName" = "MyHost"
"CertStoreLocation" = "Cert:CurrentUserMy"
"KeyUsage" = "KeyEncipherment","DataEncipherment","KeyAgreement"
"Type" = "DocumentEncryptionCert"
}
PS C:> New-SelfSignedCertificate @Params
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
14D535EG934370293BA203159EB00876A79959D8 CN=MyHost Document Encryption
С этим типом сертификата теперь вы можете использовать сертификат, созданный для шифрования и дешифрования содержимого с помощью команд PowerShell, таких как Protect-CMSMessage
и UnProtect-CMSMessage
,
Подобное шифрование / дешифрование становится полезным, если вам нужно передать зашифрованные данные, поскольку вы можете использовать этот сертификат в другой системе для дешифрования данных. Если вы полагаетесь на стандартный API защиты данных (DPAPI), встроенный в Windows, вы не сможете расшифровать данные в других системах или для других пользователей.
Резюме
PowerShell делает создание самозаверяющих сертификатов невероятно простым. Эти сертификаты имеют множество применений, но важно помнить, что их следует использовать только при тестировании. У вас не будет действительной цепочки доверия сертификатов для проверки ваших самозаверяющих сертификатов.
Видя, насколько быстро и легко создавать самозаверяющие сертификаты, вы можете начать делать это сегодня и правильно шифровать любые соединения или данные, которые вам нужны!
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)