互联网环境中,HTTP明文传输的数据极易被窃听、篡改、劫持,HTTPS依靠SSL/TLS协议对传输链路做加密保护,已经成为网站的基础标配。启用HTTPS不仅能够保护用户账号、表单提交等敏感数据,同时对站点权重、浏览器信任标识也会带来正向增益。很多个人开发者、中小企业运维人员,面对证书申请、服务器配置、全站跳转、混合内容报错等环节经常踩坑。本文从改造前置条件、安全组端口放行、证书选型申领、证书上传、Nginx、Apache两种主流Web服务器完整配置,再到验证测试、混合内容修复、安全加固、故障排查,提供完整实操步骤,附带可直接复制的命令与配置片段,帮助零基础使用者完成ECS站点全站HTTPS改造。详情👉访问阿里云 数字证书管理服务(原SSL证书) 平台了解。
一、HTTPS改造前置准备与端口配置
正式改造之前,需要核对基础条件,避免后续部署反复报错。
- 拥有已经完成ICP备案的域名,内地ECS实例对外Web服务,域名必须完成备案;海外实例可豁免备案。
- ECS实例正常运行,Nginx或者Apache Web服务已经部署完成,原HTTP站点访问正常。
- 账号完成实名认证,免费证书无需付费,商用OV/EV证书需要支付对应服务费用。
- ECS安全组需要放行80(HTTP)、443(HTTPS)TCP端口。
ECS控制台进入实例对应的安全组,配置入方向规则:
- 协议:TCP
- 端口范围:
443/443,来源设置0.0.0.0/0,备注填写HTTPS访问。 - 确认80端口入方向规则已经存在,用于HTTP跳转HTTPS。
提示:服务器内部firewalld、ufw操作系统防火墙同样需要放行80、443端口,否则即便安全组放行依旧无法访问。CentOS放行端口命令示例:
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload
二、SSL证书选型以及申请流程
数字证书管理服务提供多类型SSL证书,不同证书适配不同业务规模。详情👉访问阿里云 数字证书管理服务(原SSL证书) 平台了解。
- 免费DV域名验证证书:适合个人博客、小型测试站点,仅支持单域名,有效期90天,每年有免费申领额度,自动域名验证,数分钟即可签发。
- 付费DV证书:支持单域名、多域名、通配符域名,有效期最长两年,自动域名校验,适合中小企业官网。
- OV企业证书:企业身份人工审核,适合正规企业对外站点。
- EV增强证书:最高等级企业证书,浏览器地址栏展示企业绿色标识,适合金融、交易等高安全要求业务。
2.1 免费DV证书申请
登录控制台,搜索数字证书管理服务,进入SSL证书管理页面。选择免费证书页签,点击创建证书,选择快捷签发,填写需要保护的域名,填写联系邮箱与手机号。
域名验证分为两种方式:
- 自动DNS验证(推荐):域名解析在同一平台,系统自动添加TXT解析记录,无需手动操作。
- 文件验证:把平台提供的验证文件上传到网站根目录
.well‑known/pki‑validation路径,CA机构访问该文件完成所有权校验。
提交等待审核,DV证书一般1‑15分钟签发,状态变更为已签发,就可以下载证书压缩包。下载的时候,根据Web服务器类型选择Nginx或者Apache版本,解压之后得到证书pem/crt文件和私钥key文件,私钥key文件需要严格保密,禁止对外泄露。
2.2 付费证书申请
控制台点击购买证书,选择DV/OV/EV证书,选择域名类型单域名、通配符,完成支付。进入证书列表点击申请,填写域名、企业资料,OV/EV证书需要提交营业执照材料,完成域名以及企业身份审核,审核通过之后下载对应服务器格式证书包。
三、证书上传至ECS服务器
把本地解压后的证书文件上传到ECS服务器,建议存放到专门ssl目录,不要放置网站根目录,防止被外网访问下载私钥。
Nginx服务器创建存放目录:
sudo mkdir -p /etc/nginx/ssl
Apache服务器创建存放目录:
sudo mkdir -p /etc/httpd/ssl
本地电脑scp上传证书,替换IP、本地文件路径:
#上传证书pem文件
scp /本地目录/www.example.com.pem root@ECS公网IP:/etc/nginx/ssl/
#上传私钥key文件
scp /本地目录/www.example.com.key root@ECS公网IP:/etc/nginx/ssl/
上传完成修改文件权限,私钥文件权限必须严格限制,防止其他用户读取:
sudo chmod 600 /etc/nginx/ssl/www.example.com.key
sudo chown root:root /etc/nginx/ssl/www.example.com.key
Apache环境路径为
/etc/httpd/ssl/,对应修改路径执行权限命令。
四、Nginx服务器完整HTTPS配置
编辑Nginx站点配置文件,一般路径/etc/nginx/conf.d/域名.conf
sudo vim /etc/nginx/conf.d/www.example.com.conf
增加443端口HTTPS服务块,配置证书、TLS协议、加密套件、HSTS头:
server {
listen 443 ssl;
server_name www.example.com;
#证书路径
ssl_certificate /etc/nginx/ssl/www.example.com.pem;
ssl_certificate_key /etc/nginx/ssl/www.example.com.key;
#安全协议套件,禁用老旧不安全协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE‑RSA‑AES128‑GCM‑SHA256:ECDHE‑RSA‑AES256‑GCM‑SHA384:ECDHE‑ECDSA‑AES128‑GCM‑SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
#OCSP Stapling优化证书校验速度
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/www.example.com.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
#HSTS强制浏览器使用HTTPS访问
add_header Strict‑Transport‑Security "max‑age=31536000; includeSubDomains" always;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
#80端口全部301永久重定向HTTPS
server {
listen 80;
server_name www.example.com;
return 301 https://$host$request_uri;
}
配置完成,校验Nginx配置语法是否错误:
sudo nginx -t
输出test is successful代表语法无问题,重载配置,不中断线上业务:
sudo nginx -s reload
五、Apache服务器HTTPS完整配置
CentOS/RHEL系统安装ssl模块:
sudo yum install mod_ssl -y
Ubuntu/Debian系统:
sudo apt install apache2 -y
编辑ssl站点配置文件,CentOS路径/etc/httpd/conf.d/ssl.conf
sudo vim /etc/httpd/conf.d/ssl.conf
443端口虚拟主机配置内容:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/www.example.com.crt
SSLCertificateKeyFile /etc/httpd/ssl/www.example.com.key
SSLCertificateChainFile /etc/httpd/ssl/www.example.com.pem
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
SSLHonorCipherOrder on
Header always set Strict‑Transport‑Security "max‑age=31536000; includeSubDomains"
<Directory "/var/www/html">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
新增80端口配置,实现HTTP跳转HTTPS:
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
校验Apache配置语法:
#CentOS
sudo apachectl configtest
#Ubuntu
sudo apache2ctl configtest
重启Apache服务使配置生效:
#CentOS
sudo systemctl restart httpd
#Ubuntu
sudo systemctl restart apache2
六、HTTPS部署验证与全站混合内容修复
6.1 多途径验证部署结果
浏览器访问https://域名,地址栏出现安全小锁标识代表基础部署成功。
命令行方式检测端口监听与证书信息:
#查看443端口监听状态
sudo netstat -tuln | grep 443
#openssl工具查看证书详情
openssl s_client -connect www.example.com:443
6.2 混合内容Mixed‑Content问题处理
HTTPS页面加载HTTP协议的图片、JS、CSS资源,浏览器会标记不安全,部分脚本会被浏览器直接拦截,也就是混合内容问题。详情👉访问阿里云 数字证书管理服务(原SSL证书) 平台了解。
解决手段分为三类:
- 修改业务代码,页面内资源链接把
http://改为https://,或者使用相对协议//资源地址自动适配访问协议。 - Nginx增加sub_filter配置,在反向代理层面自动替换页面内http链接。
sub_filter 'http://www.example.com' 'https://www.example.com';
sub_filter_once off;
- 配置CSP内容安全策略头,限制只允许HTTPS来源资源加载。
排查方式:浏览器F12打开开发者工具,切换Console控制台,可以看到混合内容报错,定位具体资源URL。
七、安全加固要点
- 协议层面:仅保留TLSv1.2、TLSv1.3,彻底禁用老旧SSLv2、SSLv3、TLSv1、TLSv1.1。
- 开启HSTS响应头,防止用户被劫持跳转到HTTP页面。
- 开启OCSP Stapling,加速证书吊销状态校验。
- 证书有效期监控:免费DV证书有效期仅90天,必须在到期前重新申请并且更新服务器证书文件,证书过期站点浏览器直接报不安全警告。
- 私钥文件权限严格控制,禁止对外泄露私钥内容。
八、高频故障排查
故障1:访问https域名无法连接
排查顺序:确认ECS安全组443端口放行;操作系统防火墙开放443;Nginx/Apache服务正常运行;证书文件路径、文件名没有写错;私钥文件权限配置正确。
故障2:浏览器提示证书不安全
排查证书是否已经签发、没有过期;证书绑定域名和访问域名保持一致;确认完整证书链文件已经配置;清除浏览器缓存,无痕模式重新访问页面。
故障3:HTTP访问不会自动跳转HTTPS
确认安全组80端口开放;检查80端口server块重定向配置;Web服务配置重载成功;清除浏览器缓存测试。
故障4:页面样式错乱,图片不加载
大概率混合内容问题,F12控制台查看报错,把页面中http资源链接替换为https,使用Nginx sub_filter辅助替换,或者配置CSP策略。
九、后续运维维护总结
HTTPS改造不是一次性工作,后续需要持续运维维护。免费证书90天到期,需要重新申请下载更新服务器证书,更新证书文件之后重载Web服务配置;定期使用在线SSL检测工具扫描站点TLS安全评分;持续关注页面混合内容,新业务上线的图片脚本资源不要硬编码HTTP链接;可以搭配WAF等安全产品进一步提升站点整体防护能力。
完成全站HTTPS加密改造,实现传输链路加密,规避中间人劫持风险,同时提升站点浏览器信任度,是现代Web站点必不可少的安全基础配置。