Ich habe einen Intranet-Server, auf dem ich ein SSL installieren muss.
Dies ist dasopenssl.cnf
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
attributes = req_attributes
req_extensions = req_ext
#prompt = no
[ req_distinguished_name ]
countryName = US
countryName_min = 2
countryName_max = 2
stateOrProvinceName = CHICAGO
localityName = CHICAGO
0.organizationName = MY COMPANY
organizationalUnitName = IOS DEVELOPMENT
commonName = server2.myserver.local
commonName_max = 64
emailAddress = [email protected]
emailAddress_max = 64
[ req_attributes ]
challengePassword = password
challengePassword_min = 4
challengePassword_max = 20
[ req_ext ]
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = server2.myserver.local
DNS.2 = myserver.local
Dies sind die Befehle, die ich zum Erstellen verwende.
Generieren des Root-CA-Schlüssels
openssl genrsa -des3 -out rootCA.key 4096
2.Hierdurch wird das Stamm-CA-Zertifikat generiert
openssl req \
-x509 -new -nodes \
-key rootCA.key -sha256 \
-days 825 \
-out rootCA.crt \
-subj /CN=server2.myserver.local \
-reqexts SAN \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf '[SAN]\nsubjectAltName=DNS:server2.myserver.local')) \
-extensions 'req_ext'
Generieren des Zertifikatsschlüssels
openssl genrsa -out mydomain.com.key 4096
Generieren des Zertifikats
openssl req -new -sha256 -key mydomain.com.key \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=server2.myserver.local" \ -reqexts SAN \ -config <(cat ./openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:server2.myserver.local,DNS:myserver.local")) \ -out mydomain.com.csr
Konvertieren des CA-Zertifikats in p12
openssl pkcs12 -export -out ca.p12 -inkey rootCA.key -in rootCA.crt
Konvertieren des Zertifikats in P12
openssl pkcs12 -export -out certificate.p12 -inkey mydomain.com.key -in mydomain.com.crt
Dann installiere ich ca.p12
es certificate.p12
auf meinem IIS-Server und auf meinen Geräten.
Wenn ich versuche zu besuchenserver2.myserver.local
Ich bekomme
Wie in aller Welt mache ich das?
Antwort1
Ich würde sagen, dass Ihr Stamm-CA-Zertifikat völlig falsch ist. CA-Zertifikate unterscheiden sich stark von TLS-Zertifikaten des Endhosts – Sie können nicht für beide die gleiche Konfiguration verwenden.
Geben Sie die Domäne des Servers nicht in den Betreff ein – das ist nutzlos. Wenn es sich um eine Zertifizierungsstelle handelt, sollte dort einfach „
CN=My internal CA
oder so ähnlich“ stehen.Fügen Sie die
basicConstraints
Erweiterung hinzu. Sie muss besagen, dass es sich bei dem Zertifikat um eine Zertifizierungsstelle handelt.Fügen Sie das richtige hinzu
keyUsage
. Sie benötigen „keyCertSign“ und (nur der Vollständigkeit halber) „cRLSign“.Fügen Sie kein hinzu
subjectAltName
. Das Zertifikat ist für eine Behörde/einen Aussteller, nicht für den Server!Fügen Sie nicht hinzu
extendedKeyUsage
. Es wird manchmal verwendet, um einzuschränken, welche Zertifikate die Zertifizierungsstelle ausstellen kann, aber es ist besser, ohne diese Komplexität zu beginnen.Gute Idee, hinzuzufügen
subjectKeyIdentifier
, für den Fall, dass Sie später mehrere interne CAs mit identischen Betreff-DNs haben. (Normalerweise müssen CA-DNs eindeutig sein, aber mit SKI/AKI wird dies etwas vereinfacht.)
Sie sollten also eine „CA“-Konfigurationsdatei haben, die eher so aussieht (und hören Sie auf, SANs und andere Dinge über die Befehlszeile hinzuzufügen – dafür ist die Konfiguration da):
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_dn ]
countryName = US
stateOrProvinceName = Chicago
organizationName = Company Name
organizationalUnitName = iOS development
commonName = Internal development CA
[ req_ext ]
basicConstraints = critical, CA:TRUE
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
Das Endentitätszertifikat (TLS-Server) sollte diese Erweiterungen haben:
...
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer
subjectAltName = DNS:server2.myserver.local
Dann installiere ich ca.p12 und certificate.p12 auf meinem IIS-Server und auf meinen Geräten.
Installieren Sie den privaten Schlüssel der CA nicht auf Ihren Geräten!Installieren Sie es auch nicht auf dem Server. Sie sollten installierennurdas CA-Zertifikat rootCA.crt
(der öffentliche Teil) und sonst nichts.
Meine letzte Empfehlung: Verschwenden Sie keine Zeit mit dem Versuch, CAs mit raw zu erstellen openssl
. Verwenden Sie stattdessenEinfach-RSA(das mit OpenVPN gelieferte) oder verwenden SieXCA(grafische Linux-App) oder verwenden Sie eine dermöglicherweise Dutzendevon bereits geschriebenen und getesteten Programmen.