HSTS与SSL证书配置

前言

最近我部署在阿里云的个人网站,因为临时SSL证书过期,导致无法访问。之前刚买完服务器的时候部署配置过Nginx的SSL证书,但是时间过于久远,忘记怎么配置了,所以又重头搜了一下教程,这次归纳总结一下,下次就可以直接照做就好了。

正文

问题背景与故障现象

之前第一次部署网站的时候,随波逐流地在Nginx中设置了SSL证书和HTTPS访问:https://juejin.cn/spost/7604345576176877606

当时不求甚解,跟着教程将HSTS的过期时间配置的很大很大

grep -R "Strict-Transport-Security" /etc/nginx
/etc/nginx/snippets/ssl-params.conf:add_header Strict-Transport-Security "max-age=31536000" always;

所以,当SSL证书过期之后,再使用https访问域名的时候就会出现下面的错误:

您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。

HSTS

HSTS是“HTTP Strict Transport Security”的缩写,是一种浏览器安全机制。当服务器通过响应头声明 HSTS 后,浏览器会在指定时间内强制只使用 HTTPS 访问该域名,并且:

  • 不允许回退到 HTTP
  • 即使证书过期、配置错误,也无法手动跳过
  • 策略会被浏览器本地缓存

说人话就是如果浏览器接收到使用 HTTP 加载资源的请求,则必须尝试使用 HTTPS 请求替代。 如果 HTTPS 不可用,则必须直接终止连接。

对于大企业来说,HSTS能够很好的保障连接的安全,防止中间人攻击(仅使用HTTPS)。但是对于我的个人站来说,一旦SSL证书过期(90天/次),整个网站就无法访问。并且,即使我后期在服务端删除了HSTS的配置,之前访问过我个人网站的设备也无法绕过——我的max-age设置的太长了。

操作流程:修复好SSL证书之后,进入服务器更新配置文件

vim /etc/nginx/snippets/ssl-params.conf

# 将max-age修改成0(不删除)
add_header Strict-Transport-Security "max-age=0" always;

nginx -t
systemctl reload nginx

HTTP和HTTPS

HTTP是用于传输网页数据的应用层协议,但它是明文的,存在窃听、篡改、中间人攻击等安全风险。HTTPS则是HTTP的安全版本,通过SSL/TLS协议对传输数据进行加密和身份验证,确保数据在传输过程中的机密性、完整性和真实性。

SSL证书

我的云服务器是阿里云的,SSL证书也是在阿里云申请的免费测试证书,需要90天一续期。届时应前往官网阿里云-计算,为了无法计算的价值,进入数字证书管理服务进行重新申请

申请SSL证书分为3步:

  • 购买证书
  • 申请证书
  • 部署证书

前两部都是在阿里云控制台进行购买和申请的,在此不做赘述,主要是第三步部署:下载适用于不同服务器类型的SSL证书-数字证书管理服务-阿里云

这里我选用的Web服务器是Nginx

在Nginx中部署SSL证书

当申请的证书通过CA验证的时候,就可以在阿里云控制台中进行下载。我这里下载的是适用于Nginx的PEM格式证书,解压后的文件有两个:

  • 【domain name】.pem:证书文件。
  • 【domain name】.key:证书私钥文件

解压后将其上传在服务器的某个地址(建议放在/etc/nginx/cert下面)

修改Nginx配置文件,我的配置文件位于:/etc/nginx/site-enabled/default中,在HTTPS的server块中增加上面证书配置文件的路径

# SSL证书配置 - 根据你的实际文件名修改
ssl_certificate /etc/nginx/cert/[domain name].pem;       # 证书文件
ssl_certificate_key /etc/nginx/cert/[domain name].key;   # 私钥文件

重载Nginx:

nginx -t
systemctl reload nginx

结语

这次遇到的问题本质上并不复杂:SSL证书过期 + 过度配置的HSTS,共同导致了站点的不可访问。

真正的问题在于,当初在配置HTTPS时,对HSTS的理解停留在“安全最佳实践”,却忽略了它对运维稳定性和维护能力的隐含要求。在证书需要手动续期、站点由个人维护的前提下,过长的HSTSmax-age 实际上放大了单点失误的影响范围。

全部评论

相关推荐

一、岗位名称/工作性质风电运维、定检工程师/技术员 ,和中网智源人力资源管理(青岛)有限公司直签劳动合同二、薪资待遇试用期三个月6200,转正后综合薪资7500以上,五险一金,管吃住,每三个月考评提升职级600-800元,3个月休12天,报销休假往返路费,年底看项目效益情况发奖金,过节有福利。三、工作地点第一根据公司需要全国分配,第二根据个人意愿按省分配。四、岗位职责负责风电场风机设备的日常巡检、维护、保养工作,确保设备稳定运行; 及时排查并处理风机运行中的故障,做好故障记录及整改跟踪; 严格遵守公司安全操作规程及风电行业相关标准,落实安全生产责任; 完成上级交办的其他运维相关工作。五、任职要求1.年龄18-45周岁,大专学历以上,身体健康,无重大疾病、传染病及职业禁忌症,能适应风电场所工作环境及倒班、户外作业需求;2.必须持有有效高压电工证、低压电工证、登高作业证,三证齐全且在有效期内; 无证需要考证;应届毕业生需要电气或机械相关专业。3.有风电运维相关工作经验者优先录用,熟悉风机结构、运维流程者可优先考虑;4.具备较强的责任心、安全意识和动手操作能力,能独立处理常见设备故障;5.服从公司管理,愿意接受跨区域工作调配,无不良从业记录。
点赞 评论 收藏
分享
本人最初是误打误撞进入了 SRE 这个赛道,但是也从最开始的小白一直到现在对这个领域有了一定的见解,也希望能给一些迷茫的同学分享一些经验吧,全篇大白话通俗易理解1.SRE 岗位是干什么的大多数大厂应届生工作内容主要是:业务运维,会跟业务对接,处理业务相关的问题,处理工单,排障,做预案等,还包含 on call 值班,处理对应负责业务的告警内部平台/工具 自动化开发,资源治理,容量规划,监控告警,CI/CD 等等相关的开发,技术栈主要是 Python/go,部分有可能会做 aiops 相关,目的基本都是提高运维效率故障演练和应急响应,进行故障演练,确保在系统出现问题时能够迅速响应和恢复2.在求职中, SRE和开发有什么区别?招聘投递,后端的岗位量大于 SRE,但是后端的竞争会相当激烈,就个人经验而言,SRE 竞争压力会小很多,而且在大厂里 SRE 的学历要求会低一些面试,SRE 侧重于 Linux 相关(Linux 内核、shell 脚本、开源中间件,虚拟化等),后端开发的话技术栈更侧重于开发语言,还有就是 SRE 算法难度会低于后端开发薪资,对应届生而言,在大厂技术岗里,薪资主要看个人(学历,实习经历,面试表现)定级,大多数人基本都差不多,但是在顶尖那一批人里,后端开发的薪资上限会高一些希望可以给一些同学解疑答惑吧,接受 一对一咨询
软件开发投递记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务