Apache SSL 似乎并未加载 mod-ssl,尽管它声称已加载

Apache SSL 似乎并未加载 mod-ssl,尽管它声称已加载

OpenSSL + Apache 让我抓狂。我查阅了很多资源,咨询了同事,意识到此时最好的选择是咨询其他资源(也就是你们)。

我使用 Python 和 CherryPy 编写了软件,该软件在端口 1240 上监听 HTTP 请求。但是,由于我需要屏蔽网络检查,所以我想用 SSL 包装它。我们决定使用 ProxyPass 和 Apache 进行 SSL 而不是 Python,因为它更快、更可靠且更全球知名。

一切都已完成,安装了 Apache。为服务运行建立一个单独的用户等,这样当服务被 (cr/h)ack 时,它们将被关押在一个无用的用户帐户中。就这些。

现在我写了以下启用的站点:

    ProxyRequests Off
    <VirtualHost *:443>
            ServerName SERVER_NAME

            ProxyPass / http://127.0.0.1:1240/
            ProxyPassReverse / http://127.0.0.1:1240/

            <Directory proxy:*>
                    Order Deny,Allow
                    Allow from all
            </Directory>

            SSLEngine on
            SSLCACertificateFile /etc/ssl/certs/MY_CERT.crt
            SSLCertificateFile    /etc/ssl/certs/MY_CERT.crt
            SSLCertificateKeyFile /etc/ssl/certs/MY_CERT.pem
    </VirtualHost>

看起来很棒,不是吗(请注意,由于数据泄漏,我已将服务器名称和证书的名称更改为大写字母等。无论如何,即使它看起来很棒,但当我连接 Firefox 时却出现以下错误。

(Error code: ssl_error_rx_record_too_long) 我心想:“等等,这可不好。”

于是我开始谷歌搜索,发现 mod-ssl 可能未加载。因此我进行了如下检查:

    root@SYSTEM:/etc/apache2# apachectl -t -D DUMP_MODULES
    [Thu Jan 24 09:36:44 2013] [warn] NameVirtualHost *:8080 has no VirtualHosts
    Loaded Modules:
     core_module (static)
     log_config_module (static)
     logio_module (static)
     mpm_prefork_module (static)
     http_module (static)
     so_module (static)
     alias_module (shared)
     auth_basic_module (shared)
     authn_file_module (shared)
     authz_default_module (shared)
     authz_groupfile_module (shared)
     authz_host_module (shared)
     authz_user_module (shared)
     autoindex_module (shared)
     cgi_module (shared)
     deflate_module (shared)
     dir_module (shared)
     env_module (shared)
     mime_module (shared)
     negotiation_module (shared)
     php5_module (shared)
     proxy_module (shared)
     proxy_ajp_module (shared)
     proxy_balancer_module (shared)
     proxy_connect_module (shared)
     proxy_ftp_module (shared)
     proxy_http_module (shared)
     proxy_scgi_module (shared)
     reqtimeout_module (shared)
     setenvif_module (shared)
     ssl_module (shared)
     status_module (shared)
    Syntax OK

看起来不错,继续。检查日志后,我发现了与此处完全相同的错误:http://ubuntuforums.org/showthread.php?t=806884

试过了,没用。我重新生成了密钥,但问题依然存在(http://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php)我使用 openssl 检查了密钥的有效性:

    root@SYSTEM:/etc/ssl/certs# openssl x509 -in MY_CERT.crt -noout -text
    Certificate:
        Data:
            Version: 1 (0x0)
            Serial Number: <---8<---snip---8<--->(0x<---8<---snip---8<--->)
        Signature Algorithm: sha1WithRSAEncryption
            Issuer: <---8<---snip---8<--->
            Validity
                Not Before: Jan 24 08:05:44 2013 GMT
                Not After : Mar 25 08:05:44 2013 GMT
            Subject: <---8<---snip---8<--->
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (1024 bit)
                    Modulus:
                         <---8<---snip---8<--->
                    Exponent: <---8<---snip---8<---> (0x<---8<---snip---8<--->)
        Signature Algorithm: sha1WithRSAEncryption
             <---8<---snip---8<--->

看起来有效,现在我开始掉头发了。当我在 443 上进行 telnet 时也是如此。我GET /得到的是 HTML。所以看起来 SSL 根本没有运行。有什么技巧/窍门可以尝试吗?要查看的文件或任何其他东西?

此外,我意识到自签名等并不是最安全的方法。但这不是现在的重点,因为目前它真的只是一个概念验证。所以任何建议都非常有用,我会奖励你一个 ServerFault +1 帖子 ;)

编辑:还有一个小注释,当我使用它时links https://localhost它有效。

STOLAS@SYSTEM:~$ sudo apachectl -S
[sudo] password for STOLAS:
[Thu Jan 24 10:47:42 2013] [warn] NameVirtualHost *:8080 has no VirtualHosts
VirtualHost configuration:
wildcard NameVirtualHosts and default servers:
     *:443 SERVER.COM (/etc/apache2/sites-enabled/000-default:2)
Syntax OK 

答案1

当 @al4 发布最后一条回复时,我开始思考。由于我不是唯一一个研究这个问题的人,所以我决定执行 cat $HISTFILE ,有人添加了一条 iptables 规则。

所以,谢谢大家。很抱歉浪费了你们的时间。事实证明,我使用 Apache 做的所有事情都是正确的。但有人用 iptables 搞乱了我的一天(这花了我两天时间……)

但是当我这样做时iptables -L ; iptables -t nat -L(将我的 iptables 规则转储到 stdout),我发现有一个从 143 到本地 1240 的 NATTING 规则。其他命令让我意识到 iptables 是用于netstat -lanp检查 Apache 是否正在运行以及tcpdump not tcp 22用于检查连接是否发送到该框。

谢谢您的帮助,我希望迷失的谷歌用户将来会发现这个答案很有用!

相关内容