HSTS:强制 HTTPS 访问的安全机制

什么是 HSTS? HSTS(HTTP Strict Transport Security)是一种网络安全策略机制,允许网站声明浏览器必须仅通过 HTTPS 连接访问。一旦服务器发送 Strict-Transport-Security 响应头,浏览器就会记住这个指令,在指定时间内(max-age)自动将所有 HTTP 请求转换为 HTTPS。 HSTS 响应头格式 1 Strict-Transport-Security: max-age=<过期时间>; includeSubDomains; preload 参数说明 参数 说明 max-age 浏览器记住该规则的时长,单位为秒。例如 31536000 代表一年 includeSubDomains 可选指令,作用范围包含所有子域名 preload 可选指令,表示该域名申请加入 HSTS 预加载列表 实际案例 查看主流网站的 HSTS 头配置: 1 2 # 使用 curl 查看 HSTS 响应头 curl -sI https://cloudflare.com | grep -i strict-transport-security 输出示例: 1 Strict-Transport-Security: max-age=15552000; includeSubDomains 验证多个网站 1 2 3 4 5 # 检查不同网站的 HSTS 配置 for domain in cloudflare....

April 19, 2026 · 2 min · 黑豆子

TLS 1.2 与 TLS 1.3 的主要区别

TLS(Transport Layer Security)协议是 HTTPS 的核心安全保障。从 TLS 1.2 到 TLS 1.3,协议经历了重大改进。本文详细对比两者的主要区别,帮助你理解为什么应该优先使用 TLS 1.3。 握手过程:从 2-RTT 到 1-RTT TLS 1.2 的完整握手需要两次往返(2-RTT): 1 2 3 4 ClientHello + ServerHello + 证书 + 密钥交换 → ← ServerKeyExchange + 证书请求 + ServerHelloDone ClientKeyExchange + 证书验证 + Finished → ← Finished → 应用数据 TLS 1.3 将握手优化为一次往返(1-RTT): 1 2 3 ClientHello + 密钥交换材料 → ← ServerHello + 密钥交换材料 + 证书 + Finished Finished → 应用数据 TLS 1.3 还支持 0-RTT 模式,允许在首次连接时就开始发送加密数据,但需要预先共享密钥。...

April 18, 2026 · 2 min · 黑豆子

双向 TLS 认证实战指南

什么是双向 TLS 认证 普通 HTTPS 连接中,客户端验证服务器证书,确保连接的是真实的服务器。双向 TLS(Mutual TLS,简称 mTLS) 在此基础上增加了服务器对客户端的验证——客户端必须提供有效的证书才能建立连接。 这种认证方式比用户名密码更安全,广泛用于: API 服务间的身份认证 零信任网络架构 企业内部系统访问控制 高安全要求的金融、医疗系统 工作原理 mTLS 握手过程: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 客户端 服务器 | | |---------- ClientHello --------------->| |<--------- ServerHello ----------------| |<--------- Certificate ----------------| (服务器证书) |<--------- CertificateRequest ---------| (请求客户端证书) |<--------- ServerHelloDone ------------| | | |---------- Certificate ---------------->| (客户端证书) |---------- ClientKeyExchange --------->| |---------- CertificateVerify --------->| (证明拥有私钥) |---------- Finished ------------------>| |<--------- Finished -------------------| | | |====== 加密通信通道 ====================| 关键区别:服务器发送 CertificateRequest,客户端响应自己的证书并用私钥签名证明身份。...

April 11, 2026 · 3 min · 黑豆子

HTTPS 混合内容问题及解决方案

当 HTTPS 页面加载 HTTP 资源时,就会产生混合内容(Mixed Content)。浏览器会阻止不安全的请求,导致页面功能异常。本文介绍混合内容的类型、排查方法和解决方案。 什么是混合内容 HTTPS 页面中通过 HTTP 加载的资源称为混合内容: 1 2 3 4 <!-- HTTPS 页面中的混合内容 --> <script src="http://example.com/script.js"></script> <img src="http://example.com/image.jpg"> <link rel="stylesheet" href="http://example.com/style.css"> 混合内容类型 混合被动内容(Mixed Passive Content) 低风险资源,浏览器通常只显示警告: <img> 图片 <audio> / <video> 媒体 <object> 子资源 混合主动内容(Mixed Active Content) 高风险资源,浏览器会直接阻止: <script> 脚本 <link> 样式表 <iframe> 内嵌页面 XMLHttpRequest / Fetch 请求 <frame> / <object> 加载的页面 排查方法 浏览器控制台 打开开发者工具(F12),查看 Console 和 Security 面板: 1 2 3 Mixed Content: The page at 'https://example....

April 5, 2026 · 2 min · 黑豆子

OpenSSL s_client 排查 HTTPS 连接问题

使用 OpenSSL s_client 命令排查 HTTPS 连接问题,包括证书验证、握手过程、TLS 协议版本检测等实用技巧。

April 5, 2026 · 2 min · 黑豆子

TLS 1.3 握手过程详解

深入解析 TLS 1.3 协议的握手流程,包括 ClientHello、ServerHello、密钥交换、证书验证等关键步骤,对比 TLS 1.2 的改进。

April 3, 2026 · 2 min · 黑豆子

SSL/TLS 握手详解:从连接到加密通道

本文深入解析 SSL/TLS 握手过程,理解加密通道如何建立以及密钥交换的原理。

April 2, 2026 · 2 min · 黑豆子

TLS 1.3 核心特性与配置实践

介绍 TLS 1.3 的核心改进,包括握手优化、加密套件精简、0-RTT 等特性,以及 Nginx、Apache 配置方法。

April 2, 2026 · 2 min · 黑豆子

TLS 1.3 密码套件配置指南

TLS 1.3 密码套件配置指南 TLS 1.3 相比之前的版本有了重大改进,其中最重要的变化之一就是大幅简化了密码套件。本文将详细介绍 TLS 1.3 的密码套件配置和使用方法。 TLS 1.3 密码套件概述 TLS 1.3 对密码套件进行了大幅简化,移除了不安全的算法,只保留以下类型的密码套件: AEAD 密码套件:所有套件都使用 AEAD(Authenticated Encryption with Associated Data)算法 前向保密:所有套件都支持完美前向保密(PFS) 移除弱算法:不再支持 RC4、MD5、SHA-1 等 TLS 1.3 支持的密码套件 1. GCM 密码套件 密码套件 密钥交换 认证 加密 密钥长度 适用场景 TLS_AES_256_GCM_SHA384 ECDHE ECDSA/RSA AES-256-GCM 256位 高安全性要求 TLS_CHACHA20_POLY1305_SHA256 ECDHE ECDSA/RSA ChaCha20-Poly1305 256位 移动设备、弱网络 TLS_AES_128_GCM_SHA256 ECDHE ECDSA/RSA AES-128-GCM 128位 标准安全性 TLS_AES_128_CCM_SHA256 ECDHE ECDSA/RSA AES-128-CCM 128位 兼容性要求 2. 查看系统支持的 TLS 1.3 密码套件 1 2 3 4 5 # 查看 OpenSSL 支持的 TLS 1....

March 29, 2026 · 5 min · 黑豆子

SSL/TLS 握手性能优化:Session Resumption 实战

SSL/TLS 握手是 HTTPS 性能的关键瓶颈。本文聚焦会话恢复(Session Resumption)技术,帮助你减少握手延迟。 问题:SSL 握手的开销 完整的 TLS 握手需要多次网络往返: 1 2 3 4 5 # 测试握手时间 curl -w "Time: %{time_total}s\n" -o /dev/null -s https://example.com # 使用 openssl 测试连接时间 time openssl s_client -connect example.com:443 </dev/null 对于 TLS 1.2,完整握手需要 2 个 RTT。通过会话恢复可以降至 0-1 个 RTT。 Session ID 复用 工作原理 服务器为每个会话分配唯一 ID,客户端在后续连接时发送该 ID,服务器据此恢复会话状态。 Nginx 配置 1 2 3 4 5 6 7 8 9 10 11 12 server { listen 443 ssl; server_name example....

March 28, 2026 · 3 min · 黑豆子