【问题标题】:HTTPS only works on localhostHTTPS 仅适用于本地主机
【发布时间】:2023-04-05 09:07:01
【问题描述】:

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

问题

当我通过本地 ip 连接到域时,https 工作正常。 当我通过公共 ip 连接到域时,https 不起作用 并且浏览器响应是 "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 设置为是。我不知道发生了什么:(

编辑 4

我认为我可能需要在负载平衡器上添加 SSL 证书才能使任何这些工作正常。我现在正在尝试,会让大家知道...

【问题讨论】:

  • 看起来你的 apache 只监听 IPv6...?
  • @JoachimIsaksson 我看到了,我不是专家,但它在本地和公开的端口 80 (http) 上工作。端口 443 会有所不同吗?此外,我如何让它听 IPv4 ?
  • 好吧,看起来它也只监听 IPv6 上的 80 端口,所以如果该端口工作,我猜它只是以一种奇怪的方式显示。
  • @JoachimIsaksson 我试图在我的 ports.conf 文件中指定公共 ip。例如。听 public_ip:443 。但是,在重新启动 apache 时,出现错误。无法绑定到地址
  • 我要回家了,15分钟后回复。

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


【解决方案1】:

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

第一步

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

我在我的服务器上添加了证书文件,并且不得不像这样将它们上传到 IAM(是的,file:// 部分是必需的,即使在 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 负载平衡器时,这是要走的路,这可能意味着两种不同的东西,但是,我很高兴它已经解决了。

【讨论】:

    【解决方案2】:

    您还可以附加一个日志来显示任何 Apache 错误输出吗?

    重新排序您的虚拟主机并将 443 放在首位。

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

    【讨论】:

    • 我重新排列了 443 并将其放在 virualhost 和 ports.conf 中(我有 Listen 443)。然后重新启动apache服务,仍然有同样的问题。此外,我在 apache 日志文件中没有看到任何错误...我将再次扫描它们...
    • 我在 error.log 中添加了一些有趣的条目,请参阅上面的编辑 2。
    • 你有多个 ssl 虚拟主机吗?
    • 不,只有一个。但即使没有虚拟主机,我也可以使用本地 IP 通过 https 访问所有站点。显然没有证书它会给你一个警告等,但它可以工作。但是,从外面看,我只是被拒绝连接。
    • 另外,我刚刚从 2015 年 3 月 2.4.7 日 -> 2016 年 1 月 14 日 2.4.7 更新了我的 apache 版本。同样的错误...
    猜你喜欢
    • 2018-11-16
    • 2017-02-25
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多