我们有一台运行virtualmin的服务器,其中多个网站都位于虚拟服务器中。我以前从未在其他服务器上遇到过此问题,但是我们发布了CSR,并从客户端取回SSL并进行了安装。
安装后,我收到许多常见的名称错误。这似乎是因为SSL中的域包含www。您无法将其分配给虚拟服务器,因此不匹配。但是,通过在/etc/apache2/sites-enabled/example.conf记录中包含www.domain.com,该错误就消失了。
但是,如果我访问网站https://www.example.com,则会得到一个
ERR_SSL_PROTOCOL_ERROR
我还尝试运行以下内容:
openssl s_client -connect www.example.com:443
输出以下内容:
CONNECTED(00000003)
3073689800:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:759:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 297 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
我检查一下openssl是否显示正在监听端口443。我还调整了ports.conf文件,使其包含更多细节:
#Listen 80
#Listen 443
NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
NameVirtualHost *:443
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
在/etc/apache2/sites-enabled/example.conf中,我确保为虚拟服务器设置了443个设置,而不仅仅是80个设置,并且其中包括以下内容:
<VirtualHost 123.123.123.123:443>
SuexecUserGroup "#1000" "#1000"
ServerName www.example.com
ServerAlias example.com
DocumentRoot /home/example/public_html
ErrorLog /var/log/virtualmin/example.com_error_log
CustomLog /var/log/virtualmin/example.com_access_log combined
ScriptAlias /cgi-bin/ /home/example/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/example/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
AddType application/x-httpd-php .php
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/example/fcgi-bin/php5.fcgi .php5
</Directory>
<Directory /home/example/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
SSLEngine on
SSLCertificateFile /home/example/ssl.cert
SSLCertificateKeyFile /home/example/ssl.key
SSLCACertificateFile /home/example/ssl.ca
</VirtualHost>
我仍然有一个想法,那就是只需再次执行CSR但没有通用名称的www,也许可以解决所有这些问题。但是在我回到客户之前(我已经有几次),我想看看这是否真的可以解决它。
更新
因此,在昨晚的混乱中,我花时间将服务器从12.04升级到14.04。这使事情变得更容易诊断,因为我的另一台服务器(约有20个站点)可以正常运行,并且位于14.04上。
我也确保启用default-ssl.conf和000-default.conf只是为了确保。使用 sudo tail -40 /var/log/apache2/error.log 浏览一些SSL日志,我所看到的就是以下信息:
[ssl:warn] [pid 6905] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
我也尝试过:
nmap --script +ssl-enum-ciphers example.com
它表明端口443已打开,但该端口没有显示ssl-enum-cipher。
更新2
尝试了新证书。仍然不起作用。但是我只是通过Firefox加载了该网站,并看到了以下内容: ERR_SSL_PROTOCOL_ERROR
如果侦听443处于打开状态,但Virtualhost没有为443设置,则.conf文件肯定是..
答案 0 :(得分:1)
我的天哪。
所以我发现了问题。另一个虚拟主机网站还在virtualhost文件中为443包含了一个部分。然而,该网站未正确配置为使用SSL,因为不应这样做。
我一时兴起,决定删除文件中的443条目,然后重新启动Apache。现在该网站可以正常加载!