当前位置: 首页 > news >正文

确保web安全的HTTPS

事物皆有两面性,HTTP也有不足,比如:

  • 通信使用明文,内容可能被窃听
  • 不验证通信方的身份,可能被伪装
  • 无法证明报文的完整性,可能被篡改

为了有效防止这些弊端,HTTPS就应运而生了。

HTTPS

开门见山吧,HTTPS = HTTP + 加密 + 认证 + 完整性保护

HTTPS到底是如何实现的,这是我们要重点关注的。

首先,HTTPS不是应用层的新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。

通常,HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,就是身披SSL协议这层外壳的HTTP。

这里不得不提一下SSL协议,他是独立于HTTP的协议,所以其他运行在应用层的协议都可以跟SSL配合使用。SSL是当今世界上应用最广泛的网络安全技术。

在采用SSL后,HTTP就拥有了HTTPS加密、证书、完整性保护这些功能。

谈谈加密

共享密钥加密

近代加密方法中加密算法是公开的,而密钥是保密的,加密和解密都会用到密钥,没有密钥就无法对密码解密。

加密和解密同用一个密钥的方式称为共享密钥加密(Common Key crypto system),也叫做对称密钥加密。

如果发生密钥就有被窃听的风险,但不发送,对方就不能解密,再说,密钥若能够安全发送,那数据也应该能安全送达——这是矛盾的地方。

因为上述的矛盾,共享密钥加密是不安全的。

公开密钥加密技术

SSL采用一种叫做公开密钥加密的加密处理方式。

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥保密,公开密钥可以随意发布,任何人都可以获得。发送密文的一方使用对方的公开密钥进行加密处理。对方收到被加密的信息后,在使用自己的私有密钥进行解密。无需发送私有密钥,也就断绝了被盗走的可能。

从上图可以看到,私有密钥一直存在发送密文一方的服务器上,没有发送到网络中,所以就不会被窃听。

但这样做也是有局限的,因为公开密钥加密与私有密钥加密相比,其处理速度要慢。

HTTPS采用混合加密机制

HTTPS采用共享密钥和公开密钥加密两者并用的混合加密机制。

在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

公开密钥加密处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率就很低。

证明公开密钥正确性的证书

HTTPS的加密机制看似很完美,但还是存在一个致命的缺陷,那就是公开密钥是放在网上的,使用者证明公开密钥就是货真价实的公开密钥。

比如,正准备和某台服务器建立公开密钥加密方式的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥交换途中,真正的公开密钥已经被攻击者替换掉了。

数字证书认证机构

这就要借助第三方机构了,而且这个机构,必须是大家都信任的,这就轮到数字证书认证机构上场。

服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构在判明提出申请者的身份后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端可以明确两件事:

一、认证服务器的公开密钥是真实有效的数字证书认证机构的。

二、服务器的公开密钥是值的信赖的。

这样以来,你就可以放心使用HTTPS了。

相关文章:

  • 基于echarts实时温度折线图表
  • 常量池总结
  • html2canvas用法的总结(转载)
  • Confluence 6 删除一个空间
  • 每天一个设计模式之命令模式
  • ESXi虚拟机的磁盘格式
  • Nmap的详细使用
  • js 如何判断数组元素是否存在重复项
  • Kubernetes高可用负载均衡与集群外服务访问实践
  • K8S-网络模型、POD/RC/SVC YAML 语法官方文档
  • C# 图解教程 第四章 类的基本概念
  • [译] Android 内核控制流完整性
  • codeforces 1093 题解
  • IIS 设备未就绪。
  • 性能常用指标(重点)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [译]CSS 居中(Center)方法大合集
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • C# 免费离线人脸识别 2.0 Demo
  • github从入门到放弃(1)
  • go语言学习初探(一)
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • nodejs:开发并发布一个nodejs包
  • 创建一个Struts2项目maven 方式
  • 从零开始在ubuntu上搭建node开发环境
  • 码农张的Bug人生 - 初来乍到
  • 码农张的Bug人生 - 见面之礼
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 收藏好这篇,别再只说“数据劫持”了
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 转载:[译] 内容加速黑科技趣谈
  • 移动端高清、多屏适配方案
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #if 1...#endif
  • (Note)C++中的继承方式
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)大型网站的系统架构
  • (转)重识new
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .net refrector
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET企业级应用架构设计系列之开场白
  • @Transient注解
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape
  • [docker] Docker的私有仓库部署——Harbor
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战