Tecnología

Cómo crear un certificado autofirmado con PowerShell – CloudSavvy IT

Uso de AngleSharp en PowerShell 7 para analizar páginas web - CloudSavvy IT

Logotipo de Powershell

Certificados autofirmados son una forma sencilla de realizar pruebas y otras tareas menos importantes. Los certificados autofirmados no tienen una cadena confiable de certificados que los respalde y están firmados por el usuario que los creó. Si confía en la entidad que firmó el certificado, puede usarlo como lo haría con uno debidamente validado.

Si necesita crear un certificado autofirmado, una forma de hacerlo es con PowerShell. En este artículo, aprenderá a crear un certificado autofirmado en PowerShell.

Creación de un certificado autofirmado

Para crear un certificado autofirmado con PowerShell, puede usar el New-SelfSignedCertificate cmdlet. Este cmdlet se incluye en el PKI módulo.

Hay muchas opciones a la hora de crear certificados. Los tipos de certificados autofirmados habituales son SSLServerAuthentication (predeterminado para el cmdlet) y CodeSigning. Además, puede crear un DocumentEncryptionCert, que es muy útil para cifrar archivos, y finalmente un Custom certificado que le permite especificar muchas opciones personalizadas.

Sigamos adelante y creemos un SSLServerAuthentication certificado. Este es uno que generalmente se usa para proteger sitios web con cifrado SSL. Puede ver un ejemplo de esto a continuación. En este ejemplo, el certificado se almacena en el 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}

Si todo salió bien, ¡ahora debería tener un certificado recién creado! Observará que la salida devuelve el asunto, pero el asunto solo muestra el primer elemento que se le pasa a través del DnsName parámetro. Esto se debe a que la segunda URL pasa a formar parte de la lista alternativa de temas.

* Tenga en cuenta que si intenta ejecutar esto, no como administrador, recibirá un mensaje de error como el siguiente:

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

Como puedes ver con el Access denied, todavía no tienes permiso para ejecutar esto. *

Encontrar información en nuestro certificado

Asegurémonos de que el certificado se creó de la manera que esperábamos. Para encontrar información sobre un certificado en particular con PowerShell, puede usar el Get-ChildItem cmdlet, del mismo modo que podría enumerar archivos en un directorio.

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

Aquí hay mucha información excelente, pero es posible que observe en el DnsNameList que ahora se muestran ambos sitios. además, el NotAfter La fecha está correctamente poblada para ser 6 meses a partir de la fecha de creación.

Certificado de firma de código

Si trabaja en PowerShell, conocerá políticas de ejecución. Si tiene una política de ejecución establecida en AllSigned entonces necesitaría firmar cada secuencia de comandos que se ejecuta en su sistema. Crear un certificado para hacer esto, ¡es bastante simple!

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

PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineMY

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

Certificado de protección de documentos

Es posible que no haya encontrado esto mucho antes, pero PowerShell, con la API de protección de datos, puede cifrar archivos en su sistema usando un Certificado de protección de documentos. Utilizando la New-SelfSignedCertificate cmdlet, podemos crear fácilmente un certificado para cifrar sus 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

Con este tipo de certificado, ahora puede usar el certificado creado para cifrar y descifrar contenido usando comandos de PowerShell como Protect-CMSMessage y UnProtect-CMSMessage.

Cifrar / descifrar contenido como este se vuelve útil si necesita pasar los datos cifrados, ya que luego puede usar este certificado en otro sistema para descifrar los datos. Si confía en la API de protección de datos estándar (DPAPI) integrada en Windows, no podrá descifrar los datos en otros sistemas o para otros usuarios.

Resumen

PowerShell hace que la creación de certificados autofirmados sea increíblemente fácil de hacer. Estos certificados tienen una gran variedad de usos, pero una nota importante para recordar es que solo deben usarse en pruebas. No tendrá una cadena de confianza de certificados válida para validar sus certificados autofirmados.

Al ver lo rápido y fácil que es crear certificados autofirmados, puede comenzar a hacer esto hoy y cifrar correctamente cualquier conexión o información que necesite.

Leave a Comment

You may also like

Más