使用 Virtualhost 在 Apache 中配置 SSL

Posted

技术标签:

【中文标题】使用 Virtualhost 在 Apache 中配置 SSL【英文标题】:Configure Ssl in Apache With Virtualhost 【发布时间】:2017-11-26 17:24:29 【问题描述】:

我正在尝试为 Ssl 连接配置 apache,但是当我尝试使用 https 访问网站时是不可能的。

这是我网站的虚拟主机:

<VirtualHost *:443>
DocumentRoot "C:\xampp\htdocs\www.example.com"
ServerName www.example.com
SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "C:\xampp\htdocs\www.example.com"
ServerName example.com
SSLEngine on
SSLCertificateFile "conf/ssl.crt/server.crt"
SSLCertificateKeyFile "conf/ssl.key/server.key"
</VirtualHost>

我在 c:\xampp\apache\conf\httpd.conf 的这一行之前省略了 # LoadModule rewrite_module modules/mod_rewrite.so

我在 c:\xampp\apache\conf\extra\httpd-xampp.con 中添加了这些行

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect /xampp folder to https
    RewriteCond %HTTPS !=on
    RewriteCond %REQUEST_URI xampp
    RewriteRule ^(.*) https://%SERVER_NAME$1 [R,L]

    # Redirect /phpMyAdmin folder to https
    RewriteCond %HTTPS !=on
    RewriteCond %REQUEST_URI phpmyadmin
    RewriteRule ^(.*) https://%SERVER_NAME$1 [R,L]

    # Redirect /security folder to https
    RewriteCond %HTTPS !=on
    RewriteCond %REQUEST_URI security
    RewriteRule ^(.*) https://%SERVER_NAME$1 [R,L]

    # Redirect /webalizer folder to https
    RewriteCond %HTTPS !=on
    RewriteCond %REQUEST_URI webalizer
    RewriteRule ^(.*) https://%SERVER_NAME$1 [R,L]
</IfModule>

我在以下文件的每个目录中添加了一个 SSLRequireSSL 指令:

Config File: c:\xampp\apache\conf\extra\httpd-xampp.conf
c:\xampp\phpmyadmin
c:\xampp\htdocs\xampp
c:\xampp\webalizer
c:\xampp\security\htdocs
Config File: c:\xampp\webdav
c:\xampp\webdav

重启apache时的错误日志:

[Fri Jun 23 10:00:24.739140 2017] [ssl:warn] [pid 5012:tid 268] AH01909: RSA certificate configured for localhost:443 does NOT include an ID which matches the server name
[Fri Jun 23 10:00:24.742070 2017] [ssl:warn] [pid 5012:tid 268] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Fri Jun 23 10:00:24.947148 2017] [ssl:warn] [pid 5012:tid 268] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[Fri Jun 23 10:00:24.948125 2017] [ssl:warn] [pid 5012:tid 268] AH01909: RSA certificate configured for localhost:443 does NOT include an ID which matches the server name
[Fri Jun 23 10:00:24.949101 2017] [ssl:warn] [pid 5012:tid 268] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Fri Jun 23 10:00:25.077031 2017] [mpm_winnt:notice] [pid 5012:tid 268] AH00354: Child: Starting 150 worker threads.

谁能告诉我我做错了什么或错过了什么?

【问题讨论】:

【参考方案1】:

您能否更改 ServerName 指令以匹配 apache 日志建议的证书公用名? 要验证您在证书中使用的通用名称是否与服务器名称匹配,请运行

openssl x509 -in server.crt -noout -subject

如果这不起作用,请使用完全限定的域名,例如 mydomain.dev。要使其正常工作,请在您的主机文件中添加域以使用环回 IP 127.0.0.1 进行解析 - 这类似于我的文章中的步骤 1 https://www.bizmate.biz/articles-mainmenu-2/18-little-it-tricks/48-ssl-virtualhost-apache2-xampp

这是更改主机文件的方法。 https://support.rackspace.com/how-to/modify-your-hosts-file/

另外,为了确定 SSL 是否配置正确,请您只关注它并暂时禁用 mod_rewrite。事实上,如果它不起作用,请使用我文章中的步骤,并恢复您迄今为止所做的任何更改/从头开始。然后,一旦您的浏览器和 apache 对证书和 SSL 加密感到满意,您就可以稍后让 mod_rewrite 工作。

【讨论】:

我用 127.0.0.1 替换了 ServerName 但它不起作用。我在 httpd-vhosts.conf 文件中添加了第 127.0.0.1 行 www.mydomain.com 但仍然没有。 hosts 文件与 apache 无关。 IT 是强制您的机器将您的域解析为该 ip 的文件。这是更改主机文件的方法。 support.rackspace.com/how-to/modify-your-hosts-file 请将其设置为非常具体的域,例如 belka.dev,然后在您的 apache vhost(不要与 hosts 文件混淆)中更改服务器名称。 1-禁用 ssl vhost 并查看 apache 是否启动,2 重新启用 ssl vhost 并查看它是否有效,或者是否不是日志中的错误。如果没有这样做,请按照文章第 3 步生成 ssl 证书。 我做了但仍然没有。错误日志显示:为 localhost:443 配置的 RSA 证书不包含与服务器名称匹配的 ID [ssl:warn] [pid 5012:tid 268] AH02292:初始化:基于名称的 SSL 虚拟主机仅适用于具有 TLS 的客户端服务器名称指示支持 (RFC 4366) [Fri Jun 23 10:00:24.947148 2017] [ssl:warn] [pid 5012:tid 268] AH01873: Init: Session Cache is not configured [hint: 您是否按照我文章中的步骤3来生成证书?你用什么作为通用名?如果你跑,你会看到什么? openssl x509 -in server.crt -noout -subject 我尝试了该命令,输出为 CN=www.mydomain.com,与我在虚拟主机中的服务器名称相同。但我仍然收到错误日志 [Tue Jun 27 10:38:51.227375 2017] [ssl:warn] [pid 2468:tid 268] AH01909: 为 localhost:443 配置的 RSA 证书不包含与服务器名称匹配的 ID

以上是关于使用 Virtualhost 在 Apache 中配置 SSL的主要内容,如果未能解决你的问题,请参考以下文章

导入/包含要在 Apache 的 httpd.conf 中使用的外部 VirtualHost 文件

VirtualHost 阻止 XAMPP 声明启动 Apache

在 Ubuntu 12.04 上的 Apache2 中配置 VirtualHost 的问题

如何使用 Apache VirtualHost 获取 .htaccess 文件

如何使用 Apache VirtualHost 获取 .htaccess 文件

Apache本地VirtualHost重定向到其他VirtualHost