La forma más sencilla de generar un certificado PFX (Windows)

La forma más sencilla de generar un certificado PFX (Windows)

Actualmente para generar el Certificado PFX, uso openssl y:

  • Generar una CSR con su clave privada
  • Conéctese al sitio web de mi CA (Microsoft CA) y envíe la CSR junto con el atributo adicional (san:dns=).
  • Desde la autoridad certificadora emito el certificado pendiente (Base 64).
  • Convertir mi clave privada PKCS8 a PKCS1
  • Cree un PEM (clave privada, certificado de host, certificado intermedio y certificado raíz)
  • y FINALMENTE convertir mi PEM a PKCS#12 (archivo .pfx)

Este proceso es bastante largo y creo que estoy perdiendo mucho tiempo haciéndolo.

¿Alguien puede decirme cuál es la forma más rápida de obtener una cadena de certificados (pfx) firmada desde una CA interna de Microsoft?

ingrese la descripción de la imagen aquí

Respuesta1

Bien, bueno, entonces lo escribí.

Sigo creyendo que hay una manera más sencilla con certreq y powershell, pero aquí está el script bash. Requisitos: Cygwin, utilidades estándar de UNIX, clip, openssl

#!/bin/bash
iexplore='/cygdrive/c/Program\ Files\ \(x86\)/Internet\ Explorer/iexplore.exe';
printf "\033c";
echo -e "This function automates IIS7 certificate generation for <YourCompany>";
type openssl > /dev/null 2>&1 || { 
    echo "Cannot find OpensSSL, it is required to generate certificates.  Aborting..." 1>&2;
    exit 1
};
openssl version;
echo -e "\n";
read -p "What is the server hostname (NOT FQDN!): " Hostname;
if [[ $Hostname =~ ^[A-Za-z0-9]+$ ]]; then
    echo -e "Server name:\t"$Hostname"\nFQDN:\t\t"$Hostname".<yourDomain>\n";
else
    echo ""$Hostname" doesn't look quite right... Exiting";
    sleep 3;
    exit 1;
fi;
mkdir ~/Desktop/certs_temp > /dev/null 2>&1;
cd ~/Desktop/certs_temp;
echo "
[ req ]
default_md = sha512
default_bits = 2048
default_keyfile = rui.key
distinguished_name = req_distinguished_name
encrypt_key = no
prompt = no
string_mask = nombstr
req_extensions = v3_req
input_password = testpassword
output_password = testpassword

[ v3_req ]
basicConstraints = CA:false
keyUsage = digitalSignature, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = DNS:"$Hostname"

[ req_distinguished_name ]
countryName = AU
stateOrProvinceName = NSW
localityName = Sydney
0.organizationName = <OrgName>
organizationalUnitName = <OrgUName>
commonName = "$Hostname".<YourDomain>" > openssl.cfg;
openssl req -out openssl.csr -new -newkey rsa:2048 -nodes -keyout pk.key -config openssl.cfg > /dev/null 2>&1;
openssl rsa -in pk.key -out openssl.key > /dev/null 2>&1; rm pk.key;
echo -e "Now, upload this Code Signing Request to the Internal Certificate Authority: \n\t- The CSR content has been copied into your clipboard\n\t- You do not require to set any subject alternate name\n\t- Once submitted, open "Certificate Authority" via MMC (<ServerName>), issue pending certificate and export it (Open / Details / Copy To File) Base64 to ~/Desktop/certs_temp/openssl.cer\n";
eval $iexplore https://<ServerName>/certsrv/certrqxt.asp;
cat openssl.csr | clip;
read -p "Press [Enter] when openssl.cer certificate has been place in ~/Desktop/certs_temp";
if [ -f 'openssl.cer' ]; then
    cat openssl.cer >> openssl.key;
    echo '
-----BEGIN CERTIFICATE-----
<CompanyIntermediate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<CompanyRoot>
-----END CERTIFICATE-----' >> openssl.key;
    mv openssl.key ""$Hostname".pem";
    echo "Converting PEM Chain certificate to PKCS#12 (.pfx)";
    openssl pkcs12 -export -out ""$Hostname".pfx" -in ""$Hostname".pem";
    explorer .
else
    echo "Cannot find openssl.cer in ~/Desktop/certs_temp... Exiting";
    sleep 3;
    exit 1;
fi

La secuencia de comandos :

  1. Genera una clave privada y una solicitud de firma de código basada en un archivo de configuración.
  2. Copia el CSR en el portapapeles y abre la página web de IIS para solicitar el certificado.
  3. Solicita al usuario que emita el certificado pendiente y lo exporte en base64.
  4. Crea PEM y luego lo exporta como PKCS#12 (.pfx)

Nota: Debe cambiar la ruta de Internet Explorer para Win de 32 bits y reemplazar las etiquetas específicas <ServerName>.

información relacionada