【问题标题】:Apache SSL Configuration Error (SSL Connection Error)Apache SSL 配置错误(SSL 连接错误)
【发布时间】: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 找人来解决问题。
  • 由于您忘记了确切的步骤,我列出了我必须做的所有事情,包括检查证书和密钥完整性。赞成的问题! :)

标签: apache ssl https openssl


【解决方案1】:

我遇到了与@User39604 相同的问题,并且不得不遵循各种建议。由于他不记得他遵循的确切路径,让我列出我的路径:

  1. 使用<?php echo phpinfo();?>检查您是否有SSL YES

  2. 必要时

    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>
    
  3. 通过

    获取密钥和证书

    A. 向认证机构(Comodo、GoDaddy、Verisign)支付一对

    B. 生成您自己的* - 见下文(仅用于测试目的)

  4. 更改您的配置(在 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:

  1. 转到 apache 文件夹(在 ubuntu12 /etc/apache2/
  2. 创建一个文件夹,如 ssl(或任何适合您的文件夹,名称不是系统要求)
  3. 转到所选目录/etc/apache2/ssl
  4. 运行sudo openssl req -new -x509 -nodes -out MYSITE.COM.crt -keyout MYSITE.COM.key
  5. &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 上为我解决的问题。

              1. 启用模块:a2enmod ssl
              2. 将所有与证书相关的文件移动到文件夹/usr/local/ssl 并使其世界可读:chmod -R +r /usr/local/ssl
              3. 在我的虚拟主机中将 &lt;VirtualHost *:80&gt; 更改为 &lt;VirtualHost *:*&gt;
              4. 在我的虚拟主机中的所有其他 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 您的建议是隐藏的线索之一,尽管我必须在这里执行许多其他步骤。我在一个答案中编译了所有内容。您的回答是我遇到的一个很难找到/识别的问题。赞成! :)
                  猜你喜欢
                  • 1970-01-01
                  • 2012-11-18
                  • 1970-01-01
                  • 2016-05-07
                  • 2014-02-06
                  • 2018-08-16
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-06-30
                  相关资源
                  最近更新 更多