首页 文章

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

提问于
浏览
32

我正在尝试在我的服务器上配置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 回答

  • 2

    与其他答案类似,当没有配置为使用SSL的站点时,可能会遇到此错误 .

    当我从Debian Wheezy升级到Debian Jessie时,我遇到了错误 . 新版本的Apache需要以 .conf 结尾的站点配置文件 . 由于我的配置文件没有,因此被忽略,并且没有其他配置为提供SSL连接 .

  • 0

    我和@ 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 中 - 默认为空文件)以包含正确的 <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 对解决所有问题都很重要 .

    了解更多信息:

    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.crtMYSITE.COM.key

    名称格式不符合严格的系统要求,必须与文件相同:) - 212-MYSITE.COM.crt ,_959543等名称应该有效 .

  • 19

    我在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>
    

    至:

    <VirtualHost _default_:443>
    
       ServerAdmin admin@domain.com
       ServerName subdomain.domain.com
    
       SSLEngine On
       SSLCertificateFile conf/ssl/ssl.crt
       SSLCertificateKeyFile conf/ssl/ssl.key
    </VirtualHost>
    

    现在它工作得很好:)

  • 1

    我想为这种情况建议的一个常见原因:

    有时客户正在运行Skype,它使用端口443而没有意识到它 . 当他们去启动Tomcat或Apache时,它似乎启动但无法与端口443绑定 . 这是用户在浏览器中收到的确切消息 . 解决方法是停止端口443上运行的内容并重新启动Web服务器,以便它可以与端口443绑定 .

    客户可以在启动网络服务器后重新启动Skype,Skype将检测到正在使用的端口443并选择要使用的其他端口 .

  • 0
    #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
    
  • 6

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

    我正在使用Cloudflare作为我网站的代理 . 为了能够通过SSH登录,我在我的 /etc/hosts 文件中添加了一个条目,所以我没有't need to remember my server'的IP地址 .

    xxx.xx.xx.xxx  example.com
    

    所以在我的浏览器中,当我去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地址进行检查 .

    ping https://www.example.com/
    

    另一个非常有用的SSL资源是Mozilla SSL Configuration Generator . 它可以为您生成SSL配置 .

  • 6

    当我开始更改Apache配置时,我不知道自己在做什么 . 在我遇到你遇到的同样问题之前,我认为它正在工作,特别是Chrome有这个错误 .

    我是什么确实注释掉了用于配置SSL验证的所有特定于站点的指令,确认Chrome让我进入,在重新启用之前查看了指令之前的文档,并重新启动了Apache . 通过仔细检查这些,您应该能够找出导致问题的是哪一个 .

    在我的情况下,我从这里开始:

    SSLVerifyClient optional
    SSLVerifyDepth 1
    SSLOptions +StdEnvVars +StrictRequire
    SSLRequireSSL On
    

    对此

    <Location /sessions>
      SSLRequireSSL
      SSLVerifyClient require
    </Location>
    

    如你所见,我有相当多的变化来实现目标 .

  • 0

    我遇到了这个问题,因为我在httpd.conf和httpd-ssl.conf中都定义了 <VirtualHost> .

    在httpd.conf中,它被定义为

    <VirtualHost localhost>
    

    在httpd-ssl.conf中,它被定义为

    <VirtualHost _default_:443>
    

    以下更改解决了这个问题,在httpd.conf中添加:80

    <VirtualHost localhost:80>
    
  • 34

    我遇到了这个问题,也是由于配置错误 . 我使用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 .

  • 1

    当我第一次按照说明设置默认的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>
    
  • 1

    我通过评论解决了它:

    AcceptFilter https none

    在httpd.conf中

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

  • -6

    这就是在Ubuntu上为我修复它的原因 .

    • 启用模块: a2enmod ssl

    • 将所有与证书相关的文件移动到文件夹 /usr/local/ssl 并使其成为世界可读的: chmod -R +r /usr/local/ssl

    • 在我的虚拟主机中将 <VirtualHost *:80> 更改为 <VirtualHost *:*> .

    • 在我的虚拟主机中的所有其他SSL指令之前添加了 SSLEngine On .

    如果在证书上设置密码短语,Apache应该在重新启动时提示您 .

  • 0

    事实证明,SSL证书安装不正确 . 正确地重新安装它修复了问题

相关问题