Https详解

一、对称加密和非对称加密

1.1 对称加密

对称加密算法的核心特点是加密和解密使用同一个密钥。

  • AES(Advanced Encryption Standard)‌:一种更先进的对称加密算法,支持128位、192位和256位密钥长度,具有更高的安全性和更快的处理速度,是目前广泛使用的标准。

工作原理:对称加密算法通常采用分组加密的方式,将明文划分为固定长度的块(如64位或128位),然后通过多轮变换(如置换、异或、移位等)生成密文。解密过程则是加密的逆操作

优点‌:

  • 算法公开,计算量小,加密速度快,适合处理大量数据。
  • 技术成熟,实现简单

缺点‌:

  • 密钥管理困难,每对用户都需要共享唯一的密钥,导致密钥数量呈几何级数增长。
  • 分布式网络系统中使用成本较高安全性依赖于密钥的保密性

1.2 非对称加密

非对称加密需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密

优缺点非对称加密算法的保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远慢于对称加密。

  • RSA 是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥

二、CA和数字证书

2.1 CA

CA(Certificate Authority,证书颁发机构)‌是一种具有权威性的第三方实体,负责颁发、验证和管理数字证书。

2.2 证书

2.2.1 介绍

2.2.1.1 中间证书

数字证书是一种电子文档,遵循X.509标准,由CA中心颁发,用于在互联网通信中验证通信实体的身份,确保数据的完整性和安全性。

包含内容:申请者公钥、持有者信息(域名、组织等)、证书有效期、CA的签名等。

作用:验证身份(如确认网站归属)和加密通信(如HTTPS)。

2.2.1.2 根证书

在密码学和计算机安全领域中,根证书是未被签名的公钥证书或自签名的证书。根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。

从技术上讲,证书其实包含三部分,用户的信息,用户的公钥,还有CA中心对该证书里面的信息的签名。

验证一份证书A的真伪(即验证CA中心对该证书信息的签名是否有效),需要用CA 中心的公钥验证,而CA中心的公钥存在于对这份证书A进行签名的证书B内,故需要下载该证书B,但使用该证书B验证又需先验证该证书B本身的真伪,故又要用签发该证书的证书C来验证,这样一来就构成一条证书链的关系,这条证书链在哪里终结呢?

答案就是根证书,根证书是一份特殊的证书,它的签发者是它本身,下载根证书就表明您对该根证书以下所签发的证书都表示信任,而技术上则是建立起一个验证证书信息的链条,证书的验证追溯至根证书即为结束。所以说用户在使用自己的数字证书之前必须先下载根证书。

‌根证书不是一个包含公钥、颁发机构签名和其他元数据的文件‌‌。

2.2.2 证书在服务端的应用

2.2.2.1 申请证书
  1. 生成密钥对:服务器生成私钥(需保密)和公钥。
  2. 创建CSR(证书签名请求):包含公钥和服务器信息(如域名)。
  3. 向CA提交CSR,CA验证身份后签发证书(加入了有效期)。
2.2.2.2 配置服务器
  1. 将证书和私钥部署到服务器(如Nginx/Apache)。
  2. 启用HTTPS,配置SSL/TLS协议版本、加密套件等。
  • 示例(Nginx配置):
server {
    listen 443 ssl;
    server_name example.com;  # 绑定的域名

    # 证书和私钥路径(需替换为实际路径)
    ssl_certificate /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;

    # 优化 SSL/TLS 配置
    ssl_protocols TLSv1.2 TLSv1.3;     # 指定协议版本
    ssl_ciphers HIGH:!aNULL:!MD5;      # 指定加密套件
    ssl_prefer_server_ciphers on;      # 优先使用服务器端的加密套件

    # 其他配置(如反向代理、静态文件路由等)
    location / {
        root /var/www/html;
        index index.html;
    }
}
2.2.2.3 客户端验证流程
  • 客户端访问服务器时,服务器返回证书。
  • 客户端验证证书有效性(信任链、有效期、域名匹配等)。
  • 验证通过后,使用证书中的公钥加密数据,建立安全连接(如TLS握手)。

2.2.3 证书在客户端的应用

客户端证书用于向服务器证明自身身份,常见于双向认证场景:

(但是如果不需要双向认证的话,只需要下载CA的根证书验证服务器证书即可)

2.2.3.1 申请客户端证书
  • 用户生成密钥对,提交CSR给CA(或企业内部CA)。
  • CA验证用户身份后签发证书(如员工VPN访问权限)。
2.2.3.2 安装证书
  • 将证书和私钥导入客户端设备(如浏览器、邮件客户端)。
  • 部分场景需设置密码保护私钥。
2.2.3.3 身份验证流程
  • 服务器要求客户端提供证书。
  • 客户端发送证书,服务器验证其有效性(签名、吊销状态等)。
  • 验证通过后授权访问资源。

2.2.4 其他注意事项

1.信任链与根证书

  • 客户端内置信任的根证书列表,若CA的根证书不在其中,证书会被标记为不安全。
  • 中间证书用于桥接根证书和终端证书,需正确配置证书链。

2.证书吊销

  • 若私钥泄露或证书无效,CA通过CRL或OCSP协议吊销证书。
  • 客户端应检查吊销状态以增强安全性。

3.自签名证书

  • 用于测试或内部环境,需手动信任,但缺乏公共CA的广泛认可。

4.格式与转换

  • 证书格式包括PEM(文本格式)、DER(二进制)、PKCS#12(.pfx/.p12,含私钥)等。
  • 工具如OpenSSL可用于格式转换和管理。

三、综合应用-Https

3.1 Https介绍

3.2 Https工作流程

HTTPS 基于 TLS/SSL 协议,其核心流程分为以下步骤:

握手阶段(非对称加密)

  1. 客户端向服务器发起 HTTPS 请求,包含支持的 TLS 版本、加密套件(Cipher Suites)和一个随机数(Client Random)。
  2. 服务器返回选择的 TLS 版本、加密套件、证书(包含公钥)和一个随机数(Server Random)。
  3. 客户端验证证书:是否由可信 CA 签发(通过 CA 的根证书验证签名)。证书是否在有效期内。证书的域名是否与请求的域名匹配。若验证失败,浏览器会提示风险。
  4. 生成会话密钥(Pre-Master Secret):
  5. 客户端生成一个随机数(Pre-Master Secret),用服务器的公钥加密后发送给服务器。
  6. 生成对称密钥:客户端和服务器通过 Client Random + Server Random + Pre-Master Secret 生成相同的对称会话密钥(Session Key)。

数据传输阶段(对称加密)

  1. 后续所有通信均使用生成的 Session Key 进行对称加密(如 AES),确保高效加密传输。

3.3 工作中最佳实践

3.3.1 服务器配置

1.使用强加密套件:优先选择 ECDHE 密钥交换和 AES-GCM 加密算法,禁用弱算法(如 RSA 密钥交换、SHA-1)。

# Nginx 示例配置
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;

2.启用 HSTS(HTTP Strict Transport Security):强制浏览器使用 HTTPS,防止降级攻击。

# Nginx 示例配置
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

3.定期更新证书:使用自动化工具(如 Certbot)管理 Let’s Encrypt 证书,避免过期。

4.禁用旧版协议:禁用 TLS 1.0/1.1,仅支持 TLS 1.2/1.3。

# Nginx 示例配置
ssl_protocols TLSv1.2 TLSv1.3;

3.3.2 注意事项

  • 避免硬编码密钥:私钥应存储在安全位置(如密钥管理系统),禁止提交到代码仓库
  • 证书链完整性:部署证书时包含完整的中间证书链,避免客户端无法验证。
  • 启用 OCSP Stapling:减少客户端验证证书时的延迟,提升性能。

启用OCSP Stapling的nginx示例:

ssl_stapling on;
ssl_stapling_verify on;

四、相关问题

4.1 强制浏览器使用 HTTPS,防止降级攻击中降级攻击是指什么?

降级攻击形式

  • SSL 剥离(SSL Stripping)
  • 协议降级:强制客户端和服务端使用旧版 TLS(如 TLS 1.0),利用旧协议的已知漏洞(如 POODLE)。
  • 加密套件降级:强制使用弱加密算法(如 RC4、DES)。
  • 证书降级:诱导用户接受无效或自签名证书(如点击浏览器警告忽略风险)。

SSL剥离的攻击步骤

用户首次访问网站时可能未启用 HSTS,浏览器允许 HTTP 回退。

  1. 用户尝试访问 https://example.com
  2. 攻击者(中间人)劫持请求,将 https 替换为 http,并伪造一个 HTTP 版本的网站。
  3. 用户与攻击者建立的 HTTP 连接中,所有数据(如密码、Cookie)均以明文传输,被攻击者窃取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值