it-swarm.com.de

OpenSSL Version V3 mit alternativem Antragstellernamen

Ich verwende das OpenSSL-Befehlszeilentool zum Generieren eines selbstsignierten Zertifikats. Es scheint richtig zu funktionieren, abgesehen von zwei Problemen. Ich kann es nicht schaffen, einen .cer mit einem alternativen Antragstellernamen (kritisch) zu erstellen, und ich konnte nicht herausfinden, wie man ein Zertifikat erstellt, das Version 3 ist wie man die Version einstellt). 

Hat jemand das erfolgreich gemacht? Die Standard-Konfigurationsdatei (.cfg) hat scheinbar klare Dokumentation (siehe unten): 

"Dieses Zeug ist für subjectAltName und issuerAltname . Importieren Sie die E-Mail-Adresse . SubjectAltName = email: copy"

Dies funktioniert jedoch nicht. Meine Vermutung ist, dass das Thema Alternative Name nicht angezeigt wird, da es nicht in den V1-Spezifikationen enthalten ist. Deshalb verfolge ich auch die Einstellung der Version. 

Hier ist die Konfigurationsdatei, die ich verwende:

[ req ]
default_bits        = 2048 
default_keyfile     = privkey.pem 
distinguished_name  = req_distinguished_name
emailAddress        = [email protected]
req_extensions          = v3_req
x509_extensions         = v3_ca

[req_distinguished_name]
C = [Press Enter to Continue]
C_default = US 
C_min = 2 
C_max = 2 

O = [Press Enter to Continue]
O_default = default 

0.OU=[Press Enter to Continue]
0.OU_default = default 
1.OU=[Press Enter to Continue]
1.OU_default = PKI 
2.OU=[Press Enter to Continue] 
2.OU_default = ABCD
commonName = Public FQDN of server 
commonName_max = 64

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment

[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer:always
subjectAltName         = email:[email protected]
issuerAltName          = issuer:copy
19
Kandres22

Hier sind die einfachen Schritte für Sie 

Verwenden Sie beim Generieren der CSR -config und -extensions Und beim Generieren des Zertifikats -extfile und -extensions 

Hier ist das Beispiel 

openssl req -new -nodes -keyout test.key  -out test.csr -days 3650 -subj "/C=US/ST=SCA/L=SCA/O=Oracle/OU=Java/CN=test cert" -config /etc/pki/tls/openssl.cnf -extensions v3_req
openssl x509 -req -days 3650 -in test.csr -CA cacert.pem -CAkey rootCA.key -CAcreateserial -out test.pem -extfile /etc/pki/tls/openssl.cnf  -extensions v3_req

hoffe das hilft

13
Raghu K Nair

Ich habe es mit der folgenden Version funktionieren lassen (emailAddress wurde falsch platziert):

[ req ]
default_bits        = 2048 
default_keyfile     = privkey.pem 
distinguished_name  = req_distinguished_name
req_extensions          = v3_req
x509_extensions         = v3_ca

[req_distinguished_name]
C = [Press Enter to Continue]
C_default = US 
C_min = 2 
C_max = 2 

O = [Press Enter to Continue]
O_default = default 

0.OU=[Press Enter to Continue]
0.OU_default = default 
1.OU=[Press Enter to Continue]
1.OU_default = PKI 
2.OU=[Press Enter to Continue] 
2.OU_default = ABCD
commonName = Public FQDN of server 
commonName_max = 64
emailAddress = [Press Enter to Continue] 
emailAddress_default = [email protected]

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment

[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer:always
subjectAltName         = email:[email protected]
issuerAltName          = issuer:copy

Anmerkungen:

  • So generieren Sie das von mir verwendete Zertifikat:

    openssl req -config req.cnf -new -nodes -out req.pem -x509
    
  • Ich habe nicht viel für issuerAltname gesehen (wenn Sie interessiert wären, würde ich wissen wo).
  • Die Verwendung von issuer:always wird für authorityKeyIdentifier nicht empfohlen.
  • Die Verwendung von email:copy funktioniert jetzt mit subjectAltName.
  • v3_req-Abschnitt ist (sowie req_extensions-Zeile) überflüssig.
8

Mit welchem ​​Befehl haben Sie die CSR-Zertifikatsanforderung erstellt? Mit welchem ​​Befehl haben Sie die Zertifikatsdatei erstellt? Unterschiedliche Antworten für verschiedene Umstände, die Sie kennen.

Vielleicht setzen Sie nicht 

subjectAltName = E-Mail: Kopie

im Bereich

[v3_req]

Vielleicht verwenden Sie openssl x509, um das Zertifikat zu generieren, falls dies erforderlich ist

-extfile /etc/pki/tls/openssl.cnf

denn ohne dass es nicht Ihre config-Datei verwendet

Sie könnten auch brauchen

-Erweiterungen v3_req

befehlszeilenschalter

3
user1844882

Okay, keine der anderen Antworten auf dieser Seite funktionierte für mich, und ich habe jede letzte davon ausprobiert. Was für mich funktioniert hat, war ein kleiner Trick:

bei der anforderung des cert:

-config '<(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER"))' 
-reqexts SAN

und beim unterschreiben des cert:

-extfile '<(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER"))' 
-extensions SAN

Es gibt also keine Verwirrung, hier ist ein funktionierendes Skript, das von Anfang an alles abdeckt, einschließlich der Erstellung einer Zertifizierungsstelle:

# if the server name is undefined, lets default to 'Some-Server'
SERVER="${SERVER:-Some-Server}"

CORPORATION=My-Corp
GROUP=My-Corporate-Group
CITY=City
STATE=State
COUNTRY=US

CERT_AUTH_PASS=`openssl Rand -base64 32`
echo $CERT_AUTH_PASS > cert_auth_password
CERT_AUTH_PASS=`cat cert_auth_password`

# create the certificate authority
openssl \
  req \
  -subj "/CN=$SERVER.ca/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" \
  -new \
  -x509 \
  -passout pass:$CERT_AUTH_PASS \
  -keyout ca-cert.key \
  -out ca-cert.crt \
  -days 36500

# create client private key (used to decrypt the cert we get from the CA)
openssl genrsa -out $SERVER.key

# create the CSR(Certitificate Signing Request)
openssl \
  req \
  -new \
  -nodes \
  -subj "/CN=$SERVER/OU=$GROUP/O=$CORPORATION/L=$CITY/ST=$STATE/C=$COUNTRY" \
  -sha256 \
  -extensions v3_req \
  -reqexts SAN \
  -key $SERVER.key \
  -out $SERVER.csr \
  -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
  -days 36500

# sign the certificate with the certificate authority
openssl \
  x509 \
  -req \
  -days 36500 \
  -in $SERVER.csr \
  -CA ca-cert.crt \
  -CAkey ca-cert.key \
  -CAcreateserial \
  -out $SERVER.crt \
  -extfile <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:$SERVER")) \
  -extensions SAN \
  -passin pass:$CERT_AUTH_PASS

Wir können dann überprüfen, ob der Name des Antragstellers im endgültigen Zertifikat enthalten ist:

openssl x509 -in Some-Server.crt -text -noout

Der relevante Abschnitt ist:

    X509v3 extensions:
        X509v3 Subject Alternative Name: 
            DNS:Some-Server

Also hat es funktioniert! Dies ist ein Zertifikat, das von jedem größeren Browser (einschließlich Chrome) akzeptiert wird, sofern Sie die Zertifizierungsstelle im Browser installieren. Das ist ca-cert.crt, das Sie installieren müssen.

Hier ist eine Beispielkonfiguration für ngnx, mit der Sie das cert verwenden können:

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name  localhost:443;

    ssl_certificate /etc/ssl/certs/Some-Server.crt;
    ssl_certificate_key /etc/ssl/private/Some-Server.key;
    ssl_dhparam /etc/ssl/certs/https-dhparam.pem;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
2
Jack Davidson

Ich habe auf mehrere Seiten verwiesen, und die wichtigsten Hilfen stammen von 1. https://geekflare.com/san-ssl-certificate/ , 2. https://certificatetools.com) / (siehe Antwort von user40662) und 3. Antwort von Raghu K Nair zur Befehlsverwendung.

Dann mein erfolgreicher Versuch:

san.cnf

[ req ]
default_bits       = 2048
default_md         = sha256
distinguished_name = req_distinguished_name
req_extensions     = v3_req
[ req_distinguished_name ]
countryName            = CN                     # C=
stateOrProvinceName    = Shanghai               # ST=
localityName           = Shanghai               # L=
#postalCode             = 200000                 # L/postalcode=
#streetAddress          = "My Address"           # L/street=
organizationName       = My Corporation         # O=
organizationalUnitName = My Department          # OU=
commonName             = myname.mysoftware.mycorporation.com # CN=
emailAddress           = [email protected]     # CN/emailAddress=
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1   = myname.mysoftware.mycorporation.com
#DNS.2   = other2.com
#DNS.3   = other3.com

Befehl:

openssl req -x509 -nodes -days 365 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=My Corporation/OU=My Department/CN=myname.mysoftware.mycorporation.com/[email protected]" -keyout privateKey.pem -out certificate.crt -config san.cnf -extensions v3_req
0
robbie fan

Ich habe gerade ein webbasiertes Tool entwickelt, das diesen Befehl automatisch auf der Grundlage der Formulareingabe generiert und die Ausgabe anzeigt. http://kernelmanic.com/certificate-request-generator-with-multiple-common-names-and-subject-alternative-names/

0
user40662

Der v3_req ist mit dem Eintrag subjectAltName in der Konfigurationsdatei erforderlich. Der Befehl 

openssl x509 ... -extfile openssl.cnf -extensions v3_req

fügt das SAN in das Zertifikat ein.

0
Dominic

Ich weiß, dass dieser Thread ein wenig alt ist, aber für den Fall, dass er unter Windows funktioniert, überprüfen Sie, ob die Datei UTF-8-codiert ist. In meinem Fall wurde ein Fehler angezeigt, der auf einen Fehler in der .cnf-Datei hinweist öffnete es in Notepad ++, stellte die Dateikodierung auf UTF-8 ein, speicherte den Befehl openssl und führte den Befehl erneut aus. 

0
OscarG