SSL/TLS
本文最后更新于 55 天前,如有失效请评论区留言。

SSL 简介

HTTP 的问题

http的问题

  • 明文传输不安全
  • 被窃听:中途窃听
  • 被篡改:中途篡改
  • 被伪装/冒充:冒充目标服务站点

如何解决:使用SSL(数据加密协议,保证数据传输安全)

  • 防窃听:整个数据包全都加密(你尽管拿,包你看不懂)
  • 防篡改:hash校验保证完整性(类似于hash校验)
    • 服务端:hash响应包得到digest摘要
    • 服务端:用私钥加密digest得到signature
    • 客户端:公钥解开signature,包重新hash与digest对比,验证是否被篡改。
  • 防伪装:CA机构协助认证服务端密钥

SSL 核心原理

CA机构:提供数字证书(CA私钥加过密的服务端公钥)

前置准备

  • 服务端制备密钥对:公钥私钥
  • 服务端公钥送往CA中心
  • CA中心用自己的私钥加密服务端公钥,得到数字证书
  • CA的数字证书返回服务端

请求过程

  • 客户端发起ssl请求(第一次握手)
  • 服务端将signatrue,数字证书发给客户端(第二次握手)
  • 客户端向CA机构请求验证数字证书,CA机构CA公钥
  • 客户端用CA公钥解密数字证书,得到服务端公钥,用服务端公钥解密signature,得到响应包的hash值
  • 客户端再次hash数据包,对比自己得到的hash值和signature中得到的hash值,验证数据包是不是原始数据包。

非对称加密

非对称加密:一组密钥对(公钥,私钥)

  • 公钥加密,私钥解密;私钥加密,公钥解密
  • 优点:公钥公开,私钥自己持有,安全性高(只要不泄露私钥)
  • 缺点:加解密速度慢,不适合大规模集群

对称加密:一个密钥,即加解又解密

  • 优点:加解密效率高
  • 缺点:某一方泄露就不安全了

SSL 协议使用的加密方式

  • 第一阶段:通过非对称加密方式建立连接,传输对称加密密钥
  • 第二阶段:通过对称加密传输数据

SSL 完整通信流程

单向验证

验证方:仅客户端验证服务端真假。

流程如下:

非对称加密连接阶段

  1. 客户端发起ssl请求
  2. 服务端返回一个包,及包的signature,CA数字证书
  3. 客户端用验证CA证书是否合法

约定对称加密阶段

  1. 客户端提供对称加密算法列表
  2. 服务端选择对称加密算法(明文返回)
  3. 客户端生成对称加密密钥(随机),用服务端公钥加密后发给服务端
  4. 服务端用私钥解密获得对称加密密钥

传输数据阶段

  • 双方都有了对称加密密钥,基于此建立对称加密信道,传输数据。

双向认证

验证方:客户端、服务端互相验证身份。
应用场景:使用于严格验证身份场景、交易、敏感数据传输
核心组件:

  • 服务端:服务端CA数字证书,服务端私钥公钥对
  • 客户端:客户端CA数字证书,客户端私钥公钥对

流程如下:(客户端,服务端各需要一套公私钥对)

非对称加密连接阶段

  1. 客户端发起ssl请求
  2. 服务端返回一个包,及包的signature,CA数字证书
  3. 客户端验证CA证书是否合法
  4. 客户端将自己的证书发送给服务端
  5. 服务端校验客户端证书,获得客户端公钥

约定对称加密阶段

  1. 客户端提供对称加密算法列表
  2. 服务端选择对称加密算法(密文返回)
  3. 客户端生成对称加密密钥(随机),用服务端公钥加密后发给服务端
  4. 服务端用私钥解密获得对称加密密钥

传输数据阶段

  • 双方都有了对称加密密钥,基于此建立对称加密信道,传输数据。

总结:无论单向还是双向,前面节点是非对称,后续通信的环节都是对称

TLS 协议

TLS:TLS是SSL更安全的版本,SSL已经被废弃,TLS最新的是1.3版本。
命名习惯:由于 SSL 这一术语更为常用,所以我们通常仍将我们的安全证书称作 SSL。

挟持网站模拟

原理:http协议下,通过代理访问,代理上可任意源站静态代码。
解决:ssl 证书

证书部署

单点配置

申请证书:CA平台自动生成密钥对,无需服务端自备。
部署配置:

[root@rockylinux ssl_key]# cat /etc/nginx/conf.d/www.conf 
server {
    listen 443 ssl;
    server_name www.xxx.com 192.168.71.16;
    ssl_certificate /etc/nginx/ssl_key/server.crt;
    ssl_certificate_key /etc/nginx/ssl_key/server.key;

    location / {
        root /code;
        index index.html;
    }
}

集群配置

配置思路:

  • 在负载均衡上配置ssl证书
  • 静态web走http协议
  • 动态web走https协议
  • 配置80转443

注意:动态web场景下,客户端https访问,负载均衡转发为http协议

  • 导致客户端/服务端协议不一致
  • 导致跨域

解决方案:

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
        # 开启https模式
        fastcgi_param HTTPS on;
        include        fastcgi_params;
    }
含义:
通过设置 fastcgi_param HTTPS on;,就可以让后端的应用知道这个http请求实际上原始是一个HTTPS请求。
版权声明:除特殊说明,博客文章均为cuckooyang原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇