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还是一样的。我的SSLCertificateFileSSLCertificateKeyFile 指向正确的目录和文件。

我也没有启用 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 - 默认为空文件)以包含正确的 &lt;VirtualHost&gt; (替换 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&lt;VirtualHost&gt; 标签中使用MYSITE.COM.crtMYSITE.COM.key

名称格式不受严格的系统要求,必须与文件相同:) - 212-MYSITE.COM.crtjune2014-Godaddy-MYSITE.COM.crt 之类的名称应该可以使用。

【讨论】:

对我来说是缺少“”设置 您不一定要为证书付费。 StartSSL 提供免费证书,并得到普遍认可。 我意识到这是一个旧答案,但我今天才找到它,它解决了我的问题。不过需要注意的是:httpd.conf 文件的结束标签应该是 &lt;/VirtualHost&gt; 而不是 &lt;/Directory&gt;。我编辑了原始答案,但我不知道它是否会被接受,因为它已经停用了一年。 我做这一切都没有成功...幸运的是,实际上使用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-defaultsites-available/default-sslsites-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 添加特定的虚拟主机,你不能简单地使用 (这是完全有效的,将匹配所有请求) - 您必须通过指定端口号来区分两个通配符条目。 IE。 *:80 用于 HTTP 和 *:443 用于 HTTPS 这是一个值得关注的重要问题。我在我的回答中列出了其他几个。【参考方案6】:

我遇到了这个问题,解决方案有点傻。

我正在使用 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.confhttpd-ssl.conf 中都定义了&lt;VirtualHost&gt;

在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 在我的虚拟主机中将 &lt;VirtualHost *:80&gt; 更改为 &lt;VirtualHost *:*&gt;。 在我的虚拟主机中的所有其他 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 连接错误)的主要内容,如果未能解决你的问题,请参考以下文章

SSL 错误 Zend Framework BoxAPi

Apache2“localhost”可以工作,但对于 127.0.0.1,我得到“无法访问此站点,拒绝连接”。 SSL 也返回授权错误

Apache Http 客户端 SSL 证书错误

发生ssl错误 无法建立到该服务器的安全连接

为啥ssl总是显示发生SSL错误?

多个 Apache 托管站点的选择性 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误