Jak utworzyć samopodpisany certyfikat dla wielu domen dla Apache2?

15

Mam mały prywatny serwer WWW, na którym mam kilka wirtualnych hostów. Wiem, że nie można przypisać certyfikatu do każdego wirtualnego hosta, ponieważ serwer dowiaduje się, który wirtualny host został zażądany dopiero PO nawiązaniu połączenia SSL. Ale czy można mieć pojedynczy certyfikat SSL, który zawiera kilka domen? Lub przynajmniej domena wieloznaczna, taka jak * .example.com. Jeśli tak, jakie polecenia dla systemu Linux muszę napisać, aby utworzyć samopodpisany certyfikat?

Dodano: Dla wyjaśnienia - mam tylko jeden adres IP dla wszystkich wirtualnych hostów.

Vilx-
źródło

Odpowiedzi:

11

Następujące elementy powinny działać dla Ciebie:

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]'

Wynik:

$ 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

Jeśli chcesz żądać zamiast samopodpisanego, po prostu zamień -x509 na -new i -extensions na -reqexts.

Stanislav German-Evtushenko
źródło
Jeśli ktoś potrzebuje dłuższego terminu ważności, np. 10 lat, dodaj-days 3650
Maris B.
3

Utwórz certyfikat z domeną.com.com jako CN i * .domena.com w temacie nazwaAltName: pole nazw dNSName - to działa.

W openssldodaj to do rozszerzeń:

subjectAltName          = DNS:*.domain.com
drAlberT
źródło
Jak to zrobić bez korzystania z CSR?
Walf
3

Aby rozwinąć odpowiedź AlberT:

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

Nie musisz używać domen wieloznacznych. Możesz po prostu wymienić wszystkie potrzebne nazwy hostów jako alternatywne nazwy tematów i powinien on działać na wszystkich głównych przeglądarkach.

Yves Junqueira
źródło
2
Niestety ten link jest martwy. WayBackMachine nadal ma zapis tego posta na blogu .
Jpsy
W czasie tej piśmie, link loftninjas.org powyżej jest aktywny (znowu).
Michaił T.
0

Przede wszystkim - możesz przypisać certyfikat dla każdego wirtualnego hosta - kluczem jest ustawienie innego prywatnego adresu IP (i zewnętrznego / publicznego, jeśli chcesz, aby był on dostępny dla całego świata) dla każdego wirtualnego hosta.

Ale tak - alternatywnie możesz przypisać certyfikat wieloznaczny, jeśli twoje wirtualne hosty to po prostu * .example.com.

Dla polecenia - istnieje wiele wyników z Google - podam tylko przykład z tego miejsca :

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

I upewnij się, że wpisałeś * .example.com jako nazwę pospolitą.

chłodna woda
źródło
1
O to chodzi - mam tylko jeden adres IP. Chyba nie byłem tego pewien.
Vilx-
@coolwater - Dobra rada, jeśli konfiguruję serwer produkcyjny w pracy, który byłby w naszym własnym bloku / 16 . Dla tych z nas, którzy mają małe połączenia biznesowe, które dają tylko pięć statycznych adresów IP, tak naprawdę nie ma opcji. Poradziłem sobie z tym, ograniczając się do pięciu hostów SSL VPS, po jednym na adres IP.
Jason Antman