要支援 multiple sites 使用 HTTPS 以及名稱虛擬主機(Name-Based Virtual Host) 可以使用
- Wildcard Names(萬用字元): specified in RFC2818
- Subject Alternative Names(憑證主體別名): x509 version 3 certificate (specified in RFC3280)
這二者在使用上是不同的。萬用字元是用在同一個 sub-domain 之下的,例如: *.example.com 的憑證, 可以使用在 www.example.com, foo.example.com, bar.example.com, 但是不可以使用在 example.com, aaa.www.example.com. 而憑證主體別名卻可以涵蓋多個不同的網域,例如:www.mydomain.com 的憑證,可以包含 www.myimage.com, foo.myugc.com, foo.bar.mydomain.com. 至於如何挑選要使用那一種憑證,就要視你的網站規劃而定了,它們的費用也不一樣,正常來說,萬用字元會比憑證主體別名還貴。
以下詳列「憑證主體別名」的申請以及自行簽章的方式,環境為 Cent-OS 5.x, OpenSSL 0.9.8e. 你需要修改 /etc/pki/tls/openssl.cnf
1. 啟動擴展
[req] req_extensions = v3_req2. 增加 subjectAltName 到 v3_req 的區段
[ v3_req ] subjectAltName = @alt_names3. 例如你要包含的多個網域
[alt_names] DNS.1 = example.com DNS.2 = hello.example.com DNS.3 = testing.com DNS.4 = www.testing.com DNS.5 = foo.testing.com4. 修改完成,存檔後,接著產生私密金鑰
openssl genrsa -des3 -out www.example.com.key 2048這個步驟,一定要你輸入 passphrase;不過在未來使用上,重啟 Apache Server 時,都一定要輸入這個 passphrase 有點麻煩。我們可以另外產生一個不需要 passphrase 的 key 來使用。
openssl rsa -in www.example.com.key -out www.example.key.insecure5. 產生 CSR(憑證簽署請求)
openssl req -new -key www.example.com.key -out www.example.com.csr按照步驟填入適當資料,請注意,在填寫 commonName 的地方,就是填入你的主網站名稱,如本例:www.example.com 做完之後,就會有一個 www.example.com.csr 的檔案,在你當前的目錄中,接著我們確認一下
openssl req -text -noout -in www.example.com.csr應該會看到
Attributes: Requested Extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Subject Alternative Name: DNS:example.com, DNS:hello.example.com, DNS:testing.com, DNS:www.testing.com, DNS:foo.testing.com這樣,你就可以拿這個 CSR 去申請有效的 SAN 憑證了。在此,我們繼續做自行簽章及核發的動作。
openssl x509 -req -days 3650 -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in www.example.com.csr -signkey www.example.com.key -out www.example.com.crt這裡,要注意一下,一定要加 "-extfile /etc/pki/tls/openssl.cnf -extensions v3_req" 這二個參數(卡關很久啊!);然後,再驗證一下
openssl x509 -text -noout -in www.example.com.crt應該會看到
X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Subject Alternative Name: critical DNS:example.com, DNS:hello.example.com, DNS:testing.com, DNS:www.testing.com, DNS:foo.testing.com這樣,就大致完成了。接著就 copy www.example.com.key.insecure, 以及 www.example.com.crt 到你的 Apache Server, 並設定 apache conf(請自己 google 一下就不贅述了)