Как создать самоподписанный сертификат с помощью PowerShell – CloudSavvy IT

Логотип Powershell

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

Если вам нужно создать самозаверяющий сертификат, вы можете сделать это с помощью 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, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *