我有一台 Apache 2.4 服务器,我已为它创建了自签名证书,用于使用新客户端站点测试 https。我遇到的问题是,当我尝试转到我在单独的 vhosts.conf 文件中设置的已定义虚拟主机时,ssl.conf 文件始终为我的站点加载。
有人能帮助我理解为什么所需的虚拟主机从未加载而只有默认主机可以加载吗?
我的 ssl.conf 内容
Listen 443 https
SSL Global Context
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName localhost:443
ErrorLog logs/default_ssl_error_log
TransferLog logs/default_ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
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 demo.ffh.com:443>
ServerAdmin [email protected]
ServerName demo.ffh.com
DocumentRoot "/var/www/vhosts/ffh/public"
RewriteEngine On
# And THIS doesn't seem to be working at all!
LogLevel debug rewrite:trace8
<Directory "/var/www/vhosts/ffh/public/">
AllowOverride all
SSLOptions +StdEnvVars
#Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
SSLRequireSSL On
</Directory>
SSLEngine on
SSLCertificateKeyFile /etc/httpd/ssl/ssl.key/demo_ffh.key
SSLCertificateFile /etc/httpd/ssl/ssl.crt/demo_ffh.crt
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
CustomLog logs/ssl_ffh-access.log combined
ErrorLog logs/ssl_ffh-error.log
</VirtualHost>
有谁知道为什么 vhosts.conf 网站被忽略而采用默认设置?我该如何解决这个问题?我整天都在为此绞尽脑汁。
注意:“可能值得一提的是,我已尝试在 vhost.conf 中使用 IP 地址和 *:443 代替域,但仍然没有效果。”
答案1
我一直遇到这个问题,有四种解决方案
- 直接在 /etc/httpd/conf.d/ssl.conf 中更改路径以指向我的证书和密钥(以及任何其他中间证书?)
如果整个机器只有一个 SSL 证书,那么这是可以的。
- 从 ssl.conf 中删除整个默认虚拟主机条目,
这给了我 SSL.conf 中的配置,并允许我为多个 SSL 证书确定自己的 VirtualHost 条目(如有必要)
- 将 ssl.conf(按字母顺序)放在我想要的 conf 文件后面,我将其命名为“vhosts.conf”(我将 ssl.conf 更改为“vv.conf”以进行测试)
这也适用于我的 vhosts.conf 文件中的多个 SSL 证书,但由于更改了名称,因此让我感觉很麻烦。我猜可以使用 010-vhosts.conf 020-ssl.conf 的 conf.modules.d-meets-sitesenabled 语法,这样感觉麻烦会小一些。
- 将我自己的证书和密钥放入 /etc/pki/tls/certs/localhost.crt 和 /etc/pki/tls/private/localhost.key
呃...也许对某些人来说...但我不喜欢那样。
答案2
好的...我想我已经解决了。哦
我不确定究竟是什么使得这项工作成功,但我做的最后几件事是;
- 我创建了一个新的自签名证书,并设置了 vhost 配置以使用它和相应的密钥。
- 然后我将虚拟主机配置更改为 *:443。
- 重新启动 Apache 服务器。然后 VIOLA!发生了什么?!
哦,好吧...也许这里学到了教训?
答案3
我觉得我遇到了相反的问题。这里的 OP 希望处理 Vhost 文件而不是 ssl.conf。
我需要在 e.conf 之前处理 ssl.conf,就像以前一样。我不明白为什么以前 ssl.conf 是默认设置,并且 /etc/httpd/conf.d 中没有文件会干扰,即使它们按字母顺序排列在第一位。
我认为针对我的情况的解决方案是重新安装,除非有人能提供更好的解决方案。
编辑:我找到了比重新安装更好的解决方案(至少目前如此)Let's Encrypt 首先停止处理 ssl.conf 但我认为这是一种黑客行为,我仍在寻找更好的选择。
编辑:解决我的问题的方法是重命名文件em-le-ssl.conf
,而不是em.conf
按字母顺序将其重命名为 ssl.conf 后面的某个名称。要解决此处的问题,提问者必须将其 vHost-le-ssl.conf 文件重命名为 ssl.conf 前面的某个名称。
答案4
看来确实如此(见这个答案)你需要输入
<VirtualHost *:443>
对于你的站点/配置文件(以及每个文件),而不是
<VirtualHost demo.ffh.com:443>
解析将通过参数进行ServerName
。