我正在尝试在我的服务器上配置Apache以使用ssl,但每次访问我的网站时,我都会在浏览器中收到以下消息:
SSL连接错误。 无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要您没有的客户端身份验证证书。 错误107(net :: ERR_SSL_PROTOCOL_ERROR):SSL协议错误。
上面的错误消息似乎是Google Chrome原生的。但是,即使消息不同,该站点的ssl也无法在任何浏览器上运行。
关于这种情况的一些背景知识:我正在使用Ubuntu 10.04 desktop edition
。
我通过安装apache
安装了zend server
(它自动安装了apache )。
然后我安装了openssl
。非https页面在网站上正常工作。
我尝试从多个证书站点获取试用证书,但没有任何工作(相同的错误)
我之前在另一台ssl工作正常的服务器上托管我的网站。我也尝试使用该服务器的密钥和证书文件,但我得到了同样的错误。
但域名和IP仍然相同。我的SSLCertificateFile
和SSLCertificateKeyFile
指向正确的目录和文件。
我也没有启用SSLVerifyClient。
如果有人有任何建议,我们将不胜感激。
答案 0 :(得分:35)
我和@ User39604有同样的问题,不得不遵循各种建议。由于他不记得他所遵循的确切路径,让我列出我的路径:
使用<?php echo phpinfo();?>
如有必要
A。在apache 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
中使用,但/etc/apache2/
解决所有问题非常重要。
了解更多信息:
http://wiki.vpslink.com/Enable_SSL_on_Apache2
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#selfcert
*生成您自己的证书(自签名)将导致证书具有用户浏览器无法识别的权限。因此,浏览器将尖叫血腥谋杀,用户将不得不了解风险&#34;在浏览器实际打开页面之前十几次。所以,它只适用于测试目的。话虽如此,这就是HOW-TO:
ssl
中)/etc/apache2/ssl
的文件夹(或任何适合您的文件夹,名称不是系统要求)sudo openssl req -new -x509 -nodes -out MYSITE.COM.crt -keyout MYSITE.COM.key
MYSITE.COM.crt
MYSITE.COM.key
标记<VirtualHost>
和212-MYSITE.COM.crt
醇>
名称格式不符合严格的系统要求,必须与文件相同:)
- june2014-Godaddy-MYSITE.COM.crt
,{{1}}等名称应该可以使用。
答案 1 :(得分:20)
我在chrome中遇到了同样的错误(在Firefox,IE中也有不同的错误)。
同样在error.log中我得到[error] [client cli.ent.ip.add] Invalid method in request \x16\x03
按照this site的说明,我更改了配置FROM:
<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>
TO:
<VirtualHost _default_:443>
ServerAdmin admin@domain.com
ServerName subdomain.domain.com
SSLEngine On
SSLCertificateFile conf/ssl/ssl.crt
SSLCertificateKeyFile conf/ssl/ssl.key
</VirtualHost>
现在它正常工作:)
答案 2 :(得分:6)
我想为这种情况提出建议的一个常见原因:
有时客户正在运行Skype,它使用端口443而没有意识到它。当他们去启动Tomcat或Apache时,它似乎启动但无法与端口443绑定。这是用户在浏览器中收到的确切消息。解决方法是停止端口443上运行的内容并重新启动Web服务器,以便它可以与端口443绑定。
客户可以在启动网络服务器后重新启动Skype,Skype将检测到正在使用的端口443并选择其他端口以供使用。
答案 3 :(得分:6)
#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
答案 4 :(得分:2)
我遇到了这个问题,解决方案有点傻。
我正在使用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配置。
答案 5 :(得分:2)
正确启用SSL的步骤。
{% raw %}
在SSL配置文件(default-ssl.conf)中配置SSL证书的路径,该文件可能位于/ etc / apache2 / sites-available中。我已将证书存储在/ etc / apache2 / ssl /
下---
- name: mydata
hosts: localhost
tasks:
- name: edit files
lineinfile:
dest: cluster.j2
line: " retention_days: {% raw %}{{ xyz }}{% endraw %}"
# or
# line: " retention_days: {{ '{{ xyz }}' }}"
insertafter: 'new_image'
启用SSL配置文件
sudo a2enmod ssl
sudo apt-get install openssl
答案 6 :(得分:1)
当我开始更改Apache配置时,我不知道自己在做什么。在我遇到你遇到的同样问题之前,我认为它一直在工作,特别是Chrome有这个错误。
我所做的是评论用于配置SSL验证的所有特定于站点的指令,确认Chrome让我进入,在重新启用之前查看指令之前的文档,然后重新启动Apache。通过仔细检查这些,您应该能够找出导致问题的原因。
在我的情况下,我离开了这个:
SSLVerifyClient optional
SSLVerifyDepth 1
SSLOptions +StdEnvVars +StrictRequire
SSLRequireSSL On
到这个
<Location /sessions>
SSLRequireSSL
SSLVerifyClient require
</Location>
正如你所看到的那样,我做了相当多的改变。
答案 7 :(得分:1)
我遇到了这个问题,因为我在 httpd.conf 和 httpd-ssl.conf 中都定义了<VirtualHost>
。
在httpd.conf中,它被定义为
<VirtualHost localhost>
在httpd-ssl.conf中,它被定义为
<VirtualHost _default_:443>
以下更改解决了此问题,在httpd.conf中添加:80
<VirtualHost localhost:80>
答案 8 :(得分:1)
这就是在Ubuntu上修复它的原因。
a2enmod ssl
/usr/local/ssl
并使其具有全球可读性:chmod -R +r /usr/local/ssl
<VirtualHost *:80>
更改为<VirtualHost *:*>
。SSLEngine On
。如果在证书上设置密码,Apache应该在重新启动时提示您。
答案 9 :(得分:1)
与其他答案类似,当没有配置使用SSL的站点时,可能会遇到此错误。
当我从Debian Wheezy升级到Debian Jessie时,我遇到了错误。新版本的Apache需要以.conf
结尾的站点配置文件。由于我的配置文件没有,因此被忽略,并且没有其他配置为提供SSL连接。
答案 10 :(得分:0)
我遇到了这个问题,也是由于配置错误。我正在使用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。
答案 11 :(得分:0)
当我第一次按照说明设置默认的apache2 ssl配置时,通过在/etc/apache2/sites-available/default-ssl
中添加/etc/apache2/sites-enabled
的符号链接,我遇到了此错误。然后我尝试在另一个配置文件中的端口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>
答案 12 :(得分:0)
我通过评论解决了这个问题:
答案 13 :(得分:-7)
事实证明,SSL证书安装不正确。正确地重新安装它解决了问题