Índice:
Este módulo não é oficialmente suportado. Ele foi criado como um módulo conveniente para a geração de certificados autoassinados para simplificar o teste da funcionalidade HTTPS.
Este módulo não deve ser usado em nenhum cenário de produção; ele foi projetado para criar certificados autoassinados apenas para fins de teste.
Este módulo foi projetado para ser uma maneira conveniente e multiplataforma de gerar certificados autoassinados no PowerShell Core e no Windows PowerShell 5.1.
Como o .NET Core já incorpora sua própria API de criptografia/certificado de plataforma cruzada, este módulo é um módulo de script nativo do PowerShell, sem dependências binárias.
Alguns objetivos deste módulo incluem:
X509HighlySpecificCryptoObject
Você pode dar uma olhada em algumas outras alternativas para geração de certificados autoassinados, listadas aqui:
Cmdlet New-SelfSignedCertificate
do Windows PowerShell do módulo PkiClient.
Ele pode ser usado no PowerShell Core no Windows usando o módulo WindowsCompatibility como este:
Install-Module WindowsCompatibility
Import-WinModule PKI
New-SelfSignedCertificate # args as needed
No entanto, este módulo está disponível apenas no Windows – não existe uma versão para Linux.
A ferramenta global dotnet dotnet-dev-certs
, projetada para gerar certificados autoassinados para desenvolvimento em ASP.NET Core.
Isso pode ser instalado a partir da CLI dotnet.
openssl
, que funciona em várias plataformas, mas pode não ser favorável em comparação com uma opção nativa do PowerShell e usa um formato PEM em vez de PFX.
Para criar um certificado simples, o seguinte funcionará:
> New-SelfSignedCertificate
Certificate written to C:UsersroholtDocumentsDevsandboxcertificate.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A51B016324B5D2F11340CDCC52004B8129C88D3B CN = localhost
Isso criará um novo certificado chamado certificate.pfx
no seu CWD para localhost
. O próprio comando retorna um objeto X509Certificate2
que descreve o certificado gravado no disco. Você pode inspecionar este objeto para encontrar suas propriedades. Este certificado não terá usos de chave, nem restrições básicas, nem usos de chave aprimorados e uma extensão de Chave Identificadora de Assunto.
Nota : Para repetir este comando, você precisará do parâmetro -Force
para substituir o certificado antigo gerado anteriormente.
O comando New-SelfSignedCertificate
permite a especificação de nomes distintos completos, bem como algumas outras opções:
> $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}
O certificado produzido pelo comando acima terá as seguintes propriedades:
O nome distinto do emissor e do sujeito definido como:
CN=example.org, OU=Sales, O=Umbrella Corporation, L=Omaha, S=Nebraska, C=US, [email protected]
Proteção por senha (neste caso com a senha 'Your password'
).
Um período de validade de um ano a partir do momento da criação (com os milissegundos truncados).
Uma chave RSA de 4.096 bits.
Uma extensão de restrições básicas com CertificateAuthority
definida como true
.
Os usos básicos da chave Digital Signature
e Key Encipherment
indicados.
Os usos de chave aprimorada Server Authentication
e Client Authentication
indicados.
O comando também oferece o parâmetro -AdditionalExtension
, que usa uma matriz de System.Security.Cryptography.X509Certificates.X509Extension
para adicionar a qualquer certificado gerado.
O módulo ainda não suporta arquivos PEM, que são muito utilizados no mundo Linux. Embora não sejam um formato de certificado em si, são uma codificação comum de certificados e devemos nos esforçar para apoiá-los de alguma forma.
Atualmente, o autor não tem conhecimento do suporte PEM nativo do PowerShell Core ou .NET Core.
Atualmente, todas as extensões de certificado geradas por este módulo definem o campo Critical
como false
para permitir maior flexibilidade.
No entanto, pode ser desejável configurar um ou todos eles para serem designados como Critical
. Idealmente, isso poderia ser feito sem sobrecarregar os comandos com um grande número de parâmetros.
Atualmente no ServerAuthentication
e ClientAuthentication
os usos de chave aprimorados são suportados (de forma restritiva, para facilidade de uso).
Idealmente, mais opções para isso poderiam ser disponibilizadas.
O módulo pode fornecer um conjunto de classes que geram X509Extension
s descrevendo extensões de certificado comumente usadas.
Este módulo é licenciado pelo MIT. Consulte LICENSE.txt.