Email:2225994292@qq.com
CNY
AWS EC2部署SSL证书完整指南
更新时间:2025-08-07 作者:部署SSL证书

为保障数据在传输过程中的安全,在AWS EC2上部署SSL证书是关键举措。接下来,我将详细介绍在AWS EC2上部署SSL证书的完整流程。

一、选择SSL证书类型

AWS提供了多种SSL证书选项,主要包括:

1. ACM证书:这是一项由AWS提供的服务,可帮助轻松预置、管理和部署公有和私有安全套接字层 / 传输层安全性 (SSL/TLS) 证书。

(1)公有证书:如果网站面向公众开放,可申请公有证书。在ACM控制台中,可免费申请用于ACM集成服务(如 Elastic Load Balancing、API Gateway 等)的公有证书。但需注意,通常情况下,默认申请的公有证书无法直接导出用于普通EC2实例(不过,近期ACM推出了可导出的公共 SSL/TLS 证书,申请时需特别选择 “启用导出”)。若要使用可导出的公共证书,申请流程如下:

  • 在ACM控制台中选择 “申请证书”。
  • 在 “允许导出” 部分选择 “启用导出”(已创建的公共证书无法更改此设置)。
  • 输入域名等相关信息,选择验证方式(如 DNS验证等)。验证域名以证明拥有或控制该域名,通常域名验证成功后,证书会在数秒内签发。
  • 当证书状态变更为 “已签发” 时,选择 “导出”,输入用于加密私钥的密码短语,后续将需要该密码短语来解密私钥,然后获取PEM编码的证书、证书链和私钥。

(2)私有证书:私有证书用于识别和保护私有网络(例如服务器、移动和物联网设备,以及应用程序)上的关联资源之间的通信。使用ACM私有CA,可按月支付创建的服务和证书的费用,创建的私有证书越多,每个证书支付的费用越少。

2. 第三方证书:例如Let's Encrypt提供的免费SSL证书,适用于有全站SSL需求的情况。其优点是免费且支持自动续签,配合Nginx等Web服务器可自动配置。缺点是证书无法自动续签(部分配置可实现自动续签),需手动操作以保持证书不过期。

二、准备工作

1. 确保EC2实例安全组设置正确:要使SSL证书生效,需确保实例的安全组允许HTTPS(端口 443)流量进入。在AWS控制台中,找到对应的EC2实例,进入其安全组设置页面,添加一条入站规则,允许来自互联网(0.0.0.0/0)或特定来源的TCP流量通过 443 端口。同时,若网站也支持HTTP访问,也需确保端口 80 开放。

2. 确定使用的Web服务器:常见的Web服务器有Apache和Nginx等。不同的Web服务器,SSL证书的配置方式略有不同。本文将分别介绍在这两种服务器上部署SSL证书的方法。

三、在不同Web服务器上部署SSL证书

1. 在Apache服务器上部署SSL证书(以自签名证书为例,其他证书类似)

(1)安装Apache和OpenSSL:如果尚未安装,在EC2实例的终端中运行以下命令安装Apache和OpenSSL(假设使用的是基于Debian或Ubuntu的系统):

1    sudo apt-get install apache2 openssl -y

(2)生成自签名证书:

  • 运行以下命令创建私钥和证书签名请求(CSR):
1    sudo openssl req -nodes -newkey rsa:2048 -keyout /etc/ssl/private/private.key -out /etc/ssl/private/request.csr
  • 接着运行以下命令生成SSL证书,有效期可自行设定(这里设为 365 天):
1    sudo openssl x509 -in /etc/ssl/private/request.csr -out /etc/ssl/private/certificate.crt -req -signkey /etc/ssl/private/private.key -days 365

此时,private.keycertificate.crt文件已准备好用于 ApacheWeb服务器。

(3)配置Apache使用SSL:

  • 打开Apache的默认SSL配置文件:
1    sudo vi /etc/apache2/sites-available/default-ssl.conf
  • 在文件中定义SSL证书的位置,使用以下路径:
1    SSLCertificateFile /etc/ssl/private/certificate.crt
2    SSLCertificateKeyFile /etc/ssl/private/private.key
  • 保存并关闭文件,然后运行以下命令激活虚拟主机文件:
1    sudo a2ensite default-ssl.conf
  • 打开Apache的默认虚拟主机配置文件:
1    sudo vi /etc/apache2/sites-available/000-default.conf
  • 添加重定向,将所有流量转发到网站的SSL版本(假设服务器IP为server-ip):
1    Redirect "/" "https://server-ip"
  • 运行以下命令开启SSL和header模块:
1    sudo a2enmod ssl
2    sudo a2enmod headers
  • 最后运行以下命令重新加载Apache服务,应用修改:
1    sudo systemctl reload apache2

(4)验证SSL服务器:在浏览器中输入https://server-ip,由于是自签名证书,会跳转到一个警告页面,这是正常现象。选择继续访问,应能看到Apache的主页,此时地址栏会显示锁形图标,但可能提示 “不安全”,这是因为证书未被受信任的证书颁发机构签名。

2. 在Nginx服务器上部署SSL证书(以Let's Encrypt证书为例)

(1)安装Nginx:在EC2实例的终端中运行以下命令安装Nginx(假设使用的是基于Debian或Ubuntu的系统):

1    sudo apt-get installNginx-y

(2)为Nginx设置服务器块:根据网站的具体需求,在Nginx配置目录(通常为/etc/nginx/conf.d/)中创建或编辑服务器块配置文件,例如example.com.conf,设置服务器名称、根目录、索引文件等基本信息。

(3)安装Certbot:Certbot是一个用于获取和管理Let's Encrypt证书的工具。由于Amazon Linux 2023系统的软件库中可能没有snapd,这里采用pip安装方式(其他系统可根据官方指示选择合适的安装方式)。

  • 安装系统依赖项:
1    sudo dnf install python3 augeas-libs
  • 设置Python虚拟环境:
1    sudo python3 -m venv /opt/certbot/
2    sudo /opt/certbot/bin/pip install --upgrade pip
  • 安装Certbot:
1    sudo /opt/certbot/bin/pip installCertbotcertbot-nginx
  • 准备Certbot命令:
1    sudo ln -s /opt/certbot/bin/Certbot/usr/bin/certbot

(4)运行Certbot获取证书并配置Nginx:运行以下命令获取证书并让Certbot自动编辑Nginx配置以启用HTTPS访问(假设域名为example.com):

1    sudoCertbot--Nginx-d example.com --email your_email@example.com --agree-tos --redirect

其中,--nginx参数让Certbot自动修改Nginx配置,--redirect参数自动将HTTP跳转到HTTPS。执行成功后,证书保存于/etc/letsencrypt/live/example.com/目录下。

(5)验证配置:完成上述操作后,在浏览器中访问https://example.com,应能正常访问网站,且地址栏显示安全锁标志,表示SSL证书已正确部署。

(6)自动续签证书:为确保证书持续有效,可设置自动续签。运行以下命令添加自动续签任务(以每天凌晨 0 点和 12 点为例):

1    echo "0 0,12 * * * root /opt/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudoCertbotrenew -q" | sudo tee -a /etc/crontab > /dev/null

该命令会在每天的 0 点和 12 点,随机延迟一段时间后执行Certbotrenew -q命令,静默更新证书。

四、其他注意事项

1. 证书安全:无论使用哪种证书,都要妥善保管证书的私钥。对于可导出的ACM证书,导出后应使用安全存储和访问控制措施来保护私钥。对于第三方证书,如Let's Encrypt证书,其私钥也需妥善保管,避免泄露。

2. 证书续订:对于ACM证书,用于集成服务(如 Elastic Load Balancing 和API Gateway)的证书,ACM会自动续订并部署。对于可导出的公共证书,可通过Amazon EventBridge配置自动续订事件,也可按需续订,续订证书将收取新证书签发的费用。对于第三方证书,如Let's Encrypt证书,可通过设置自动续签任务(如上述Nginx配置中的方式)确保证书不过期。

3. 多实例和负载均衡场景:如果有多个EC2实例并使用负载均衡器,如 Elastic Load Balancing,可将SSL证书部署在负载均衡器上,然后将EC2实例注册到负载均衡器的后端。在ACM中申请证书后,按照相应的负载均衡器类型(如应用程序负载均衡器、网络负载均衡器、经典负载均衡器)的配置指南,将证书与负载均衡器关联,并将EC2实例置于负载均衡器之后,由负载均衡器负责SSL终止和流量分发。

通过以上步骤,可在AWS EC2上成功部署SSL证书,为网站或应用程序提供安全的通信保障。在实际操作中,务必根据具体的业务需求、服务器环境和安全要求进行细致的配置和调整。


Dogssl.cn拥有20年网络安全服务经验,提供构涵盖国际CA机构SectigoDigicertGeoTrustGlobalSign,以及国内CA机构CFCA沃通vTrus上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!
相关文档
立即加入,让您的品牌更加安全可靠!
申请SSL证书
0.170884s