我正在尝试在我的服务器上配置Apache以使用ssl,但每次访问我的网站时,我都会在浏览器中收到以下消息:
SSL connection error. Unable to make a secure connection to the server. This may be a problem with the server, or it may be requiring a client authentication certificate that you don't have. Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.
上面的错误消息似乎是Google Chrome原生的 . 但是,即使消息不同,该站点的ssl也无法在任何浏览器上运行 .
只是一些背景情况:我使用的是Ubuntu 10.04桌面版 . 我通过安装zend服务器安装了apache(它自动安装了apache) . 然后我安装了openssl . 非https页面在网站上正常工作 . 我尝试从多个证书站点获取试用证书,但没有任何工作(相同的错误) . 我之前在另一台ssl工作正常的服务器上托管我的网站 . 我也尝试使用该服务器上的密钥和crt文件,但我得到了同样的错误 . 但域名和IP仍然相同 . 我的SSLCertificateFile和SSLCertificateKeyFile指向正确的目录和文件 . 我也没有启用SSLVerifyClient .
如果有人有任何建议,我们将不胜感激 .
13 回答
与其他答案类似,当没有配置为使用SSL的站点时,可能会遇到此错误 .
当我从Debian Wheezy升级到Debian Jessie时,我遇到了错误 . 新版本的Apache需要以
.conf
结尾的站点配置文件 . 由于我的配置文件没有,因此被忽略,并且没有其他配置为提供SSL连接 .我和@ 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
,这有效A. 支付一个认证机构(Comodo,GoDaddy,Verisign)
B. 生成您自己的* - 见下文(仅测试目的)
/etc/apache2/httpd.conf
中 - 默认为空文件)以包含正确的<VirtualHost>
(替换MYSITE.COM
以及密钥和证书路径/名称以指向您的证书和密钥):虽然许多其他的虚拟主机配置将在
/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
*生成您自己的证书(自签名)将导致证书的权限,用户的浏览器将无法识别 . 因此,浏览器会尖叫血腥谋杀,用户必须在浏览器实际打开页面之前“了解风险”十几次 . 所以,它只适用于测试目的 . 话虽如此,这是如何:
转到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
,_959543等名称应该有效 .我在chrome中遇到了同样的错误(在Firefox,IE中也有不同的错误) . 另外在error.log中我得到
[error] [client cli.ent.ip.add] Invalid method in request \x16\x03
按照说明表this site我改变了我的配置FROM:至:
现在它工作得很好:)
我想为这种情况建议的一个常见原因:
有时客户正在运行Skype,它使用端口443而没有意识到它 . 当他们去启动Tomcat或Apache时,它似乎启动但无法与端口443绑定 . 这是用户在浏览器中收到的确切消息 . 解决方法是停止端口443上运行的内容并重新启动Web服务器,以便它可以与端口443绑定 .
客户可以在启动网络服务器后重新启动Skype,Skype将检测到正在使用的端口443并选择要使用的其他端口 .
我遇到了这个问题,解决方案有点傻 .
我正在使用Cloudflare作为我网站的代理 . 为了能够通过SSH登录,我在我的
/etc/hosts
文件中添加了一个条目,所以我没有't need to remember my server'的IP地址 .所以在我的浏览器中,当我去https://www.example.com时,我正在使用Cloudflare代理,当我去https://example.com时,我直接去了服务器 . 由于Cloudflare设置不需要您添加中间证书,因此当我转到https://example.com时,我在浏览器中看到了此安全性异常,但https://www.example.com正在运行 .
The solution :从我的笔记本电脑的
/etc/hosts
文件中删除该条目 .如果这不是您的问题,我建议使用one of the many online SSL checker tools来尝试诊断您的问题 .
我还建议使用ping来检查报告的IP地址,并根据预期的IP地址进行检查 .
另一个非常有用的SSL资源是Mozilla SSL Configuration Generator . 它可以为您生成SSL配置 .
当我开始更改Apache配置时,我不知道自己在做什么 . 在我遇到你遇到的同样问题之前,我认为它正在工作,特别是Chrome有这个错误 .
我是什么确实注释掉了用于配置SSL验证的所有特定于站点的指令,确认Chrome让我进入,在重新启用之前查看了指令之前的文档,并重新启动了Apache . 通过仔细检查这些,您应该能够找出导致问题的是哪一个 .
在我的情况下,我从这里开始:
对此
如你所见,我有相当多的变化来实现目标 .
我遇到了这个问题,因为我在httpd.conf和httpd-ssl.conf中都定义了
<VirtualHost>
.在httpd.conf中,它被定义为
在httpd-ssl.conf中,它被定义为
以下更改解决了这个问题,在httpd.conf中添加:80
我遇到了这个问题,也是由于配置错误 . 我使用tomcat并在server.xml中指定了我的连接器:
当我这样修理它:
它按预期工作 . 换句话说,验证您不仅拥有正确的密钥库,而且还在其下方指定了正确的别名 . 感谢宝贵的提示user396404 .
当我第一次按照说明设置默认的apache2 ssl配置时,通过在
/etc/apache2/sites-enabled
中放入/etc/apache2/sites-available/default-ssl
的符号链接,我遇到了这个错误 . 然后我尝试在另一个配置文件中的端口443上添加另一个NameVirtualHost,并开始收到此错误 .我通过删除
/etc/apache2/sites-enabled/default-ssl
符号链接来修复它,然后将这些行放在另一个配置文件中(httpd.conf,这可能不是很好的形式,但有效):我通过评论解决了它:
AcceptFilter https none
在httpd.conf中
根据:http://www.apachelounge.com/viewtopic.php?t=4461
这就是在Ubuntu上为我修复它的原因 .
启用模块:
a2enmod ssl
将所有与证书相关的文件移动到文件夹
/usr/local/ssl
并使其成为世界可读的:chmod -R +r /usr/local/ssl
在我的虚拟主机中将
<VirtualHost *:80>
更改为<VirtualHost *:*>
.在我的虚拟主机中的所有其他SSL指令之前添加了
SSLEngine On
.如果在证书上设置密码短语,Apache应该在重新启动时提示您 .
事实证明,SSL证书安装不正确 . 正确地重新安装它修复了问题