zoukankan      html  css  js  c++  java
  • 私钥、公钥与https

    HTTP的安全缺陷

    • 通信内容不加密,导致被窃听
    • 不验证客户端和服务端的身份,导致:
      • 服务器伪装
      • 响应返回到了其他的客户端
      • 海量恶意连接
    • 无法证明报文的完整性,导致:请求和响应内容被篡改,这称为中间人攻击

    公钥加密技术

    • 使用私钥加密的内容,使用公钥解密,反之,使用公钥加密的内容,使用私钥解密
    • 服务器生成公钥和私钥,私钥自己保存,公钥对外公开
    • 客户端发送请求之前,使用公钥进行加密——由于私钥是服务器私有,即使被截获也无法解密
    • 反过来,服务器发送响应之前:
      • 对消息执行hash算法,生成摘要
      • 对摘要使用私钥加密,生成数字签名
      • 将消息和数字信息一起发送到客户端
      • 客户端用公钥解密数字签名,得到摘要
      • 客户端对消息执行hash算法,与摘要比对,验证消息的真伪
      • 如果消息被截获,摘要被解密,由于没有私钥,也就无法生成能用公钥解密的摘要,这样就保证了消息的正确性、完整性,以及服务器的真实性。
    • 该过程的漏洞在于:如何防止有人篡改公钥,也就是如何保证公钥的真实性
      • 解决:通过CA(数字证书认证),将服务器公钥、用到的hash算法、CA机构信息等,通过CA的私钥加密成数字证书
      • 之后服务器发送的消息,都附上数字证书
      • 浏览器收到数字证书,用CA的公钥解密,拿到服务器的公钥
      • 再将机构信息与本机机构列表比对,验证公钥的真实性
      • 如果有人伪造公钥,甚至获得了CA的私钥,其证书中的信息、hash算法等内容也很难与真实网站完全一致。

    SSL和HTTPS

    • 上述过程仅单向安全,用私钥加密的信息,也就是服务器发出的信息不安全
      • 解决办法:先用上述流程验证公钥的真实性,这个过程称为握手
      • 在客户端生成随机对称密钥
      • 对密钥用公钥加密,发送到服务端,这样就保证了密钥传输的安全性
    • 之后全部双向传输都使用对称密钥加密解密
    HTTPS建立连接的流程
    • 上述过程就是SSL
    • HTTP+SSL/TLS=HTTPS
  • 相关阅读:
    套题 codeforces 361
    hdu 5720
    套题 codeforces 360
    套题 codeforces 359
    套题 bestcoder 84
    hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)
    观django-messages包笔记
    django form
    省份、城市、区县三级联动Html代码
    django perm用法
  • 原文地址:https://www.cnblogs.com/pangjianxin/p/11669745.html
Copyright © 2011-2022 走看看