HTTP的安全缺陷

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

公钥加密技术

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

SSL和HTTPS

  • 上述过程仅单向安全,用私钥加密的信息,也就是服务器发出的信息不安全

    • 解决办法:先用上述流程验证公钥的真实性,这个过程称为握手
    • 在客户端生成随机对称密钥
    • 对密钥用公钥加密,发送到服务端,这样就保证了密钥传输的安全性
  • 之后全部双向传输都使用对称密钥加密解密
HTTPS建立连接的流程
  • 上述过程就是SSL
  • HTTP+SSL/TLS=HTTPS

私钥、公钥与https的更多相关文章

  1. Linux使用私钥公钥(Public key)登录 - 免密码登录

    为了更安全.方便的登录Linux服务器,可以取消密码登录,使用私钥公钥的方式来登录,更方便也更安全. 生成密钥 借助Xshell可以很方便的生成和管理私钥,点击工具菜单,选择新建用户密钥生成向导: 直 ...

  2. 比特币--私钥->公钥->钱包地址

    脑钱包-字符串SHA256散列成256bit当做私钥-彩虹表 脑钱包是开源的程序-->用户输入字符串当做密码-->经过SHA256散列算法-->256长bit位 (即是私钥)--&g ...

  3. openssl rsa 私钥 PKCS8私钥 公钥

    上文配置好 openssl 运行 => cmd => cd C:\usr\local\ssl\bin => 执行 openssl

  4. windows 下 openssl 生成RSA私钥公钥以及PKCS8

    生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...

  5. 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。

    一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...

  6. 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)

    参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461 ...

  7. RSA不对称加密和公钥 私钥

    理论上只要有加密的规则 基本都是可以解密的 但是如果解密需要消耗的时间过长 比如1000年 解密过后已经没什么意义了 此时可认为这种算法不能被破解 也就是说此加密可信 MD5 是一种单向操作 加密后不 ...

  8. 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名

    ------------------- 这是自己总结: 支付宝SDK支付用到的公钥与私钥整理如下: 1.商户应用公钥    2.商户应用私钥 3.支付宝公钥 4.支付宝私钥   商户应用的公钥与私钥生 ...

  9. AI学习吧-公钥私钥、沙箱环境

    公钥私钥 公钥.私钥 可以互相解密 应用:数字签名和加密数据 数字签名:使用私钥加密,公钥解密 加密数据:使用公钥加密,私钥解密泄密时:当有人拿走了你的公钥,你可以到CI证书中心,使用你的私钥和公钥办 ...

随机推荐

  1. nrm : 无法加载文件 C:\Users\TANG\AppData\Roaming\npm\nrm.ps1,因为在此系统上禁止运行脚本。

    1.win+s 搜索powershell 以管理身份运行 2.使用set-ExecutionPolicy RemoteSigned命令将计算机上的执行策略更改为 RemoteSigned,输入Y确定 ...

  2. eclipse springboot工程打war包方法及在Tomcat中运行的方法

    一, eclipse springboot打war包 1. 配置pom.xml文件 <packaging>war</packaging> <!-- 配置servlet,打 ...

  3. cocos2dx3.x + xcode7.3 问题“libpng error: CgBI: unhandled critical chunk”

    今天用 cocos2dx3.11.1 + xcode7.3.1 进行开发,新建项目后遇到如下问题: 在iphone(ios9.3.5)真机运行项目(用xcode自带虚拟机没有出现问题) auto sp ...

  4. 201871010124-王生涛《面向对象程序设计(java)》第十五周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  5. 第一个java小程序

    程序名:MyFirstJavaProgram.java //package com.example; public class MyFirstJavaProgram { public static v ...

  6. python SSL 错误

    python 使用pip 安装模块是提示SSL错误 出现该问题的原因由于系统的openssl是1.0.1的版本,对于python3.7太老了,需要更新为openssl1.0.2或者libressl2. ...

  7. python 爬虫之-- 正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. 正则表达式非python独有,python 提供了正则表达式的接口,re模块 一.正则匹配字符简介 模式 描述 \d ...

  8. 《Ensemble Methods: Foundations and Algorithms》

    <Ensemble Methods: Foundations and Algorithms>

  9. Python进阶-Ⅸ 递归 二分法

    1.算法 英文名:algorithm,就是计算的方法.# 是截止到目前,人类发现的针对特定场景的,最优的计算方法.是人类智慧的结晶.# 人脑是复杂的,电脑其实很简单.比如: 999 * 123 人类会 ...

  10. Log-Structured Merge Tree (LSM Tree)

    一种树,适合于写多读少的场景.主要是利用了延迟更新.批量写.顺序写磁盘(磁盘sequence access比random access快). 背景 回顾数据存储的两个“极端”发展方向 加快读:加索引( ...