Apache SSL配置错误(SSL连接错误)

时间:2010-07-20 03:01:27

标签: apache ssl https openssl

我正在尝试在我的服务器上配置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仍然相同。我的SSLCertificateFileSSLCertificateKeyFile指向正确的目录和文件。

我也没有启用SSLVerifyClient。

如果有人有任何建议,我们将不胜感激。

14 个答案:

答案 0 :(得分:35)

我和@ User39604有同样的问题,不得不遵循各种建议。由于他不记得他所遵循的确切路径,让我列出我的路径:

  1. 使用<?php echo phpinfo();?>

  2. 检查您是否拥有SSL YES
  3. 如有必要

    A。在apache sudo a2enmod ssl

    上启用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>
    
  4. 通过

    获取密钥和证书

    A。向认证机构(Comodo,GoDaddy,Verisign)支付一对

    B。生成您自己的* - 请参阅下文(仅限测试目的)

  5. 更改您的配置(在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>
    
  6. 虽然许多其他虚拟主机配置可以在/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:

    1. 转到apache文件夹(在ubuntu12 ssl中)
    2. 创建一个类似/etc/apache2/ssl的文件夹(或任何适合您的文件夹,名称不是系统要求)
    3. 转到所选目录sudo openssl req -new -x509 -nodes -out MYSITE.COM.crt -keyout MYSITE.COM.key
    4. 运行MYSITE.COM.crt
    5. MYSITE.COM.key标记
    6. 中使用<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上修复它的原因。

  1. 启用模块:a2enmod ssl
  2. 将所有与证书相关的文件移至文件夹/usr/local/ssl并使其具有全球可读性:chmod -R +r /usr/local/ssl
  3. 在我的虚拟主机中将<VirtualHost *:80>更改为<VirtualHost *:*>
  4. 在我的虚拟主机中的所有其他SSL指令之前添加了SSLEngine On
  5. 如果在证书上设置密码,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)

我通过评论解决了这个问题:

AcceptFilter https none

httpd.conf中的

根据: http://www.apachelounge.com/viewtopic.php?t=4461

答案 13 :(得分:-7)

事实证明,SSL证书安装不正确。正确地重新安装它解决了问题