Apache SSL 配置错误(SSL 连接错误)
Posted
技术标签:
【中文标题】Apache SSL 配置错误(SSL 连接错误)【英文标题】:Apache SSL Configuration Error (SSL Connection Error) 【发布时间】:2011-03-18 05:36:54 【问题描述】:我正在尝试在我的服务器上配置 Apache 以使用 ssl,但每次访问我的网站时,我都会在浏览器中收到以下消息:
SSL 连接错误。 无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要您没有的客户端身份验证证书。 错误 107 (net::ERR_SSL_PROTOCOL_ERROR):SSL 协议错误。
上面的错误消息似乎是 Google Chrome 原生的。但是,即使消息不同,该站点的 ssl 也无法在任何浏览器上运行。
只是一些背景情况:我正在使用Ubuntu 10.04 desktop edition
。
我通过安装zend server
安装了apache
(它自动安装了 apache)。
然后我安装了openssl
。非 https 页面在网站上运行良好。
我尝试从多个证书站点获取试用证书,但没有任何效果(同样的错误)。
我以前将我的网站托管在另一台 ssl 工作正常的服务器上。我也尝试使用该服务器中的密钥和证书文件,但我得到了同样的错误。
域名和IP还是一样的。我的SSLCertificateFile
和SSLCertificateKeyFile
指向正确的目录和文件。
我也没有启用 SSLVerifyClient。
如果有人有任何建议,将不胜感激。
【问题讨论】:
我刚看到这篇文章。已经有一段时间了,但如果有人通过谷歌偶然发现这个问题,我想我还是会发布修复程序。证书安装不正确。我通常会尝试自己解决问题以从内到外学习,但由于我在截止日期前,我不得不从 oDesk 找人来解决问题。 由于您忘记了确切的步骤,我列出了我必须做的所有事情,包括检查证书和密钥完整性。赞成的问题! :) 【参考方案1】:我遇到了与@User39604 相同的问题,并且不得不遵循各种建议。由于他不记得他遵循的确切路径,让我列出我的路径:
使用<?php echo phpinfo();?>
检查您是否有SSL YES
必要时
A. 在 apache 上启用 ssl sudo a2enmod ssl
B. 安装 openssl sudo apt-get install openssl
C.检查443端口是否打开sudo netstat -lp
D.如有必要,更改/etc/apache2/ports.conf
,这样就可以了
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>
通过
获取密钥和证书A. 向认证机构(Comodo、GoDaddy、Verisign)支付一对
B. 生成您自己的* - 见下文(仅用于测试目的)
更改您的配置(在 ubuntu12 中 /etc/apache2/httpd.conf
- 默认为空文件)以包含正确的 <VirtualHost>
(替换 MYSITE.COM
以及密钥和证书路径/名称以指向您的证书和密钥):
<VirtualHost _default_:443>
ServerName MYSITE.COM:443
SSLEngine on
SSLCertificateKeyFile /etc/apache2/ssl/MYSITE.COM.key
SSLCertificateFile /etc/apache2/ssl/MYSITE.COM.cert
ServerAdmin MYWEBGUY@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog $APACHE_LOG_DIR/errorSSL.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog $APACHE_LOG_DIR/accessSSL.log combined
</VirtualHost>
虽然/etc/apache2/sites-enabled/
和/etc/apache2/sites-available/
中提供了许多其他虚拟主机配置,但/etc/apache2/httpd.conf
对解决所有问题至关重要。
更多信息:
http://wiki.vpslink.com/Enable_SSL_on_Apache2
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#selfcert
*生成您自己的证书(自签名)将生成用户浏览器无法识别其权限的证书。因此,浏览器会尖叫血腥谋杀,用户必须在浏览器真正打开页面之前“了解风险”十几次。因此,它仅适用于测试目的。话虽如此,这是HOW-TO:
-
转到 apache 文件夹(在 ubuntu12
/etc/apache2/
)
创建一个文件夹,如 ssl
(或任何适合您的文件夹,名称不是系统要求)
转到所选目录/etc/apache2/ssl
运行sudo openssl req -new -x509 -nodes -out MYSITE.COM.crt -keyout MYSITE.COM.key
在<VirtualHost>
标签中使用MYSITE.COM.crt
和MYSITE.COM.key
名称格式不受严格的系统要求,必须与文件相同:)
- 212-MYSITE.COM.crt
、june2014-Godaddy-MYSITE.COM.crt
之类的名称应该可以使用。
【讨论】:
对我来说是缺少“httpd.conf
文件的结束标签应该是 </VirtualHost>
而不是 </Directory>
。我编辑了原始答案,但我不知道它是否会被接受,因为它已经停用了一年。
我做这一切都没有成功...幸运的是,实际上使用sudo a2ensite default-ssl.conf
启用该站点是一个正确的解决方案...呃。
对我来说,在第 3 步之前,此命令有效:sudo a2ensite default-ssl.conf
【参考方案2】:
我在 chrome 中遇到了同样的错误(而在 Firefox、IE 中则不同)。
同样在error.log中我得到[error] [client cli.ent.ip.add] Invalid method in request \x16\x03
按照this site 的说明,我从以下位置更改了配置:
<VirtualHost subdomain.domain.com:443>
ServerAdmin admin@domain.com
ServerName subdomain.domain.com
SSLEngine On
SSLCertificateFile conf/ssl/ssl.crt
SSLCertificateKeyFile conf/ssl/ssl.key
</VirtualHost>
到:
<VirtualHost _default_:443>
ServerAdmin admin@domain.com
ServerName subdomain.domain.com
SSLEngine On
SSLCertificateFile conf/ssl/ssl.crt
SSLCertificateKeyFile conf/ssl/ssl.key
</VirtualHost>
现在一切正常了:)
【讨论】:
我遇到了与 *:433 相同的问题 将其更改为 default:433 使其在 Chrome 中工作,而之前它是断断续续的。 请说明对哪些文件的更改导致成功,因为您可以编辑httpd.conf
以及sites-enabled/000-default
、sites-available/default-ssl
、sites-available/yoursite.com
。还必须检查 SSL 是否在服务器上运行。
从来不知道 default 代表什么,在今天无法推送 443 内容的所有麻烦之后,现在它是有道理的【参考方案3】:
我想针对这种情况提出一个常见原因:
有时客户正在运行 Skype,它使用端口 443 却没有意识到这一点。当他们启动 Tomcat 或 Apache 时,它似乎已启动,但无法与端口 443 绑定。这是用户将在浏览器中收到的确切消息。解决方法是停止在端口 443 上运行的内容并重新启动网络服务器,以便它可以与端口 443 绑定。
客户可以在启动网络服务器后重新启动Skype,Skype会检测到443端口正在使用,并选择不同的端口使用。
【讨论】:
【参考方案4】:正确启用 SSL 的步骤。
sudo a2enmod ssl
sudo apt-get install openssl
在您的 SSL 配置文件 (default-ssl.conf) 中配置 SSL 证书的路径,该文件可能位于 /etc/apache2/sites-available。我已将证书存储在 /etc/apache2/ssl/ 下
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/certificate.crt
SSLCertificateChainFile /etc/apache2/ssl/ca_bundle.crt
SSLCertificateKeyFile /etc/apache2/ssl/private.key
启用 SSL 配置文件
sudo a2ensite default-ssl.conf
【讨论】:
【参考方案5】:#Make sure that you specify the port for both http and https ie.
NameVirtualHost:80
NameVirtualHost:443
#and
<VirtualHost *:80>
<VirtualHost *:443>
#mixing * and *:443 does not work it has to be *:80 and *:443
【讨论】:
你能解释一下吗? 通配符 '*' 匹配所有域和所有端口 - 所以如果你想为 SSL 添加特定的虚拟主机,你不能简单地使用我遇到了这个问题,解决方案有点傻。
我正在使用 Cloudflare 作为我网站的代理。为了能够通过 SSH 登录,我在我的 /etc/hosts
文件中添加了一个条目,因此我不需要记住我的服务器的 IP 地址。
xxx.xx.xx.xxx example.com
所以在我的浏览器中,当我访问 https://www.example.com 时,我使用的是 Cloudflare 代理,而当我访问 https://example.com 时,我直接访问了服务器。因为 Cloudflare 设置不需要您添加中间证书,所以当我转到 https://example.com 时,我在浏览器中看到了这个安全异常,但 https://www.example.com 正在工作。
解决方案:从我笔记本电脑的/etc/hosts
文件中删除该条目。
如果这不是您的问题,我建议您使用one of the many online SSL checker tools 来尝试诊断您的问题。
我还建议使用 ping 检查报告的 IP 地址,并将其与预期的 IP 地址进行检查。
ping https://www.example.com/
另一个非常有用的 SSL 资源是Mozilla SSL Configuration Generator。它可以为您生成 SSL 配置。
【讨论】:
【参考方案7】:当我开始更改 Apache 配置时,我不知道自己在做什么。在遇到与您遇到的相同问题之前,我一直认为它可以正常工作,特别是 Chrome 出现此错误。
我所做的是注释掉所有用于配置 SSL 验证的特定于站点的指令,确认 Chrome 允许我进入,在重新启用指令之前查看文档之前的文档,然后重新启动 Apache。通过仔细阅读这些内容,您应该能够找出是哪些原因导致了您的问题。
就我而言,我是从这个开始的:
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
SSLRequireSSL On
到这里
<Location /sessions>
SSLRequireSSL
SSLVerifyClient require
</Location>
如您所见,我有很多改变才能到达那里。
【讨论】:
【参考方案8】:当我第一次按照说明设置默认 apache2 ssl 配置时遇到此错误,方法是在 /etc/apache2/sites-enabled
中放置 /etc/apache2/sites-available/default-ssl
的符号链接。然后我随后尝试在另一个配置文件中的端口 443 上添加另一个 NameVirtualHost,并开始收到此错误。
我通过删除 /etc/apache2/sites-enabled/default-ssl
符号链接来修复它,然后将这些行放在另一个配置文件中(httpd.conf,这可能不是很好的形式,但有效):
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateChainFile /etc/apache2/ssl/chain_file.crt
SSLCertificateFile /etc/apache2/ssl/site_certificate.crt
SSLCertificateKeyFile /etc/apache2/ssl/site_key.key
ServerName www.mywebsite.com
ServerAlias www.mywebsite.com
DocumentRoot /var/www/mywebsite_root/
</VirtualHost>
【讨论】:
【参考方案9】:我遇到了这个问题,因为我在 httpd.conf 和 httpd-ssl.conf 中都定义了<VirtualHost>
。
在httpd.conf中,定义为
<VirtualHost localhost>
在httpd-ssl.conf中,定义为
<VirtualHost _default_:443>
以下更改解决了这个问题,在httpd.conf中添加:80
<VirtualHost localhost:80>
【讨论】:
【参考方案10】:这是在 Ubuntu 上为我解决的问题。
-
启用模块:
a2enmod ssl
将所有与证书相关的文件移动到文件夹/usr/local/ssl
并使其世界可读:chmod -R +r /usr/local/ssl
在我的虚拟主机中将 <VirtualHost *:80>
更改为 <VirtualHost *:*>
。
在我的虚拟主机中的所有其他 SSL 指令之前添加了 SSLEngine On
。
如果您在证书上设置了密码短语,Apache 会在重新启动时提示您输入密码。
【讨论】:
与其让 SSL 世界可读,不如授予 apache 访问权限更安全:usermod -aG ssl-cert www-data【参考方案11】:与其他答案类似,当没有配置为使用 SSL 的站点时会出现此错误。
当我从 Debian Wheezy 升级到 Debian Jessie 时出现错误。新版本的 Apache 需要一个以.conf
结尾的站点配置文件。因为我的配置文件没有,所以它被忽略了,并且没有其他配置文件可以提供 SSL 连接。
【讨论】:
【参考方案12】:我也遇到了这个问题,也是由于配置错误。我使用的是 tomcat,并且在 server.xml 中指定了我的连接器:
<Connector port="17443" SSLEnabled="true"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keyAlias="wrong" keystorePass="secret"
keystoreFile="/ssl/right.jks" />
当我这样修复它时:
<Connector port="17443" SSLEnabled="true"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keyAlias="right" keystorePass="secret"
keystoreFile="/ssl/right.jks" />
它按预期工作。换句话说,验证您不仅拥有正确的密钥库,而且在其下指定了正确的别名。感谢user396404 的宝贵提示。
【讨论】:
这个问题是关于 Apache Httpd,而不是 Apache Tomcat。【参考方案13】:我通过注释解决了它:
AcceptFilter https 无
在 httpd.conf 中
根据: http://www.apachelounge.com/viewtopic.php?t=4461
【讨论】:
【参考方案14】:原来是 SSL 证书安装不正确。重新安装它正确解决了问题
【讨论】:
如果你改进了这个答案,我会很高兴的。你做错了什么?之前是什么,之后又是什么?你是怎么发现它安装不正确的? 说实话,我当时很着急,雇了一个顾问进来重新安装证书。这是很久以前的事了,我真的不记得确切的细节了。对于缺乏更多信息,我深表歉意。 @user396404 您的建议是隐藏的线索之一,尽管我必须在这里执行许多其他步骤。我在一个答案中编译了所有内容。您的回答是我遇到的一个很难找到/识别的问题。赞成! :)以上是关于Apache SSL 配置错误(SSL 连接错误)的主要内容,如果未能解决你的问题,请参考以下文章
Apache2“localhost”可以工作,但对于 127.0.0.1,我得到“无法访问此站点,拒绝连接”。 SSL 也返回授权错误