云服务器ECS HTTPS改造全攻略:SSL证书申请部署全站加密实操手册

简介: 现如今互联网安全标准持续提升,HTTPS加密已经不再是大型网站的专属配置,普通个人站点、企业官网、小程序后端接口都必须完成HTTPS改造。没有开启HTTPS的网站,浏览器地址栏会标记不安全标识,不仅会影响访客信任度,同时还会对搜索收录、小程序对接、第三方API调用产生直接阻碍。很多运维新手在ECS服务器做HTTPS改造时,经常遇到证书签发失败、443端口无法访问、重定向循环、混合内容报错等一系列问题,看似简单的证书部署,实际落地过程中会踩大量隐形坑点。本文完整梳理从SSL证书申请、域名所有权验证、证书下载上传、Web服务配置、安全组端口放行、HTTP强制跳转HTTPS、全站混合内容修复、上线验

现如今互联网安全标准持续提升,HTTPS加密已经不再是大型网站的专属配置,普通个人站点、企业官网、小程序后端接口都必须完成HTTPS改造。没有开启HTTPS的网站,浏览器地址栏会标记不安全标识,不仅会影响访客信任度,同时还会对搜索收录、小程序对接、第三方API调用产生直接阻碍。很多运维新手在ECS服务器做HTTPS改造时,经常遇到证书签发失败、443端口无法访问、重定向循环、混合内容报错等一系列问题,看似简单的证书部署,实际落地过程中会踩大量隐形坑点。本文完整梳理从SSL证书申请、域名所有权验证、证书下载上传、Web服务配置、安全组端口放行、HTTP强制跳转HTTPS、全站混合内容修复、上线验证以及故障排查的整套实操流程,附带完整可直接运行的代码命令,帮助零基础用户完成ECS网站全站HTTPS加密改造工作。

在正式开始HTTPS改造之前,需要梳理前置条件,避免后续操作反复返工。首先需要准备已经完成解析的域名,域名解析记录已经指向ECS实例公网IP地址;其次ECS实例操作系统为CentOS、Ubuntu等主流Linux发行版本,Web服务已经正常运行,80端口HTTP访问网站可以正常打开;同时需要拥有服务器SSH登录权限,能够执行命令行操作;最后确认ECS安全组规则,后续需要开放443端口TCP协议入方向权限。如果网站前端接入负载均衡、CDN产品,证书部署逻辑会发生变化,证书需要配置在负载均衡或者CDN层面,后端ECS只需要处理HTTP流量即可,本文教程针对没有中间代理、ECS直接对外提供Web访问的业务场景。详情👉访问阿里云 数字证书管理服务(原SSL证书) 平台了解。

第一步是SSL证书申请与域名验证。数字证书管理服务控制台可以申请DV类型SSL证书,DV证书依靠域名所有权校验完成签发,适合绝大多数个人网站与中小企业官网。免费DV证书存在有效期限制,适合测试站点、个人博客;企业业务系统、电商站点建议选择OV或者EV等级付费证书,具备更高安全等级与可信度。进入证书管理页面,选择对应证书规格,填写需要加密的域名,包含主域名以及www子域名,CSR生成方式建议选择系统生成,平台托管私钥,后续下载证书文件直接使用,避免手动生成CSR出现私钥丢失问题。

提交证书申请之后,核心环节是域名所有权验证,只有验证通过证书才会签发。主流验证方式分为DNS验证和文件验证,DNS验证适用性更广,推荐优先选择。提交审核之后控制台会给出一条TXT类型解析记录,主机记录一般为_dnsauth,附带一串随机记录值。登录域名解析控制台,新增TXT解析记录,复制粘贴对应的主机记录与记录值,TTL保持默认数值。解析记录新增之后,DNS全球生效存在时间延迟,通常数分钟到半小时不等,完成解析之后回到证书控制台点击验证按钮,状态更新为已签发代表证书申请成功。如果域名解析不在同一平台,同样可以使用DNS验证;当无法修改域名解析记录时,可以选择文件验证,将指定验证文件上传至网站根目录,通过访问特定路径完成域名所有权校验,等待系统检测通过即可签发证书。详情👉访问阿里云 数字证书管理服务(原SSL证书) 平台了解。

证书签发完成之后,需要下载适配Web服务器类型的证书压缩包。点击下载按钮,根据自身Web服务选择对应的版本,Nginx、Apache、Tomcat所需要的证书文件格式各不相同,选错格式会导致后续部署报错。解压下载压缩包,Nginx版本压缩包内包含两个核心文件,.pem后缀证书文件,完整证书链文件,.key后缀私钥文件,私钥文件属于敏感资源,禁止对外泄露,做好本地备份保存工作。

接下来将证书文件上传至ECS服务器,通过SSH连接登录ECS实例,创建专门存放证书的目录,不建议直接放在网站业务目录下,防止误删除。执行下面命令创建证书存放文件夹:

mkdir -p /etc/nginx/cert

使用SCP工具、WinSCP等工具,将本地解压后的pem证书文件与key私钥文件上传到/etc/nginx/cert目录。上传结束之后修改文件权限,缩小文件访问权限范围,提升服务器安全等级,防止普通用户读取私钥文件:

chmod 600 /etc/nginx/cert/*.pem
chmod 600 /etc/nginx/cert/*.key

执行ls命令确认两个文件完整存在,没有出现文件损坏、缺失情况:

ls -l /etc/nginx/cert/

证书文件准备完毕,必须确认ECS安全组已经放行443端口TCP入方向访问权限,这是新手高频踩坑点。即使Web服务配置全部正确,安全组没有开放443端口,外部网络依旧无法访问HTTPS服务。进入ECS实例安全组配置页面,添加入方向规则,协议TCP,端口443,授权对象按需配置,公网全量访问填写0.0.0.0/0。同时服务器内部防火墙也需要放行端口,CentOS系统firewalld防火墙放行命令:

firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --reload

Ubuntu系统ufw防火墙放行端口:

ufw allow 443/tcp
ufw reload

端口连通性可以执行命令测试443端口监听状态:

ss -tlnp | grep 443

完成端口准备之后,修改Nginx配置文件,实现443端口SSL监听。找到站点对应的conf配置文件,一般存放路径/etc/nginx/conf.d/,编辑站点配置文件:

vim /etc/nginx/conf.d/site.conf

写入完整HTTPS服务配置,配置中包含证书路径、TLS协议版本、加密套件、网站根目录等参数,禁用老旧不安全TLS1.0、TLS1.1协议,只保留TLSv1.2、TLSv1.3,兼顾安全性与设备兼容性,同时开启HTTP2提升访问性能。

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    ssl_certificate /etc/nginx/cert/fullchain.pem;
    ssl_certificate_key /etc/nginx/cert/privkey.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm index.php;
    }
}

配置完成之后,需要配置80端口HTTP全部301永久重定向跳转至HTTPS,实现全站加密,所有访问HTTP的请求自动切换加密协议。新增独立server块专门处理80端口请求,不要在443服务块内做跳转,避免循环重定向问题。

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

修改完配置文件,千万不要直接重启Nginx,优先执行配置语法校验命令,如果配置存在语法错误,直接重启会造成网站服务直接中断不可访问。校验命令:

nginx -t

输出syntax is oktest is successful代表配置语法没有问题,重载Nginx配置使新配置生效,重载不会中断现有业务连接:

systemctl reload nginx

如果业务使用Apache Web服务,部署逻辑大体相似,创建证书存放目录,上传证书文件,编辑ssl虚拟主机配置文件。

mkdir -p /etc/apache2/ssl

Apache 443虚拟主机配置示例:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "/var/www/html"
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/fullchain.pem
    SSLCertificateKeyFile /etc/apache2/ssl/privkey.key
    SSLProtocol -all +TLSv1.2 +TLSv1.3
</VirtualHost>
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

配置完成校验Apache配置,重载服务:

apache2ctl configtest
systemctl reload apache2

配置重载完成之后,进入全站验证环节,不能仅仅依靠浏览器访问,需要多维度检测HTTPS是否真正生效。首先使用curl命令在服务器本地测试跳转逻辑,查看返回状态码,确认HTTP访问返回301跳转:

curl -v -L http://example.com

使用openssl命令测试SSL握手情况,排查证书链、TLS握手异常:

openssl s_client -connect example.com:443

在本地电脑浏览器清除缓存,访问https://域名,观察地址栏锁图标是否正常显示,没有不安全警告。这里需要重点处理混合内容问题,这是HTTPS改造中非常普遍的故障,网站虽然开启HTTPS,但是页面内部图片、CSS、JS、字体等静态资源依旧写死HTTP地址,浏览器出于安全策略拦截资源,页面样式错乱,图片无法加载。按下F12打开开发者工具,切换到控制台面板,会打印混合内容警告,定位所有HTTP协议资源链接,修改模板、程序配置,将HTTP链接替换为HTTPS协议或者使用相对路径,消除混合内容告警。

完成基础访问验证之后,还要梳理证书续期机制,免费DV证书有效期时间短,到期之后证书失效,网站会直接报证书不安全。免费证书到期前需要重新申请证书,下载新证书文件,上传覆盖服务器旧证书,再重载Web服务配置。如果业务使用付费证书,也要设置到期提醒,提前完成续费更新,避免业务中断。

接下来梳理HTTPS改造高频故障与排错方案,大部分报错都可以通过下面步骤定位解决。

故障一:浏览器提示连接不安全,证书不受信任。首先确认证书绑定域名和访问域名完全一致,证书状态是已签发,没有过期;其次确认Nginx配置里面ssl_certificate使用完整证书链pem文件,不是只上传域名证书,缺少中间证书会导致信任链断裂;清除浏览器缓存重新测试,部分浏览器会缓存旧证书信息。

故障二:ERR_TOO_MANY_REDIRECTS重定向循环。该报错代表请求在HTTP和HTTPS之间来回跳转。排查Nginx配置,确认443端口server块内部没有写return跳转http规则;检查是否存在多个配置文件同时配置重定向,多条跳转规则叠加造成循环;如果网站部署反向代理,需要配置X‑Forwarded‑Proto头部,后端程序识别原始访问协议,避免程序内部再次跳转。

故障三:HTTPS完全无法访问,访问超时拒绝连接。第一步检查安全组443端口是否放行,服务器本地防火墙是否开放端口;执行ss命令确认Nginx正常监听443端口;检查Nginx配置listen指令是否携带ssl参数,漏写ssl参数,443端口会以普通HTTP协议监听,访问HTTPS直接握手失败。

故障四:Nginx reload失败,启动报错SSL_CTX_use_PrivateKey错误。该报错代表证书pem文件和key私钥文件不匹配,检查下载证书版本是否选对Web服务器类型,上传的文件是否混淆,重新下载证书包解压上传,核对文件路径配置无误。

完成HTTPS改造上线之后,还有一些进阶优化建议。可以配置HSTS响应头,强制浏览器后续访问直接使用HTTPS协议,减少HTTP跳转的开销,在Nginx的443的server块内部增加头部配置:

add_header Strict‑Transport‑Security "max‑age=31536000; includeSubDomains" always;

HSTS配置上线前务必充分测试,一旦浏览器缓存HSTS策略,短时间内无法回退HTTP访问,确认业务稳定之后再启用。同时可以使用专业SSL检测工具,对站点做安全扫描,检查TLS配置、证书链完整性,拿到安全评级,持续优化加密安全等级。

很多用户在做HTTP迁移HTTPS时忽略业务侧适配,网站程序、后台管理系统、接口服务都需要适配HTTPS环境。数据库、缓存配置里面写死的网站域名地址,需要全部更新为HTTPS;API接口、小程序回调地址、第三方回调域名全部替换为HTTPS链接;同时做好URL变更记录,对于原有HTTP页面做好301永久跳转,减少对搜索收录的负面影响。正式上线之前强烈建议先在测试环境完整复现整套HTTPS部署流程,修复混合内容、接口异常等各类问题,确认全部业务功能正常,再同步到生产环境,规避直接修改线上业务带来的业务风险。

整体来看ECS全站HTTPS改造,技术本身并不复杂,但整套流程涉及证书申请、域名验证、云服务器网络安全组、Web服务配置、程序资源适配、证书续期多个环节,任何一个小细节疏漏就会引发访问故障。完整走完证书申请、下载上传、端口放行、Web服务SSL配置、301强制跳转、混合内容修复、多维度验证这一套完整流程,才能真正实现全站HTTPS加密,充分发挥SSL证书的安全防护能力,保障网站数据传输安全,同时满足浏览器标准、第三方业务对接的硬性要求。运维人员日常维护中,需要建立证书到期监控提醒机制,定期检查证书有效期,提前完成证书更新,避免证书过期造成业务访问故障。

目录
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
33252 201
如何保证分布式文件系统的数据一致性
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36821 22
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24905 16
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36824 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29949 52

热门文章

最新文章