Einfachste Möglichkeit zum Generieren eines PFX-Zertifikats (Windows)

Einfachste Möglichkeit zum Generieren eines PFX-Zertifikats (Windows)

Zurzeit verwende ich zum Generieren des PFX-Zertifikats openssl und:

  • Generieren Sie eine CSR mit ihrem privaten Schlüssel
  • Stellen Sie eine Verbindung zu meiner CA-Website (Microsoft CA) her und senden Sie CSR zusammen mit dem zusätzlichen Attribut (san:dns=).
  • Von der Zertifizierungsstelle stelle ich das ausstehende Zertifikat aus (Base 64).
  • Konvertieren Sie meinen privaten Schlüssel PKCS8 in PKCS1
  • Erstellen Sie ein PEM (privater Schlüssel, Host-Zertifikat, Zwischenzertifikat und Stammzertifikat).
  • und ENDLICH mein PEM in PKCS#12 konvertieren (.pfx-Datei)

Dieser Vorgang ist ziemlich langwierig und ich glaube, dass ich damit viel Zeit verschwende.

Kann mir bitte jemand sagen, wie ich schneller eine von einer internen Microsoft-Zertifizierungsstelle signierte Zertifikatskette (pfx) bekomme?

Bildbeschreibung hier eingeben

Antwort1

Richtig, ich habe es damals geschrieben.

Ich glaube immer noch, dass es mit Certreq und Powershell einen einfacheren Weg gibt, aber hier ist das Bash-Skript. Anforderungen: Cygwin, Standard-UNIX-Dienstprogramme, 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

Das Skript:

  1. Generiert einen privaten Schlüssel und eine Codesignaturanforderung basierend auf einer Konfigurationsdatei.
  2. Kopiert die CSR in die Zwischenablage und öffnet die IIS-Webseite, um das Zertifikat anzufordern.
  3. Fordert den Benutzer auf, das ausstehende Zertifikat auszustellen und es base64 zu exportieren
  4. Erstellt PEM und exportiert es dann als PKCS#12 (.pfx)

Hinweis: Sie müssen den Pfad für Internet Explorer für Win 32 Bit ändern und <ServerName>-spezifische Tags ersetzen.

verwandte Informationen