news 2026/4/16 10:56:01

HTTPS 原理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HTTPS 原理详解

1.HTTPS 是什么?

HTTPS = HTTP + SSL/TLS

  • HTTP:超文本传输协议(明文传输)

  • SSL/TLS:安全套接层/传输层安全协议(加密层)

2.为什么需要 HTTPS?

攻击类型HTTP 风险HTTPS 防护
窃听数据明文传输,可被截获数据加密传输
篡改可修改传输内容内容完整性校验
冒充可伪装成合法网站身份认证

3.核心工作原理:非对称加密 + 对称加密

3.1混合加密流程

客户端 服务器 | | | 1. Client Hello (支持的加密算法) | |------------------------------------->| | | | 2. Server Hello (选择的算法+证书) | |<-------------------------------------| | | | 3. 验证证书合法性 | | | | 4. 生成随机对称密钥 | | 用服务器公钥加密对称密钥 | |------------------------------------->| | | | 5. 服务器私钥解密获取对称密钥 | | | | 6. 使用对称密钥加密通信 | |<====================================>|

3.2为什么混合使用?

  • 非对称加密:安全但慢,用于交换对称密钥

  • 对称加密:快速高效,用于实际数据传输

4.数字证书原理

4.1证书包含内容

证书 = { 版本信息 序列号 签名算法 颁发者 有效期 主体(域名) 主体公钥 扩展信息 证书签名(CA私钥加密的摘要) }

4.2证书验证流程

// 简化的验证逻辑 function verifyCertificate(certificate) { // 1. 检查证书是否过期 if (Date.now() > certificate.expiry) { return false; } // 2. 检查域名是否匹配 if (currentDomain !== certificate.domain) { return false; } // 3. 验证证书链 const rootCA = getRootCA(); const issuerCert = getIssuerCertificate(); // 4. 验证签名 const hash = sha256(certificate.data); const decryptedSignature = rsaDecrypt( certificate.signature, issuerCert.publicKey ); return hash === decryptedSignature; }

5.SSL/TLS 握手详细过程

5.1完整握手(Full Handshake)

1. Client Hello - 客户端随机数 (Client Random) - 支持的密码套件 (Cipher Suites) - 支持的TLS版本 - Session ID (如果有) 2. Server Hello - 服务器随机数 (Server Random) - 选择的密码套件 - 数字证书 3. Server Certificate (可选) - 服务器证书链 4. Server Key Exchange (可选) - 密钥交换参数 5. Server Hello Done 6. Client Key Exchange - 预主密钥 (Pre-master Secret) - 用服务器公钥加密 7. Change Cipher Spec - 通知使用新加密参数 8. Finished - 验证握手完整性

5.2密钥生成过程

# 伪代码表示密钥生成 def generate_keys(client_random, server_random, pre_master_secret): # 1. 生成主密钥 master_secret = PRF( pre_master_secret, "master secret", client_random + server_random, 48 # 48字节长度 ) # 2. 生成会话密钥 key_block = PRF( master_secret, "key expansion", server_random + client_random, required_length ) # 3. 分割成不同用途的密钥 client_write_MAC_key = key_block[0:20] server_write_MAC_key = key_block[20:40] client_write_key = key_block[40:56] server_write_key = key_block[56:72] client_write_IV = key_block[72:88] server_write_IV = key_block[88:104] return { "client_mac_key": client_write_MAC_key, "server_mac_key": server_write_MAC_key, "client_key": client_write_key, "server_key": server_write_key, "client_iv": client_write_IV, "server_iv": server_write_IV }

6.加密算法演进

6.1TLS 版本发展

SSL 2.0 (1995) → SSL 3.0 (1996) → TLS 1.0 (1999) → TLS 1.1 (2006) → TLS 1.2 (2008) → TLS 1.3 (2018)

6.2现代 TLS 1.3 优化

// TLS 1.3 简化握手 (1-RTT) const tls13Handshake = { // 客户端第一次发送就包含密钥共享 clientHello: { random: clientRandom, key_share: clientPublicKey, // 新增 supported_versions: "TLS 1.3", cipher_suites: [...] }, // 服务器立即回复 serverHello: { random: serverRandom, key_share: serverPublicKey, cipher_suite: selectedCipher }, // 可以立即开始加密通信 encryptedExtensions: {...}, certificate: {...}, finished: {...} };

7.证书类型

7.1DV、OV、EV 证书区别

Domain Validation (DV): - 验证: 仅验证域名所有权 - 颁发速度: 几分钟 - 适合: 个人网站、博客 - 显示: 🔒 + https Organization Validation (OV): - 验证: 验证企业身份 - 颁发速度: 1-3天 - 适合: 企业官网 - 显示: 🔒 + 公司名称 Extended Validation (EV): - 验证: 严格的企业身份验证 - 颁发速度: 5-7天 - 适合: 银行、电商 - 显示: 🔒 + 绿色地址栏 + 公司名称

7.2免费证书 vs 付费证书

// Let's Encrypt (免费) const freeCert = { type: "DV", validity: "90天", autoRenew: true, features: ["基本加密"], cost: "$0", trust: "广泛信任" }; // 商业证书 const commercialCert = { type: ["OV", "EV"], validity: "1-2年", warranty: "$10k-$1.75M", features: ["SSL", "恶意软件扫描", "漏洞评估"], cost: "$50-$1000/year", trust: "最高级别信任" };

8.实际配置示例

8.1Nginx HTTPS 配置

server { listen 443 ssl http2; server_name example.com; # 证书文件 ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/private.key; # 安全配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; # HSTS (强制HTTPS) add_header Strict-Transport-Security "max-age=63072000" always; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /path/to/chain.pem; }

8.2Node.js HTTPS 服务器

const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), // 现代安全配置 minVersion: 'TLSv1.2', ciphers: [ 'ECDHE-RSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES256-GCM-SHA384' ].join(':'), // 启用SNI SNICallback: (domain, cb) => { // 根据域名返回不同证书 if (domain === 'example.com') { cb(null, tls.createSecureContext({ key: exampleKey, cert: exampleCert })); } } }; const server = https.createServer(options, (req, res) => { res.writeHead(200); res.end('Secure connection!'); }); server.listen(443);

9.性能优化

9.1TLS 会话恢复

// Session ID 恢复 const sessionCache = { "session-id-123": { masterSecret: "...", cipherSuite: "TLS_AES_256_GCM_SHA384", createdAt: Date.now() } }; // Session Ticket (无状态恢复) const sessionTicket = encrypt({ masterSecret: "...", lifetime: 3600, timestamp: Date.now() }, ticketKey);

9.2HTTP/2 多路复用

HTTPS + HTTP/2 优势: 1. 单个连接多请求 2. 头部压缩 (HPACK) 3. 服务器推送 4. 请求优先级 效果:减少握手次数,提升性能

10.安全最佳实践

10.1SSL/TLS 配置检查清单

必须配置: - 禁用 SSLv2、SSLv3、TLSv1.0、TLSv1.1 - 启用完美前向保密 (PFS) - 启用 HSTS - 启用 OCSP Stapling - 使用强加密套件 推荐配置: - 启用 TLS 1.3 - 启用 0-RTT (谨慎使用) - 配置证书透明度 (CT) - 使用安全的密钥交换算法

10.2证书监控

// 证书过期监控脚本 const checkCertificateExpiry = async (domain) => { const cert = await getCertificate(domain); const expiryDate = new Date(cert.valid_to); const daysUntilExpiry = Math.floor( (expiryDate - new Date()) / (1000 * 60 * 60 * 24) ); if (daysUntilExpiry < 30) { sendAlert(`证书 ${domain} 将在 ${daysUntilExpiry} 天后过期`); } };

11.常见攻击与防护

11.1中间人攻击 (MITM) 防护

// 证书固定 (Certificate Pinning) const expectedPublicKey = "sha256/AAAAAAAAAAAAAAAAAAAAAA=="; fetch('https://api.example.com/data', { agent: new https.Agent({ // 验证服务器证书公钥 checkServerIdentity: (host, cert) => { const publicKey = cert.pubkey; const fingerprint = sha256(publicKey); if (fingerprint !== expectedPublicKey) { throw new Error('证书指纹不匹配'); } } }) });

11.2降级攻击防护

# Nginx 配置防止降级攻击 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 禁用不安全的重新协商 ssl_renegotiation off;

12.调试与测试工具

12.1命令行工具

# 检查证书信息 openssl s_client -connect example.com:443 -servername example.com # 检查支持的协议 nmap --script ssl-enum-ciphers -p 443 example.com # 测试SSL配置 sslscan example.com testssl.sh example.com # Qualys SSL Labs测试 # 访问: https://www.ssllabs.com/ssltest/

12.2在线测试项目

SSL Labs: 全面的SSL/TLS配置测试 Mozilla SSL Config Generator: 生成最佳配置 CipherSuite.Info: 密码套件详细信息 Certificate Transparency: 证书透明度查看

总结

HTTPS 通过四个核心机制确保安全:

  1. 加密- 防止窃听

  2. 完整性校验- 防止篡改

  3. 身份认证- 防止冒充

  4. 不可否认性- 防止抵赖

现代 Web 开发必须使用 HTTPS,不仅是安全要求,也是:

  • SEO 排名因素(Google 优先索引 HTTPS)

  • 现代浏览器 API 的前置条件(地理位置、Service Workers等)

  • PWA 应用的基本要求

  • 用户信任的重要标志

推荐实践

  • 所有网站启用 HTTPS

  • 使用 TLS 1.2+,优先 TLS 1.3

  • 配置 HSTS 头部

  • 自动续期证书(如 Let's Encrypt)

  • 定期进行安全扫描和测试

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 21:42:59

OSG-OpenSceneGraph安装配置VS2022(全网最简单)

网上几乎所有教程都需要先下载源码进行编译&#xff0c;过程复杂繁琐&#xff0c;而且容易踩坑报错。今天出一期懒人版配置OSG方法&#xff0c;放心食用。一、下载博主已经编译好的OSG库通过百度网盘分享的文件&#xff1a;vs2022 6... 链接&#xff1a;https://pan.baidu.com/…

作者头像 李华
网站建设 2026/4/12 19:55:24

基于单片机的智能购物车设计

一、设计背景与核心需求 传统超市购物车仅具备承载功能&#xff0c;存在商品统计繁琐、找货耗时、排队结账拥堵等问题&#xff0c;影响购物效率与体验。基于单片机的智能购物车&#xff0c;融合自动识别、路径导航、结算支付等功能&#xff0c;可实现商品自动计价、智能导购、快…

作者头像 李华
网站建设 2026/4/13 11:43:39

基于单片机的防酒驾酒精检测报警装置设计

第一章&#xff1a;系统设计目标与需求分析 本装置旨在通过实时酒精浓度检测与联动控制&#xff0c;从源头预防酒驾行为&#xff0c;适用于私家车、出租车等场景。核心需求包括&#xff1a;高精度酒精检测&#xff0c;范围0-200mg/100mL&#xff08;覆盖酒驾、醉驾标准&#xf…

作者头像 李华
网站建设 2026/4/1 3:42:52

Flutter-OH SMS Autofill 插件完整使用教程

Flutter-OH SMS Autofill 插件完整使用教程 一、插件介绍 一直以来&#xff0c;大家在Flutter开发鸿蒙应用的过程中&#xff0c;其中一个热点就是三方库的使用&#xff0c; 今天我们来看一下如何在鸿蒙平台上使用sms_autofill sms_autofill 是一个强大的 Flutter 插件&…

作者头像 李华