如何在单个 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