Bagaimana cara membuat sertifikat yang ditandatangani sendiri multi-domain untuk Apache2?

15

Saya punya server web pribadi kecil di mana saya memiliki beberapa virtualhost. Saya tahu bahwa tidak mungkin untuk menetapkan sertifikat untuk masing-masing virtualhost, karena server mengetahui virtualhost yang diminta hanya SETELAH koneksi SSL telah dibuat. Tetapi apakah mungkin untuk memiliki satu sertifikat SSL yang mencantumkan beberapa domain? Atau setidaknya domain wildcard, seperti * .example.com. Jika ya, perintah Linux apa yang harus saya tulis untuk membuat sertifikat yang ditandatangani sendiri?

Ditambahkan: Untuk memperjelas - Saya hanya memiliki satu alamat IP untuk semua host virtual.

Vilx-
sumber

Jawaban:

11

Hal-hal berikut ini akan bekerja untuk Anda:

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

Hasil:

$ 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

Jika Anda ingin meminta alih-alih sendiri, ganti saja -x509 dengan -baru dan -stensi dengan -reqexts.

Stanislav German-Evtushenko
sumber
Jika seseorang membutuhkan masa kadaluarsa yang lebih lama, mis. 10 tahun, tambahkan-days 3650
Maris B.
3

Buat sertifikat dengan domain.com sebagai CN dan * .domain.com di subjectAltName: bidang nama dNSName - yang berfungsi.

Di openssl, tambahkan ini ke ekstensi:

subjectAltName          = DNS:*.domain.com
drAlberT
sumber
Bagaimana seseorang melakukannya tanpa menggunakan CSR?
Walf
3

Untuk memperluas jawaban AlberT:

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

Anda tidak harus menggunakan domain wildcard. Anda bisa daftar semua nama host yang Anda butuhkan sebagai nama alt subjek dan itu akan berfungsi pada semua browser utama.

Yves Junqueira
sumber
2
Sayangnya tautan itu sudah mati. WayBackMachine masih memiliki catatan blogposting itu .
Jpsy
Pada saat penulisan ini , tautan loftninjas.org di atas aktif (lagi).
Mikhail T.
0

Pertama-tama - Anda dapat menetapkan sertifikat untuk setiap host virtual individu - kuncinya adalah membuat alamat ip privat (dan eksternal / publik yang berbeda, jika Anda ingin membuatnya dapat diakses oleh dunia) untuk setiap virtualhost.

Tapi ya - atau, Anda dapat menetapkan sertifikat wildcard jika host virtual Anda hanya * .example.com.

Untuk perintah - ada banyak hasil dari google - saya hanya akan memberikan contoh dari sini :

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

Dan pastikan Anda memasukkan * .example.com untuk Nama Umum.

air dingin
sumber
1
Itulah intinya - saya hanya punya satu alamat IP. Kira saya tidak jelas tentang itu.
Vilx-
@coolwater - Saran yang bagus jika saya menyiapkan server produksi di tempat kerja, yang akan berada di blok kita sendiri / 16 . Bagi kita dengan koneksi bisnis kecil yang hanya memberikan lima IP statis, sebenarnya bukan pilihan. Saya telah mengatasinya dengan membatasi diri saya pada lima SSL Vhosts, satu per IP.
Jason Antman