在亚马逊 VPC 上设置多个 SSL 证书



我一直在撞墙,试图弄清楚如何在亚马逊 VPC 实例上设置多个 SSL 证书(我使用的是亚马逊的标准 linux AMI(

这是我所做的:

  1. 我设置了一个 VPC 实例
  2. 添加了辅助专用 IP 地址
  3. 添加了 2 个弹性 IP 地址并将其"链接"到私有 IP 地址
  4. 转到我的域注册商并将两个测试域指向弹性 IP 地址
  5. 等待新的 IP 地址传播
  6. 我已将 SSL 证书上传到 VPC 实例

然后我尝试编辑ssl.conf,请参阅第74至93行和httpd.conf,请参阅第1046至1086行:

SSL.conf

<VirtualHost domain1.com:443>
    ServerName www.domain1.com:443
    DocumentRoot "/var/www/html"
    SSLENGINE on
    SSLCertificateFile /etc/ssl/domain1_com.crt
    SSLCertificateKeyFile /etc/ssl/domain1_com.key
    SSLCertificateChainFile /etc/ssl/domain1_com.ca-bundle
</VirtualHost>
<VirtualHost _default_:443>
    ...Default SSL certificate (domain1.com) here...
</VirtualHost>

httpd.conf

<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /var/www/html
    ServerAdmin webmaster@domain1.com
</VirtualHost>
<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /var/www/html
    ServerAdmin webmaster@domain2.com
</VirtualHost>

我也尝试了<VirtualHost *:443><VirtualHost IP.ADDRESS:443>,也没有用。

结果基本上是这样的:

  1. domain1.com(这是默认的SSL证书(工作正常(解析精细,绿色条(
  2. domain2.com:甚至不解决任何事情,即使当我执行ping www.domain2.com时,我得到了正确的弹性IP

我的问题是:知道如何 domain2.com 解析和使用正确的SSL证书吗?


编辑/附加信息:

我也试过这个:

  1. 按照建议暂时停止防火墙,即。 sudo service iptables stop
  2. 在 EC2 之外,curl --connect-timeout 10 https://domain2.com给了我这个curl: (28) connect() timed out!

wget https://www.domain2.com/给了我这个:--2013-10-03 15:57:22-- domain2.com Resolving www.domain2.com... 54.229.111.22 Connecting to www.domain2.com|54.229.111.22|:443... failed: Connection timed out. Retrying.


编辑 (2(:

我注意到两件事:

  1. 如果我使用 2 个网络接口(每个 NIC 都有一个专用 IP(,sudo ifconfig不会显示第二个 NIC(即。 eth1 (,无论我使用一个还是两个 NIC,sudo ifconfig总是返回第一个专用 IP (10.0.0.10(,永远不会返回第二个 (10.0.0.183(

不出所料,无法访问的网站domain2.com对应于第二个IP(缺少(:10.0.0.183

  1. 此命令curl --interface 10.0.0.10 ifconfig.me正确重新调整与domain1.com关联的弹性 IP 地址,同时

此命令curl --interface 10.0.0.183 ifconfig.me重新调整:

curl: (45) bind failed with errno 99: Cannot assign requested address
  1. 按照这个指南,我可以看到eth1,但仍然无法访问domain2.com

curl --interface 10.0.0.183 ifconfig.me现在返回以下内容:

curl: (7) Failed connect to ifconfig.me:80; Connection timed out

您需要使用基于 IP 的虚拟主机进行 SSL。您要侦听的 IP 地址将是私有 IP,而不是公共 IP。

端口 80 上的站点可以使用基于名称的虚拟主机。但是您需要确保使用此指令:NameVirtualHost *:80

本教程

为我修复了它

一个小(但很重要(的注意事项:

而不是键入以下命令(步骤 #5(:

echo "1 admin" >> /etc/iproute2/rt_tables

您应该改为这样做:

sudo vi /etc/iproute2/rt_tables

然后在文件末尾添加1 admin

我认为您需要遵循故障排除方法。

首先简化配置并验证基本组件,然后逐步构建完整的解决方案。例如:

  • 将域 2 的弹性 IP 映射到新的 EC2 服务器。
  • 在新服务器上,首先通过 HTTP 提供 domain2.com
  • 一旦它通过HTTP工作,就将其设置为通过HTTPS工作
  • 一旦它通过HTTPS工作,将弹性IP映射回原始服务器,并使用HTTP使其在原始服务器上工作
  • 一旦它通过HTTP工作,采取最后一步,让它在原始服务器上通过HTTPS工作。

这里的目的是验证每个步骤并准确确定出错的地方。然后,这将使您能够最好地将精力用于解决根本原因。

最新更新