Certificados autofirmados son una forma simple de realizar pruebas y otras tareas menos importantes. Los certificados autofirmados no disponen 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 validado correctamente.
Si necesita crear un certificado autofirmado, una forma de hacerlo es con PowerShell. En este post, aprenderá a crear un certificado autofirmado en PowerShell.
Creación de un certificado autofirmado
Para crear un certificado autofirmado con PowerShell, puede utilizar el New-SelfSignedCertificate
cmdlet. Este cmdlet se incluye en el PKI
módulo.
Hay muchas opciones al momento de crear certificados. Los tipos de certificados autofirmados habituales son SSLServerAuthentication
(predeterminado para el cmdlet) y CodeSigning
. Al mismo tiempo, puede crear un DocumentEncryptionCert
, que es muy útil para cifrar archivos, y por último un Custom
certificado que le posibilita especificar muchas opciones personalizadas.
Sigamos adelante y creemos un SSLServerAuthentication
certificado. Este es uno que de forma general se utiliza 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 ha pasado 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
, aún no tienes permiso para ejecutar esto. *
Hallar información en nuestro certificado
Asegurémonos de que el certificado se haya creado de la forma que esperábamos. Para hallar información sobre un certificado en particular con PowerShell, puede utilizar el Get-ChildItem
cmdlet, de la misma forma 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 factible que observe en el DnsNameList
que ahora se muestran ambos sitios. al mismo tiempo, 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 dispone de 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 factible 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. Usando el 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 utilizar el certificado creado para cifrar y descifrar contenido usando comandos de PowerShell como Protect-CMSMessage
y UnProtect-CMSMessage
.
Cifrar / descifrar contenido como este se torna útil si necesita pasar los datos cifrados, puesto que después puede utilizar 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 disponen 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 a cifrar correctamente cualquier conexión o datos que necesite!