为什么网关必须启用HTTPS
公司内部系统对外提供服务时,通常会通过API网关统一出口。如果还在用HTTP明文传输,用户的登录凭证、敏感数据就像写在明信片上寄出去,中间任何一个节点都能看到。某次测试环境误将支付接口暴露在HTTP下,不到半天就被爬取了大量订单信息,这就是血的教训。
获取并部署SSL证书
主流做法是使用Let's Encrypt免费证书,或企业购买的商业证书。以Nginx为例,先准备好公钥(.crt)和私钥(.key)文件:
ssl_certificate /etc/nginx/ssl/your_domain.crt;
ssl_certificate_key /etc/nginx/ssl/your_domain.key;
确保私钥权限为600,防止其他用户读取:
chmod 600 /etc/nginx/ssl/your_domain.key
强制跳转HTTPS
很多用户习惯性输入www开头的地址,这时候要自动重定向。在HTTP监听端口添加301跳转:
server {
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
配置安全的TLS协议版本
老旧的TLS 1.0和1.1存在已知漏洞,应禁用。推荐只开启TLS 1.2及以上:
ssl_protocols TLSv1.2 TLSv1.3;
同时选择高强度加密套件,避免弱算法被破解:
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
启用HSTS增强防护
即使做了跳转,首次访问仍可能被劫持。加入HSTS响应头,告诉浏览器以后必须用HTTPS连接:
add_header Strict-Transport-Security "max-age=31536000" always;
加上includeSubDomains可以覆盖子域名,但需确认所有子服务都支持HTTPS后再启用。
网关层的其他安全加固点
除了加密传输,网关还应限制请求频率、过滤恶意UA、拦截常见攻击特征。比如用Nginx配合ngx_http_geoip_module识别异常地区IP,或集成OpenResty做更复杂的逻辑判断。
某电商平台就在API网关加了规则:单个IP每秒超过20次请求直接封禁,上线后爬虫流量下降了八成。
定期更新与监控
证书快到期前一周就得准备续签,Let's Encrypt证书只有90天有效期。可以用cron定时执行 renewal 命令:
0 3 * * 6 /usr/bin/certbot renew --quiet
同时把证书过期告警接入企业微信或钉钉,避免因疏忽导致服务中断。