在 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 configtest
说 Syntax 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 EC2 实例上的 github 企业克隆时出现 SSL 错误
没有负载均衡器的 EC2 实例上的 AWS SSL - NodeJS