在 EC2 上的 apache 实例上启用 SSL

Posted

技术标签:

【中文标题】在 EC2 上的 apache 实例上启用 SSL【英文标题】:Enabling SSL on apache instance on EC2 【发布时间】:2011-10-20 08:43:22 【问题描述】:

我有一个 EC2 实例,它使用 Amazon 的自定义 linux 安装和内置 apache。此安装还安装了 openssl。话虽如此,在 httpd.conf 中似乎没有加载 mod_ssl.so。

所以,我想知道让 apache 启用 ssl 的最佳方法,这样我就可以设置我的 SSL 虚拟主机(请注意,我已经设置了证书/签名)。理想情况下,我不想重建/重新安装 apache。

【问题讨论】:

【参考方案1】:

试试这个命令:

 yum install mod_ssl 

【讨论】:

干杯。对于 Apache 2.4 用户:我必须使用 yum install mod24_ssl 是的,yum install mod24_ssl 在我的亚马逊 ec2 服务器上运行良好。 有人能解释一下为什么每个人总是在没有 sudo 的情况下发布 yum 吗?如果没有 sudo,它永远无法工作,那你为什么不写呢? @Anthony 你只需先运行sudo su 命令切换到root 用户,然后你可以运行yum 而没有sudo 这不是我问题的答案。这主要是修辞,就解释而言,您所说的不是有效的解决方法。它实际上是答案,但不是我建议的方式。新用户不会理解这样做,而 linux 基本上没有 sudo 就无法工作,所以应该一直写。【参考方案2】:

在 EC2 上的 apache 服务器上启用 SSL 需要做的总结:

    获取 SSL 证书(您已经这样做了) 按照 Jose Vega 的说法安装 mod_ssl 将以下行添加到您的 httpd.conf 3。
NameVirtualHost *:443

<VirtualHost *:443>
    ServerName www.example.com
#    other configurations
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/mydomain.key
</VirtualHost>

最后,不要忘记在您的 EC2 实例上打开端口 443

【讨论】:

我浪费了几个小时试图找出为什么我无法使用 SSL 访问我的网站,结果却发现我忘记在我的安全组中打开端口 443!如果不是因为你的提醒,我本可以再花几个小时来调试它。 太棒了!值得一提的是 EC2 服务器上 .crt 和 .key 文件的默认目录 /etc/pki/tls/private/【参考方案3】:

我设法在我的 ec2 实例上启用了 SSL,并从startssl.com 安装了一个免费的 ssl 证书。我犯了一些错误,这是基本方法:

    点击控制面板链接注册startssl.com 完成注册过程。您需要验证您的电子邮件地址。 在验证向导 -> 域名验证下验证您的域 通过证书向导获取证书 选择:Web Server SSL/TLS Certificate 输入将用于加密私钥的密码。稍后您将需要它。 我选择了 4096 的 keysize 将加密后的私钥保存为ssl.encrypted.key someplace ??我忘记了接下来发生的事情 将证书文件另存为 ssl.crt。对我来说,我不得不等待 30 分钟,然后它出现在 Tool Box -> Retrive Certificate 下 使用openssl解密加密的ssl.encrypted.key文件 sudo openssl rsa -in ssl.encrypted.key -out ssl.unencrpted.key startssl.com 在他们的网站上也有一个解密选项,但它对我不起作用 putty/ssh 到你的 ec2 机器上 安装 mod_ssl sudo yum install mod_ssl 替换默认证书和密钥 sudo vi /etc/pki/tls/certs/localhost.crt 粘贴 ssl.crt 的内容 确保正确粘贴!我总是丢失前 6 个字符 如果需要,使用:%d 删除现有证书 [ESC] wq sudo vi /etc/pki/tls/private/localhost.key 粘贴 ssl.unencrypted.key 的内容 再次确保正确粘贴! [ESC] wq 检查配置 apachectl configtest 重启 sudo service httpd restart 我在重启时遇到了问题,我认为修复它的是sudo kill -9 httpd

【讨论】:

我已经完成了所有这些步骤 - sudo vi /etc/pki/tls/certs/localhost.crt 给我带来了问题。用我的 ssl.crt 文件的内容替换它的内容会导致问题。 Httpd 不会因此而启动 - apachectl configtestSyntax OK 但 httpd 仍然不会启动。恢复文件修复了 httpd ,所以这绝对是源。有什么想法吗?【参考方案4】:

您应该安装 SSL 模块,因为大多数实例默认不附带 mod SSL,但这取决于您在 AWS 实例中使用的 Apache 版本。要检查您使用的是哪一个,您可以在命令行中运行以下命令:

httpd -v

对于 Apache 2.2

yum install mod_ssl

对于 Apache 2.4

yum install mod24_ssl

【讨论】:

【参考方案5】:

如果您使用的是 Amazon Lightsail,请务必从 Lightsail 控制面板进入网络并在您的防火墙中添加 HTTPS/443:

【讨论】:

【参考方案6】:

以下是对我有用的方法,通过 shell,带有一个带有 CA 捆绑包的通配符证书(在 Lightsail 服务器上,启用了 HTTPS/443)。里程可能会有所不同。安装后在https://www.digicert.com/help/ 上进行测试。为简洁起见,我在这里(显然)缩短了证书/密钥。

值得注意的是,我不需要为域设置 VirtualHost。

# Overwrite these files on Amazon Linux + mod_ssl (or mod24_ssl)
# /etc/pki/tls/certs/ca-bundle.crt
# /etc/pki/tls/certs/localhost.crt
# /etc/pki/tls/private/localhost.key

## BEGIN

# INSTALL AS ROOT
sudo -su root

sudo cat > /etc/pki/tls/certs/localhost.crt <<EOF
-----BEGIN CERTIFICATE-----
MIIF7DCCBNSgAwIBAgIMNY9yk7s651tb2YasMA0GCSqGSIb3DQEBCwUAMEwxCzAJ
KoZIhvcNAQELBQADggEBACu8MsClqLbO1NqjXw+igERhLRkISgnkIjB1p69zh3V0
/3b68mkC+8pL3HNLgL0qIM9sPKKOl/Iyky2EfwfQDoZEWNB0qWKIOovH5Oj9z5DE
-----END CERTIFICATE-----
EOF

sudo cat > /etc/pki/tls/private/localhost.key <<EOF
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCL6UsW9yC0Faev
1zeEJcF6E7P6XYqT25rWMj5xzUM8gi/4nLpGr+tOBlFJYSbLlEHJKG6QLO9Ku896
MwTtWyOrTlPtpJEi9LUrLmOUXtD1WN2Ekql/ZLaO7pxUtVTRF4MyYspGgU1ZjkxY
vQLnZs85bnG2dLz7Q4xxlj4=
-----END PRIVATE KEY-----
EOF

sudo cat > /etc/pki/tls/certs/ca-bundle.crt <<EOF
-----BEGIN CERTIFICATE-----
MIIESzCCAzOgAwIBAgiosMqBefg+ikLz9c3isT8wDQYJKoZIhvcNAQELBQAwTDEg
bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTYxMDE0MDAwMDAwWhcNMjQw
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-----END CERTIFICATE-----
EOF

# RESTART
sudo service httpd restart

#DONE

【讨论】:

以上是关于在 EC2 上的 apache 实例上启用 SSL的主要内容,如果未能解决你的问题,请参考以下文章

AWS - 负载均衡器上的 SSL/HTTPS

从 AWS EC2 实例上的 github 企业克隆时出现 SSL 错误

没有负载均衡器的 EC2 实例上的 AWS SSL - NodeJS

如何将 godaddy ssl 证书添加到托管在 aws ec2 上的站点

在EC2实例上设置SSL(FQDN)

HTTPS 协议不适用于 ec2 实例上的 django 和 nginx