【问题标题】:Enabling SSL on an AWS EC2 instance在 AWS EC2 实例上启用 SSL
【发布时间】:2015-08-24 15:28:25
【问题描述】:

在通过虚拟主机为多个域提供服务的 EC2 实例上,我设置了一个负载均衡器,它将 HTTPS 流量从端口 :443 转发到 :8443 用于其中一个域,部分遵循以下示例:http://elwoodicious.com/2009/12/23/using-elb-to-serve-multiple-domains-over-ssl-on-ec2-for-giggles/

我的工作 httpd.conf 虚拟主机如下所示:

NameVirtualHost *:80
<VirtualHost *:80>
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/domain.om
    ServerName domain.com
    ServerAlias *.domain.com
    ErrorLog logs/domain.com-error_log
    CustomLog logs/domain.com-access_log common
</VirtualHost>

# more VirtualHosts on *:80 here

现在,只要我为同一个 domain.com 添加一个新的虚拟主机,就像这样,

<VirtualHost _default_:8443>
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/domain.om
    ServerName domain.com
    ServerAlias *.domain.com
    SSLEngine On
    RequestHeader set X_FORWARDED_PROTO 'https'
    ErrorLog logs/domain.com-https-error_log
    CustomLog logs/domain.com-https-access_log common
</VirtualHost>

...Apache 无法重新启动。没有错误通知 - 它只是说[FAILED]。

我唯一的线索:即使我删除了所有 *:80 虚拟主机并且只为端口 *:8443 留下一个,Apache 失败...即使设置 NameVirtualHost *:8443。

这是否意味着它是某种 EC2 指令,只允许端口 80 上的虚拟主机?

感谢您的帮助!

---------------- 编辑:添加错误日志

var/log/httpd/error_log 包含以下内容:

[Tue Jun 09 16:52:37 2015] [notice] caught SIGTERM, shutting down
[Tue Jun 09 16:52:37 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Jun 09 16:53:13 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Jun 09 16:53:47 2015] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Jun 09 16:53:47 2015] [notice] Digest: generating secret for digest authentication ...
[Tue Jun 09 16:53:47 2015] [notice] Digest: done
[Tue Jun 09 16:53:47 2015] [notice] Apache/2.2.29 (Unix) DAV/2 PHP/5.3.29 mod_ssl/2.2.29 OpenSSL/1.0.1k-fips configured -- resuming normal operations

var/log/httpd/ssl_error_log 包含以下内容:

[Tue Jun 09 16:53:47 2015] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Tue Jun 09 16:53:47 2015] [warn] RSA server certificate CommonName (CN) `ip-xx-xx-xx-xx' does NOT match server name!?

最后,var/log/httpd/domain.com-https-error_log 看起来像这样:

[Tue Jun 09 16:53:13 2015] [error] Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] (/etc/httpd/conf/httpd.conf:1026)

httpd.conf 的第 1026 行是&lt;VirtualHost _default_:8043&gt;。我已使用 aws cli 在本地计算机上创建自签名 OpenSSL 证书,并将其附加到负载均衡器以用于 HTTPS 流量。

域的 CNAME 记录也指向 ELB DNS 名称。不知道我错过了什么。

【问题讨论】:

  • 它在命令行上显示 [FAILED],但错误日志中应该有信息。
  • @tedder42 感谢您的提示。我更新了问题以添加日志。我在本地计算机上使用 OpenSSL 创建的自签名证书似乎存在问题……这可能是 Apache 无法启动的原因吗?它“只是”一个[警告],所以我没有考虑这个问题,但打算稍后再调查。
  • @tedder42 我用之前忽略的日志再次更新了问题。

标签: apache ssl amazon-web-services amazon-ec2


【解决方案1】:

太好了。错误消息有所帮助。您缺少两行:

SSLCertificateFile /directory/to/file.crt
SSLCertificateKeyFile /directory/to//file.key

Here's a howto on configuring SSL on Apache.

【讨论】:

  • 不幸的是,我不知道 AWS 将这些文件存储在哪里 - 我使用 AWS CLI (docs.aws.amazon.com/cli/latest/reference/iam/…) 上传了它们。我不确定它是否会像这样工作,因为证书附加到负载均衡器,就像这个特定的 EC2 实例一样。我认为证书文件甚至不会与实例存储在同一个盒子中。
  • 如果您尝试让 ELB 进行 SSL 终止(不仅仅是 SSL 直通),那么只有 ELB 需要证书,您的主机会认为它正在发送纯 http。换句话说,将您的侦听器配置为不带 SSL 的 80->80 和带 SSL 的 443->80。
  • "Passthrough" 给了我我需要的提示...我必须将证书上传到实例而不是将它们附加到 ELB;然后我可以根据您的回答引用它们。谢谢!
猜你喜欢
  • 2011-10-20
  • 1970-01-01
  • 2023-03-13
  • 2020-10-31
  • 2019-08-03
  • 1970-01-01
  • 2019-07-09
  • 2023-04-05
  • 2016-11-28
相关资源
最近更新 更多