La mayoría de los administradores de Windows, que están familiarizados con PKI, conocen la MakeCert.exe
herramienta, que permite crear un certificado autofirmado. Esta herramienta es parte de Microsoft .NET Framework SDK y Microsoft Windows SDK. En las versiones modernas de Windows (Windows 10 / 8.1 y Windows Server 2019/2016 / 2012R2) puede crear un certificado autofirmado mediante el cmdlet de PowerShell integrado New-SelfSignedCertificate
sin utilizar herramientas adicionales.
Uso del cmdlet de PowerShell New-SelfSignedCertificate para crear un certificado autofirmado
Para crear un certificado autofirmado con PowerShell, puede usar el Nuevo certificado autofirmado cmdlet, que es parte de PoSh PKI (Infraestructura de clave pública):
Para enumerar todos los cmdlets disponibles en el módulo PKI, ejecute el comando.
Get-Command -Module PKI
Se recomienda utilizar certificados autofirmados con fines de prueba o para proporcionar certificados para servicios de Intranet internos (IIS, Exchange, Proxy de aplicación web, LDAPS, ADRMS, DirectAccess, etc.) si no puede implementar la infraestructura PKI / CA o comprar una certificado de un proveedor externo.
Para crear un certificado, debe especificar los valores de –DnsName (nombre de un servidor, el nombre puede ser arbitrario y diferente del nombre del host local) y -CertStoreLocation (un almacén de certificados local en el que se colocará el certificado generado). Puede usar el cmdlet para crear un certificado autofirmado en Windows 10 (en este ejemplo), Windows 8.1 y Windows Server 2019/2016/2012 R2 / 2012.
Para crear un nuevo certificado SSL (del tipo SSLServerAuthentication predeterminado) para el nombre DNS test.contoso.com (use un nombre FQDN) y colocarlo en la lista de certificados personales en una computadora, ejecute el siguiente comando:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:LocalMachineMy
Directory: Microsoft.PowerShell.SecurityCertificate::LocalMachineMy Thumbprint Subject ---------- ------- 2175A76B10F843676951965F52A718F635FFA043 CN=test.contoso.com
Si ejecuta este comando en una sesión de PowerShell no elevada (sin permisos de administrador local), aparece un error:
New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access denied. 0x80090010 (-2146893808 NTE_PERM)
Si ha especificado un proveedor criptográfico (CSP) no estándar, por ejemplo, utilizando el -KeyAlgorithm "ECDSA_secP256r1" -Provider "Microsoft Smart Card Key Storage Provider"
, asegúrese de que esté instalado en su computadora (el valor predeterminado es Microsoft Enhanced Cryptographic Provider CSP). De lo contrario, aparecerá un error:
New-SelfSignedCertificate: CertEnroll::CX509Enrollment::_CreateRequest: Provider type not defined. 0x80090017 (-2146893801 NTE_PROV_TYPE_NOT_DEF).
Este comando crea un nuevo certificado y lo importa en el almacén de certificados personales de la computadora. Abre el certlm.msc Complemento MMC, asegúrese de que aparezca un nuevo certificado en el Personal sección del almacén de certificados.
De forma predeterminada, se genera un certificado autofirmado con la siguiente configuración:
- Algoritmo criptográfico: RSA;
- Longitud de la clave: 2048 bits;
- Uso aceptable de claves: Autenticación del cliente y Autenticación del servidor;
- El certificado se puede utilizar para: Firma digital, Cifrado de claves;
- Período de validez del certificado: 1 año.
Como puede ver, las propiedades del certificado indican que este certificado se puede usar para la autenticación del cliente, pero también es válido para la autenticación del servidor.
Con el cmdlet Get-ChildItem, puede mostrar todos los parámetros del certificado creado por su huella digital:
Get-ChildItem -Path "Cert:LocalMachineMy" | Where-Object Thumbprint -eq 2175A76B10F843676951965F52A718F635FFA043 | Select-Object *
PSPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy2175A76B10F843676951965F52A718F635FFA043 PSParentPath : Microsoft.PowerShell.SecurityCertificate::LocalMachineMy PSChildName : 2175A76B10F843676951965F52A718F635FFA043 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 : {test.contoso.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 : IssuerName : System.Security.Cryptography.X509Certificates.X500DistinguishedName NotAfter : 05/11/2021 06:19:42 NotBefore : 05/11/2020 05:59:42 HasPrivateKey : True PrivateKey : PublicKey : System.Security.Cryptography.X509Certificates.PublicKey RawData : {48, 130, 3, 45...} SerialNumber : 6797F5E3F870478D4D3798BEB291DBF3 SubjectName : System.Security.Cryptography.X509Certificates.X500DistinguishedName SignatureAlgorithm : System.Security.Cryptography.Oid Thumbprint : 2175A76B10F843676951965F52A718F635FFA043 Version : 3 Handle : 2834444631568 Issuer : CN=test.contoso.com Subject : CN=test.contoso.com
Nota. Dicho certificado autofirmado caducará en 1 año a partir de la fecha de su creación. Puede establecer un período de validez de certificado diferente utilizando el -No después de opción. Por ejemplo, puede emitir un certificado SSL / TLS con un período de validez de tres años con los siguientes comandos:
$todaydt = Get-Date
$3years = $todaydt.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $3years -CertStoreLocation cert:LocalMachineMy
Puede crear una cadena de certificados. Primero, se crea un certificado raíz (CA) y, en base a él, se genera un certificado de servidor SSL:
$rootCert = New-SelfSignedCertificate -Subject 'CN=TestRootCA,O=TestRootCA,OU=TestRootCA' -KeyExportPolicy Exportable -KeyUsage CertSign,CRLSign,DigitalSignature -KeyLength 2048 -KeyUsageProperty All -KeyAlgorithm 'RSA' -HashAlgorithm 'SHA256' -Provider 'Microsoft Enhanced RSA and AES Cryptographic Provider'
New-SelfSignedCertificate -CertStoreLocation cert:LocalMachineMy -DnsName "test2.contoso.com" -Signer $rootCert -KeyUsage KeyEncipherment,DigitalSignature
Para exportar el certificado generado con una clave privada a un archivo PFX protegido con contraseña, debe especificar su huella digital. Se puede copiar de los resultados del comando New-SelfSignedCertificate. También debe especificar la contraseña de seguridad del certificado y convertirla al formato SecureString:
$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:LocalMachineMy2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:test.pfx -Password $CertPassword
La clave pública del certificado se puede exportar de la siguiente manera:
Export-Certificate -Cert Cert:LocalMachineMy2779C7928D055B21AAA0Cfe2F6BE1A5C2CA83B30 -FilePath C:tstcert.cer
Asegúrese de que el archivo de certificado * .cer (PFX) aparezca en el directorio especificado. Si hace clic con el botón derecho del ratón y selecciona «Instalar certificado«Elemento de menú, puede utilizar el Asistente de importación de certificados para agregar el certificado a los certificados raíz de confianza en su computadora.
Seleccione la ubicación de Cert Store -> Máquina local, Coloque todos los certificados en la siguiente tienda -> Autoridades de certificación raíz de confianza.
Puede crear un certificado e importarlo inmediatamente al almacén de certificados raíz de confianza de la computadora usando los comandos:
$SelfSignCert=New-SelfSignedCertificate …..
$certFile = Export-Certificate -Cert $SelfSignCert -FilePath C:psexport-certname.cer
Import-Certificate -CertStoreLocation Cert:LocalMachineAuthRoot -FilePath $certFile.FullName
Esta clave pública o el archivo de certificado en sí se puede implementar en todos los equipos y servidores del dominio de Active Directory mediante GPO (¿Cómo implementar certificados en equipos de dominio mediante GPO?).
Cree un certificado autofirmado con nombres alternativos del sujeto
Una de las características útiles del cmdlet New-SelfSignedCertificate es la capacidad de crear un certificado con varios nombres diferentes, Nombres alternativos del sujeto (SAN).
Nota. los Makecert.exe
La herramienta, a diferencia del cmdlet New-SelfSignedCertificate, no puede generar certificados SAN y Wildcard.
Si desea crear un certificado con varios nombres, el primer nombre del parámetro DnsName se utilizará como CN (Nombre común) del certificado. Por ejemplo, creemos un certificado SAN autofirmado con los siguientes nombres:
- Nombre del sujeto (CN): adfs1.contoso.com
- Nombre alternativo del sujeto (DNS): web_gw.contoso.com
- Nombre alternativo del sujeto (DNS): enterprise_reg.contoso.com
El comando para crear un certificado se verá así:
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:LocalMachineMy
Además, también puede generar un comodín certificado para todo el espacio de nombres de dominio. Para hacerlo, especifique * .contoso.com como nombre de servidor.
New-SelfSignedCertificate -certstorelocation cert:localmachinemy -dnsname *.contoso.com
Genere un certificado autofirmado para la firma de código en Windows
En PoweShell 3.0, el cmdlet New-SelfSifgnedCertificate solo genera certificados SSL que no se pueden usar para firmar el controlador, la aplicación o el código de secuencia de comandos (a diferencia de los certificados generados por la utilidad MakeCert).
En PowerShell versión 5.0 y posteriores, ahora se puede usar una nueva versión del cmdlet New-SelfSifgnedCertificate para emitir Firma de código Certificados.
Para crear un certificado de firma de código de aplicación autofirmado, ejecute el comando:
$cert = New-SelfSignedCertificate -Subject "My Code Signing Certificate” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy
Ahora puede firmar su secuencia de comandos de PowerShell con un certificado autofirmado:
Set-AuthenticodeSignature -FilePath C:PSmy_posh_script.ps1 -Certificate $cert
Si está recibiendo un Error desconocido advertencia al ejecutar el comando, esto significa que el certificado no es de confianza, porque se encuentra en el almacén de certificados personales del usuario.
Debe moverlo al almacén de certificados raíz de confianza (no olvide escanear periódicamente el almacén raíz de certificados de Windows en busca de certificados sospechosos y que no sean de confianza y actualizar las listas de certificados raíz de confianza).
Move-Item -Path $cert.PSPath -Destination "Cert:CurrentUserRoot"
Después de eso, puede firmar su secuencia de comandos de PowerShell con este certificado autofirmado.
Uso del certificado SSL autofirmado SHA-256 en IIS en Windows Server IIS
Tenga en cuenta que al crear un certificado autofirmado para IIS a través de la consola de Internet Information Manager (Crear certificado autofirmado elemento del menú de acción), se crea un certificado SSL utilizando el algoritmo de cifrado SHA-1. Muchos navegadores consideran que dichos certificados no son de confianza y no se pueden utilizar para establecer una conexión segura (o es posible que vea otros errores de SSL). El cmdlet New-SelfSignedCertificate le permite crear un tipo de certificado más popular mediante el algoritmo de cifrado SHA-256.
Puede vincular un certificado SHA-256 autofirmado generado con PowerShell a un sitio IIS en Windows Server. Si crea un certificado SSL con PowerShell y lo coloca en el almacén de certificados de la computadora, automáticamente estará disponible para los sitios de IIS.
Inicie la consola del Administrador de IIS, seleccione su sitio y luego en el Enlace del sitio opciones, seleccione el certificado que creó y guarde los cambios.
Artículos Interesantes
Contenido