Tabla de contenido:
Este módulo no es compatible oficialmente. Se creó como un módulo conveniente para la generación de certificados autofirmados para simplificar las pruebas de la funcionalidad HTTPS.
Este módulo no debe utilizarse en ningún escenario de producción; está diseñado para crear certificados autofirmados únicamente con fines de prueba.
Este módulo está diseñado para ser una forma conveniente y multiplataforma de generar certificados autofirmados tanto en PowerShell Core como en Windows PowerShell 5.1.
Dado que .NET Core ya incorpora su propia API de certificado/criptografía multiplataforma, este módulo es un módulo de script de PowerShell nativo, sin dependencias binarias.
Algunos objetivos de este módulo incluyen:
X509HighlySpecificCryptoObject
Quizás quieras echar un vistazo a algunas otras alternativas para la generación de certificados autofirmados, que se enumeran aquí:
Cmdlet New-SelfSignedCertificate
de Windows PowerShell del módulo PkiClient.
Se puede usar desde PowerShell Core en Windows usando el módulo WindowsCompatibility de esta manera:
Install-Module WindowsCompatibility
Import-WinModule PKI
New-SelfSignedCertificate # args as needed
Sin embargo, este módulo sólo está disponible en Windows; no existe una versión para Linux.
La herramienta global dotnet dotnet-dev-certs
, diseñada para generar certificados autofirmados para el desarrollo de ASP.NET Core.
Esto se puede instalar desde la CLI de dotnet.
openssl
, que funciona multiplataforma, pero puede no ser favorable en comparación con una opción nativa de PowerShell y utiliza un formato PEM en lugar de PFX.
Para crear un certificado simple funcionará lo siguiente:
> New-SelfSignedCertificate
Certificate written to C:UsersroholtDocumentsDevsandboxcertificate.pfx
Thumbprint Subject EnhancedKeyUsageList
---------- ------- --------------------
A51B016324B5D2F11340CDCC52004B8129C88D3B CN = localhost
Esto creará un nuevo certificado llamado certificate.pfx
en su CWD para localhost
. El comando en sí devuelve un objeto X509Certificate2
que describe el certificado escrito en el disco. Puede inspeccionar este objeto para encontrar sus propiedades. Este certificado no tendrá usos de claves, ni restricciones básicas, ni usos de claves mejorados y una extensión de clave de identificador de sujeto.
Nota : Para repetir este comando, necesitará el parámetro -Force
para sobrescribir el certificado anterior que generó anteriormente.
El comando New-SelfSignedCertificate
permite especificar nombres completos y completos, así como algunas otras opciones:
> $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}
El certificado generado por el comando anterior tendrá las siguientes propiedades:
El nombre distinguido del emisor y del sujeto establecido en:
CN=example.org, OU=Sales, O=Umbrella Corporation, L=Omaha, S=Nebraska, C=US, [email protected]
Protección con contraseña (en este caso con la contraseña 'Your password'
).
Un período de validez de un año a partir del momento de la creación (con los milisegundos truncados).
Una clave RSA de 4096 bits.
Una extensión de restricciones básicas con CertificateAuthority
establecida en true
.
Se indican los usos básicos de las claves Digital Signature
y Key Encipherment
.
Se indican los usos mejorados de las claves Server Authentication
y Client Authentication
.
El comando también ofrece el parámetro -AdditionalExtension
, que toma una matriz de System.Security.Cryptography.X509Certificates.X509Extension
para agregar a cualquier certificado generado.
El módulo aún no admite archivos PEM, que se utilizan mucho en el mundo Linux. Si bien no son un formato de certificado per se, son una codificación común de certificados y debemos esforzarnos por admitirlos de alguna manera.
Actualmente, el autor no conoce la compatibilidad con PEM nativa de PowerShell Core o .NET Core.
Actualmente, todas las extensiones de certificado generadas por este módulo configuran el campo Critical
en false
para permitir una mayor flexibilidad.
Sin embargo, podría ser conveniente configurar alguno o todos ellos para que se designen como Critical
. Idealmente, esto podría hacerse sin saturar los comandos con una gran cantidad de parámetros.
Actualmente, en ServerAuthentication
y ClientAuthentication
se admiten usos de claves mejorados (de forma restrictiva, para facilitar su uso).
Lo ideal sería que hubiera más opciones disponibles para esto.
El módulo podría proporcionar un conjunto de clases que generen extensiones X509Extension
que describan extensiones de certificados de uso común.
Este módulo tiene licencia del MIT. Consulte LICENCIA.txt.