我一直在撞墙,试图弄清楚如何在亚马逊 VPC 实例上设置多个 SSL 证书(我使用的是亚马逊的标准 linux AMI(
这是我所做的:
- 我设置了一个 VPC 实例
- 添加了辅助专用 IP 地址
- 添加了 2 个弹性 IP 地址并将其"链接"到私有 IP 地址
- 转到我的域注册商并将两个测试域指向弹性 IP 地址
- 等待新的 IP 地址传播
- 我已将 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>
,也没有用。
结果基本上是这样的:
- domain1.com(这是默认的SSL证书(工作正常(解析精细,绿色条(
- domain2.com:甚至不解决任何事情,即使当我执行
ping www.domain2.com
时,我得到了正确的弹性IP
我的问题是:知道如何 domain2.com 解析和使用正确的SSL证书吗?
编辑/附加信息:
我也试过这个:
- 按照建议暂时停止防火墙,即。
sudo service iptables stop
- 在 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(:
我注意到两件事:
- 如果我使用 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
- 此命令
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
- 我
- 按照这个指南,我可以看到
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工作。
这里的目的是验证每个步骤并准确确定出错的地方。然后,这将使您能够最好地将精力用于解决根本原因。