如何在單個 Apache 伺服器上設定多個 SSL 主機


在本文中,我們將向您展示如何在 CentOS 上使用單個 IP 地址在 Apache 上設定多個 SSL 證書。通常,網站管理員被限制在每個套接字使用一個 SSL 證書,這將導致公司產生大量的投資。此限制可能導致他們為其域名託管購買多個 HTTP 網站的 IP 地址,或購買允許他們使用多個網路介面卡的硬體。

這可以透過稱為伺服器名稱指示 (SNI) 的 SSL 協議擴充套件來實現。大多數當前的桌上型電腦和移動 Web 瀏覽器都支援 SNI。使用 SNI 的主要好處是能夠保護多個網站,而無需購買更多 IP 地址。

配置

確保已安裝並啟用了 **mod_ssl** 安全模組,以便 Apache Web 伺服器可以使用 OpenSSL 庫和工具包

# yum install mod_ssl openssl

執行以下命令

# mkdir -p /etc/httpd/ssl/
# mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak
# cd /etc/httpd/ssl/

為您的域名生成 SSL 證書籤名請求檔案

# openssl genrsa -out mydomain1.key 2048
# openssl req -new -key mydomain1.key -out mydomain1.csr
# openssl genrsa -out domain2.key 2048
# openssl req -new -key mydomain2.key -out mydomain2.csr
Enter the following details for your certificates:
Country Name (2 letter code) [AU]:IN
State or Province Name (full name) [Some-State]:Telengana
Locality Name (eg, city) []:Hyderabad
Organization Name (eg, company) [Internet Widgits Pty Ltd]:mydomain1.com
Organizational Unit Name (eg, section) []:mydomain.com
Common Name (e.g. server FQDN or YOUR name) []:mydomain1.com
Email Address []:sslcertificate@domain1.com

在生產環境中部署時,建議安裝商業 SSL 證書。或者,我們只需生成自簽名 SSL 證書,該證書用於開發目的或使用以下命令對網站進行暫存

# openssl x509 -req -days 365 -in mydomain1.csr -signkey mydomain1.key -out domain1.crt
# openssl x509 -req -days 365 -in mydomain2.csr -signkey mydomain2.key -out mydomain2.crt

編輯“ssl.conf” Apache 配置檔案

# vi /etc/httpd/conf.d/ssl.conf
LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
   SSLPassPhraseDialog builtin
   SSLSessionCacheTimeout 300
   SSLMutex default
   SSLRandomSeed startup file:/dev/urandom 256
   SSLRandomSeed connect builtin
   SSLCryptoDevice builtin
   SSLStrictSNIVHostCheck off
<VirtualHost *:443>
   DocumentRoot /var/www/html/mydomain1
   ServerName mydomain1.com
   ServerAlias www.mydomain1.com
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
   SSLCertificateFile /etc/httpd/ssl/mydomain1.cr
   SSLCertificateKeyFile /etc/httpd/ssl/mydomain1.key
   ErrorLog logs/ssl_error_log
   TransferLog logs/ssl_access_log
   LogLevel warn
   <Files ~ "\.(cgi|shtml|phtml|php3?)$">
   SSLOptions +StdEnvVars
   </Files>
   SetEnvIf User-Agent ".*MSIE.*" \
   nokeepalive ssl-unclean-shutdown \
   downgrade-1.0 force-response-1.0
   CustomLog logs/ssl_request_log \
   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
<VirtualHost *:443>
   DocumentRoot /var/www/html/mydomain2
   ServerName mydomain2.com
   ServerAlias www.mydomain2.com
   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
   SSLCertificateFile /etc/httpd/ssl/mydomain2.crt
   SSLCertificateKeyFile /etc/httpd/ssl/mydomain2.key
   ErrorLog logs/ssl_error_log
   TransferLog logs/ssl_access_log
   LogLevel warn
   <Files ~ "\.(cgi|shtml|phtml|php3?)$">
   SSLOptions +StdEnvVars
   </Files>
   SetEnvIf User-Agent ".*MSIE.*" \
   nokeepalive ssl-unclean-shutdown \
   Downgrade-1.0 force-response-1.0
   CustomLog logs/ssl_request_log \
   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

當我們使用商業 SSL 證書時,簽名機構可能會包含一箇中間 CA 證書。在這種情況下,我們建立一個新的“/etc/httpd/ssl/ca.crt”檔案並將中間 CA 的內容貼上到其中,然後我們需要編輯“ssl.conf”配置檔案並取消註釋以下行。

SSLCertificateChainFile /etc/httpd/ssl/ca.crt

以便 Apache Web 伺服器可以找到您的 CA 證書。

測試 Apache 配置

# /etc/init.d/httpd configtest
Syntax OK

重新啟動 Apache 服務以使更改生效

# service httpd restart

在您喜歡的 Web 瀏覽器中開啟 https://mydomain1.com 和 https://mymydomain2.com,並驗證 SSL 證書是否已正確安裝。

在此設定和重新啟動 Apache 後,您可以使用支援 SNI 的瀏覽器訪問 http 站點。如果設定正確,則您將能夠訪問該站點,而不會出現任何警告或問題。您可以根據需要新增任意數量的網站或 SSL 證書以使用上述過程。

更新於: 2020 年 1 月 20 日

4K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.