Wie erstelle ich ein selbstsigniertes Multi-Domain-Zertifikat für Apache2?

15

Ich habe einen kleinen privaten Webserver, auf dem ich mehrere virtuelle Hosts habe. Ich weiß, dass es unmöglich ist, jedem einzelnen virtuellen Host ein Zertifikat zuzuweisen, da der Server erst nach dem Herstellen der SSL-Verbindung herausfindet, welcher virtuelle Host angefordert wurde. Aber ist es möglich, ein einziges SSL-Zertifikat zu haben, das mehrere Domains auflistet? Oder zumindest eine Wildcard-Domain wie * .example.com. Wenn ja, welche Linux-Befehle muss ich schreiben, um ein solches selbstsigniertes Zertifikat zu erstellen?

Hinzugefügt: Zur Verdeutlichung: Ich habe nur eine IP-Adresse für alle virtuellen Hosts.

Vilx-
quelle

Antworten:

11

Folgendes sollte für Sie funktionieren:

cp /etc/ssl/openssl.cnf /tmp/
echo '[ subject_alt_name ]' >> /tmp/openssl.cnf
echo 'subjectAltName = DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com' >> /tmp/openssl.cnf

openssl req -x509 -nodes -newkey rsa:2048 \
  -config /tmp/openssl.cnf \
  -extensions subject_alt_name \
  -keyout www.example.com.key \
  -out www.example.com.pem \
  -subj '/C=XX/ST=XXXX/L=XXXX/O=XXXX/OU=XXXX/CN=www.example.com/[email protected]'

Ergebnis:

$ openssl x509 -in www.example.com.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 17965603478303142689 (0xf952a52d7bc7f321)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/[email protected]
        Validity
            Not Before: Apr  3 15:34:27 2015 GMT
            Not After : May  3 15:34:27 2015 GMT
        Subject: C=XX, ST=XXXX, L=XXXX, O=XXXX, OU=XXXX, CN=www.example.com/[email protected]
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c6:e8:17:93:a4:8f:08:11:61:11:1b:cc:17:52:
                    b6:33:39:33:0e:94:3f:ac:ae:dd:70:4b:e6:d6:b0:
                    11:f1:93:b4:3d:dc:34:99:27:b6:45:4b:13:0c:69:
                    1e:11:d2:b9:38:5f:e0:d1:b0:58:e4:3c:c0:9f:58:
                    3d:5d:fa:67:3e:3c:05:1b:e3:86:20:18:d5:d7:83:
                    77:b5:0c:1d:9a:26:96:10:3f:2c:e5:ce:ed:6e:99:
                    5a:35:3e:06:f0:52:aa:72:5e:c0:33:7c:c8:16:f9:
                    6b:3e:7d:7e:5a:1f:cf:11:63:4d:ad:bf:77:bd:e3:
                    0f:8f:24:1d:f5:c8:06:ab:d9:62:8d:13:56:62:a9:
                    b8:77:c0:11:b6:ff:a7:63:93:a7:22:c2:41:48:6f:
                    bd:42:10:00:33:14:da:3b:ca:e0:07:c2:b6:50:55:
                    f0:4d:6b:0d:eb:87:a8:bd:4d:c6:1b:20:d8:27:68:
                    d0:e2:3b:32:91:b8:8e:cf:25:06:bf:43:fd:8f:96:
                    fa:eb:af:0f:e1:5c:47:06:84:8b:f4:35:0a:a8:f3:
                    7e:af:34:50:7f:62:bc:5e:53:09:90:97:27:cf:9a:
                    56:d7:f6:af:32:92:c4:c9:ab:90:6e:a6:09:20:0b:
                    46:28:22:0b:45:71:b9:17:77:d8:da:63:24:27:5c:
                    60:a5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name: 
                DNS:www.example.com, DNS:site1.example.com, DNS:site2.example.com
    Signature Algorithm: sha256WithRSAEncryption
         83:ce:18:74:f9:17:92:91:bd:82:13:ac:64:e7:de:9e:38:d7:
         26:0f:2d:3e:8f:f2:17:c5:fc:17:06:fb:27:e7:0a:b7:f2:8e:
         bb:18:6e:f4:4c:17:e8:8d:dc:51:d5:d2:e6:1c:72:e4:28:75:
         a2:79:ae:b6:b6:8c:ec:08:08:4d:73:79:b7:22:26:40:ac:38:
         5c:f2:2b:4f:44:60:55:db:90:b3:63:74:ad:e7:26:12:ad:0d:
         ec:4a:cd:4f:7a:a0:54:62:f5:a7:bc:80:c2:fa:34:43:3c:f1:
         aa:f7:6e:4e:e1:80:fb:c7:cc:44:3a:2b:a4:6c:5b:0f:3f:83:
         6e:8d:d5:28:cf:6c:f0:c6:40:4d:c4:d4:3f:9c:9d:a4:47:a7:
         27:d1:5b:2b:5f:0d:bd:3f:7c:2e:19:fa:bc:24:bd:1f:64:81:
         8b:a4:e3:33:10:35:55:f9:73:2d:8b:e8:b8:d7:e3:49:0c:35:
         af:53:df:48:d8:df:ce:b1:5f:6c:74:1c:74:89:45:2e:28:2c:
         1f:fe:d8:a4:44:9c:c7:bc:d8:6a:46:38:df:e3:d0:05:37:27:
         d0:08:e5:93:b8:0e:d9:d9:dd:7c:28:75:18:27:be:4e:72:47:
         13:b9:a2:93:0e:83:e9:b8:49:f4:75:ad:e0:0f:9b:e5:96:4f:
         33:33:f1:27

Wenn Sie eine Anforderung anstelle einer selbstsignierten Anforderung wünschen, ersetzen Sie -x509 durch -new und -extensions durch -reqexts.

Stanislav German-Evtushenko
quelle
Für den Fall, dass jemand einen längeren Ablauf benötigt, z. B. 10 Jahre, fügen Sie hinzu-days 3650
Maris B.
3

Erstellen Sie ein Zertifikat mit domain.com als CN und * .domain.com im Feld subjectAltName: dNSName names - das funktioniert.

In openssl, fügen Sie diese zu den Erweiterungen:

subjectAltName          = DNS:*.domain.com
drAlberT
quelle
Wie macht man das ohne CSR?
Walf
3

So erweitern Sie die Antwort von AlberT:

http://blog.loftninjas.org/2008/11/11/configuring-ssl-requests-with-subjectaltname-with-openssl/

Sie müssen keine Platzhalterdomänen verwenden. Sie können einfach alle Hostnamen, die Sie benötigen, als Betreff-Alternativnamen auflisten. Dies sollte in allen gängigen Browsern funktionieren.

Yves Junqueira
quelle
2
Leider ist dieser Link tot. Die WayBackMachine hat noch eine Aufzeichnung dieses Blogpostings .
Jpsy
Zum Zeitpunkt des dieses Schreibens, über der loftninjas.org Link aktiv ist (wieder).
Mikhail T.
0

Zunächst - Sie können jedem einzelnen virtuellen Host ein Zertifikat zuweisen - müssen Sie für jeden virtuellen Host eine andere private (und externe / öffentliche, wenn Sie ihn weltweit zugänglich machen möchten) IP-Adresse festlegen.

Aber dann ja - alternativ können Sie ein Platzhalterzertifikat zuweisen, wenn Ihre virtuellen Hosts einfach * .example.com sind.

Für den Befehl - es gibt viele Ergebnisse von Google - ich werde nur ein Beispiel setzen von hier :

http://www.justinsamuel.com/2006/03/11/howto-create-a-self-signed-wildcard-ssl-certificate/

Und stellen Sie sicher, dass Sie als Common Name * .example.com eingeben.

kaltes Wasser
quelle
1
Das ist der Punkt - ich habe nur eine IP-Adresse. Ich schätze, das war mir unklar.
Vilx
@coolwater - Guter Rat, wenn ich bei der Arbeit einen Produktionsserver einrichte, der sich in unserem eigenen Block / 16 befindet . Für diejenigen von uns mit kleinen Geschäftsverbindungen, die nur fünf statische IPs angeben, keine wirkliche Option. Ich habe mich auf fünf SSL-Vhosts beschränkt, einen pro IP.
Jason Antman