HTTPS仅适用于localhost

时间:2016-02-17 19:49:59

标签: ssl amazon-ec2 https apache2 connection-refused

我正在尝试在我的一个EC2实例上设置https。我已经多次这样做了,但出于某种原因,对于这个例子,它拒绝工作。

问题

当我通过本地IP连接到域时,https工作正常。 当我通过公共IP连接到域时, https不起作用,浏览器repsonse “ERR CONNECTION REFUSED”

当我有时重新加载时,您可以看到它接受了https,然后立即阻止它,几乎就像有防火墙规则一样,但是没有。

普通的http 100%本地和公共。

我没有通过亚马逊上的安全组阻止此阶段的任何端口。 我没有关于ip表的规则,我已经禁用了ufw。

我为apache启用了SSL,测试键在本地运行良好。

这是sudo netstat -tlnp

的输出
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      937/sshd
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1060/mysqld
tcp6       0      0 :::22                   :::*                    LISTEN      937/sshd
tcp6       0      0 :::443                  :::*                    LISTEN      2798/apache2
tcp6       0      0 :::80                   :::*                    LISTEN      2798/apache2

这是我的/etc/apache2/ports.conf文件:

Listen 80
Listen 443

我已启用default-ssl网站,没有任何错误。

这是我的/ etc / hosts文件:

127.0.0.1 localhost


# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

我也尝试使用0.0.0.0而不是127.0.0.0而且它什么也没做。

这是我网站的apache conf文件(出于安全考虑,我用“mysite.com”替换了我的真实网站名称):

<VirtualHost *:80>
     DocumentRoot /var/www/html/mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
        <Directory /var/www/html/mysite.com>
                AllowOverride All
                RewriteEngine On
                Require all granted
                Options -Indexes +FollowSymLinks
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:443>
     DocumentRoot /var/www/html/mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
     SSLEngine on
     SSLCertificateFile /usr/local/ssl/public.crt
     SSLCertificateKeyFile /usr/local/ssl/private/private.key
     SSLCACertificateFile /usr/local/ssl/intermediate.crt
</VirtualHost>

这个完全相同的conf文件正在处理另一个实例,它告诉我问题不在于此文件。

我错过了什么?请帮忙。 提前致谢

修改

以下是我为apache加载的模块:

sudo apache2ctl -M
Loaded Modules:
 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 mime_module (shared)
 mpm_prefork_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 wsgi_module (shared)

编辑2

一些有趣的apache error.log条目,而不是在我重新启动服务的时候,几分钟前就是随机的(这可能导致问题吗?):

[Wed Feb 17 21:04:48.478106 2016] [ssl:warn] [pid 3629] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Feb 17 21:04:48.507277 2016] [ssl:warn] [pid 3630] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Wed Feb 17 21:04:48.507324 2016] [:warn] [pid 3630] mod_wsgi: Compiled for Python/3.4.0.
[Wed Feb 17 21:04:48.507329 2016] [:warn] [pid 3630] mod_wsgi: Runtime using Python/3.4.3.
[Wed Feb 17 21:04:48.509502 2016] [mpm_prefork:notice] [pid 3630] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.14 OpenSSL/1.0.1f mod_wsgi/3.4 Python/3.4.3 configured -- resuming normal operations
[Wed Feb 17 21:04:48.509517 2016] [core:notice] [pid 3630] AH00094: Command line: '/usr/sbin/apache2'

我禁用wsgi模块只是为了确保这不是我的问题,并重新启动了apache服务,仍然没有运气,同样的问题。

编辑3

我正在倾倒我的一些phpinfo()以显示更多信息。 SSL设置为YES。我不知道最近发生了什么:(

enter image description here

编辑4

我认为我可能需要在负载均衡器上添加SSL certifiacte才能实现这一点。我现在正在尝试,会让所有人都知道......

2 个答案:

答案 0 :(得分:1)

实现位于AWS上VPC内负载均衡器后面的私有子网中的EC2实例的HTTPS流量的唯一方法是在负载均衡器(ELB)本身上具有HTTPS侦听器以及特定服务器的证书负载均衡器上的/ domain。就我而言,即使您在负载均衡器(入站,出站)和EC2实例(入站,出站)的安全规则中打开了HTTPS 443,ELB仍会阻止该端口上的所有HTTPS流量到EC2实例。 ELB没有具有有效证书的监听器。据我所知,文档中没有明确说明的地方。希望这会有所帮助。

第1步

使用AWS cli将证书从EC2实例提交到IAM。

我在我的服务器上添加了证书文件,并且必须像上面那样将它们上传到IAM(是的,文件://部分是必要的,即使是在Linux上):

aws iam upload-server-certificate --server-certificate-name my-server-cert 
--certificate-body file://my-certificate.pem --private-key file://my-private-key.pem 
--certificate-chain file://my-certificate-chain.pem

如下所述:http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html

第2步

然后你需要在附有EC2实例的ELB上设置一个监听器。然后监听器用于HTTPS和端口443.监听器将要求提供证书,并且它将具有您之前已经列出的aws cli中添加的证书。如果未列出,请退出AWS控制台并重新登录。之后,通过HTTPS的流量将开始流向您的EC2实例。

我不确定是否需要这样做,因为我在负载均衡器的安全组上打开了443端口,文档中没有任何地方明确说明如果您使用负载均衡器,则这是实现 HTTPS 连接的方式。它只是解释了这是你想要一个HTTPS负载均衡器的方法,这可能意味着两个不同的事情,但是,我很高兴它能够整理出来。

答案 1 :(得分:0)

您是否还可以附加日志以显示任何Apache错误输出?

重新排序虚拟主机并先放入443。

你可能受此影响:https://bugs.launchpad.net/ubuntu/+source/apache2/+bug/795315