Como criar um certificado autoassinado com PowerShell

Conteúdo

Logotipo de Powershell

Certificados autoassinados eles são uma maneira simples de realizar testes e outras tarefas menos importantes. Os certificados autoassinados não têm uma cadeia confiável de certificados para fazer backup e são assinados pelo usuário que os criou. Se você confia na entidade que assinou o certificado, você pode usá-lo como se fosse um devidamente validado.

Se você precisar criar um certificado autoassinado, uma maneira de fazer isso é com o PowerShell. Neste post, você aprenderá a criar um certificado autoassinado no PowerShell.

Criação de um certificado autoassinado

Para criar um certificado autoassinado com PowerShell, você pode usar o New-SelfSignedCertificate cmdlet. Este cmdlet está incluído no PKI módulo.

Existem muitas opções ao criar certificados. Tipos comuns de certificados autoassinados são SSLServerAuthentication (padrão para cmdlet) e CodeSigning. Ao mesmo tempo, pode criar um DocumentEncryptionCert, o que é muito útil para criptografar arquivos, e finalmente um Custom certificado que permite que você especifique muitas opções personalizadas.

Vamos em frente e criar um SSLServerAuthentication certificado. Geralmente é usado para proteger sites com criptografia SSL. Você pode ver um exemplo disso abaixo. Neste exemplo, o certificado é armazenado no 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}

Se tudo corresse bem, Agora você deve ter um certificado recém-criado! Você notará que a saída retorna o assunto, mas o assunto mostra apenas o primeiro item que foi passado pelo DnsName parâmetro. Isso ocorre porque o segundo URL se torna parte da lista alternativa de tópicos.

* Observe que se você tentar executar este, não como administrador, você receberá uma mensagem de erro como a seguinte:

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

Como você pode ver com ele Access denied, você ainda não tem permissão para executar isso. *

Encontre informações em nosso certificado

Vamos ter certeza de que o certificado foi criado da maneira que esperávamos. Para encontrar informações sobre um determinado certificado com PowerShell, você pode usar o Get-ChildItem cmdlet, da mesma forma que você poderia listar arquivos em um diretório.

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

Há muitas informações excelentes aqui, mas é possível observar no DnsNameList agora ambos os sites são mostrados. ao mesmo tempo, a NotAfter A data está preenchida corretamente para ser 6 meses a partir da data de criação.

Certificado de assinatura de código

Se você trabalha no PowerShell, conhecer a políticas de aplicação. Se você tem uma política de execução estabelecida em AllSigned então você precisaria assinar todos os scripts em execução em seu sistema. Crie um certificado para fazer isso, É bem simples!

PS C:> New-SelfSignedCertificate -Type 'CodeSigningCert' -DnsName 'MyHost'

PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY

Thumbprint                                Subject              EnhancedKeyUsageList
----------                                -------              --------------------
14D535EG834370293BA103159EB00876A79959D8  CN=MyHost            Code Signing

Certificado de proteção de documentos

Você pode não ter encontrado isso muito antes, pero PowerShell, com a API de proteção de dados, você pode criptografar arquivos em seu sistema usando um Certificado de Proteção de Documentos. Usando o New-SelfSignedCertificate cmdlet, podemos criar facilmente um certificado para criptografar seus documentos.

$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

Com este tipo de certificado, agora você pode usar o certificado criado para criptografar e descriptografar conteúdo usando comandos do PowerShell como Protect-CMSMessage e UnProtect-CMSMessage.

Criptografar / descriptografar conteúdo como este é útil se você precisar passar os dados criptografados, já que você pode mais tarde usar este certificado em outro sistema para descriptografar os dados. Se você confia na API de proteção de dados padrão (DPAP) integrado no Windows, você não será capaz de descriptografar os dados em outros sistemas ou para outros usuários.

Resumo

O PowerShell torna a criação de certificados autoassinados incrivelmente fácil de fazer. Esses certificados têm uma ampla variedade de usos, mas uma nota importante a lembrar é que eles só devem ser usados ​​em testes. Você não terá uma cadeia de certificados de confiança válida para validar seus certificados autoassinados.

Vendo como é rápido e fácil criar certificados autoassinados!, você pode começar a fazer isso hoje e criptografar adequadamente qualquer conexão ou dados de que precisar!

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.