如何在單個 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 證書以使用上述過程。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP