如何在AWS EC2实例上配置SSL证书与密钥(Rasa部署场景)
在AWS EC2上给Rasa服务器配置SSL加密的完整指南
我来帮你搞定这个问题——结合AWS的最佳实践,给你两种可行方案,优先推荐第一种,因为不用在EC2上手动维护证书,更省心还自带高可用。
方案一:用Application Load Balancer(ALB)终止SSL(强烈推荐)
这是AWS环境下最常用的SSL配置方式,ALB会帮你处理所有加密解密的工作,还能自动续期ACM证书,同时提供负载均衡能力,后续扩容也方便。
步骤1:创建ALB并关联你的ACM证书
- 登录AWS控制台,进入EC2服务,左侧导航栏找「负载均衡器」,点击「创建负载均衡器」
- 选「Application Load Balancer」,点「创建」
- 基本配置:给ALB起个好记的名字(比如
rasa-ssl-alb),方案选「互联网面向」,IP类型按需选IPv4或双栈 - 网络映射:选和你的EC2实例同一个VPC,至少勾两个可用区(保证高可用)
- 安全组:新建或选一个允许HTTPS(443端口)入站的安全组,要是想把HTTP自动转HTTPS,也把80端口放开
- 路由配置:
- 新建一个目标组,类型选「实例」,名字比如
rasa-targets - 协议选HTTP,端口填Rasa默认的5005(或者你自定义的端口)
- 注册目标:选上你的EC2实例,点「包含为已注册」,然后创建目标组
- 新建一个目标组,类型选「实例」,名字比如
- SSL证书:在「安全设置」里选「从ACM选择证书」,挑你之前生成的那个域名证书就行
- 点「创建」,等个几分钟让ALB部署完成
步骤2:把Route53域名指向ALB
- 进Route53控制台,找到你的域名托管区
- 新建一条A记录,开启「别名」选项,别名目标直接选你刚创建的ALB
- 保存后等个几分钟,DNS就生效了
步骤3:让EC2安全组允许ALB访问
- 回到EC2控制台,找到你Rasa实例的安全组
- 加一条入站规则:允许HTTP(端口5005)访问,来源选ALB的安全组(或者直接填ALB的IP范围)
- 这样ALB就能把加密后的请求转发到你的Rasa服务器了
可选:把HTTP请求强制转HTTPS
- 回到ALB的监听配置,新增一个HTTP(80端口)的监听
- 规则设置为「重定向到HTTPS」,端口443,状态码选301永久重定向,这样用户输入HTTP地址会自动跳转到HTTPS
方案二:直接在EC2实例上配置SSL(适合不需要ALB的场景)
如果你确实不想用ALB,那得注意:ACM自动生成的证书,私钥是AWS保管的,你没法下载。所以得自己生成私钥和CSR,再导入ACM拿证书。
步骤1:在EC2上生成私钥和证书签名请求(CSR)
ssh登录你的EC2实例,执行这两条命令:
# 生成2048位的私钥,保存为rasa.key openssl genrsa -out rasa.key 2048 # 生成CSR,按提示填信息,重点是「Common Name」必须填你的域名 openssl req -new -key rasa.key -out rasa.csr
步骤2:在ACM中导入证书
- 进ACM控制台,点「导入证书」
- 把刚才生成的CSR内容粘贴到「证书签名请求」字段,提交后等ACM签发证书
- 签发完成后,下载证书链(包含你的域名证书和中间证书),保存为
rasa.crt
步骤3:把证书和私钥放到EC2的安全目录
- 在EC2上建个目录存证书,比如
/etc/rasa/ssl/:
sudo mkdir -p /etc/rasa/ssl/
- 把
rasa.key和rasa.crt传到这个目录,然后设置权限(私钥只能让root读,避免泄露):
sudo chmod 600 /etc/rasa/ssl/rasa.key sudo chown root:root /etc/rasa/ssl/rasa.key
步骤4:配置Rasa使用SSL启动
你可以直接在启动命令里指定证书和密钥:
# 用root权限启动Rasa监听443端口(普通用户没法用1024以下的端口) sudo rasa run --ssl-certificate /etc/rasa/ssl/rasa.crt --ssl-keyfile /etc/rasa/ssl/rasa.key --port 443 --host 0.0.0.0
或者在Rasa的config.yml里加配置:
ssl: certificate: /etc/rasa/ssl/rasa.crt keyfile: /etc/rasa/ssl/rasa.key
要是不想用root权限,也可以让Rasa监听5005端口,然后用iptables把443转发到5005:
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 5005
步骤5:更新EC2安全组
修改EC2的安全组,允许HTTPS(443端口)入站访问,要是不需要HTTP了,就把5005端口的入站规则关掉或者只允许内部访问
最后测试一下
不管用哪种方案,都可以用浏览器访问https://你的域名,看地址栏有没有锁图标;或者用curl命令测试:
curl -v https://你的域名
要是看到SSL连接成功的日志,就说明配置好了。
内容的提问来源于stack exchange,提问作者Shawn Zhang
相关产品推荐
相关产品推荐

