前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅析 HTTPS 与 SSL 原理

浅析 HTTPS 与 SSL 原理

原创
作者头像
腾讯云开发者社区
修改于 2017-11-03 07:35:04
修改于 2017-11-03 07:35:04
4.8K0
举报

作者:盛旷

HTTPS 是指结合 HTTP 和 SSL 来实现网络浏览器和服务器之间的安全通信。HTTPS 被融合到当今网络操作系统和网络浏览器中,它依赖于网络服务器是否支持 HTTPS 协议。本文重点是阐述 HTTPS 和 SSL 证书的原理,不涉及具体实现。在开始叙述原理之前,先明确几个网络安全方面的基础概念。

一.基础概念

1. 对称加密算法

一个对称加密算法由五个部分组成:

  • 明文:原始消息或数据
  • 加密算法
  • 密钥
  • 密文:使用密钥通过加密算法对明文计算后的结果
  • 解密算法:使用密文和相同密钥通过解密算法产生原文

2. 非对称加密算法

与对称加密算法不同的是,非对称加密算法使用的加密密钥和解密密钥是不同的。

3. 公钥密码与RSA

公钥密码属于对称加密算法中的一种,公钥密码体系中有一个公钥和一个密钥,公钥是公开给所有人使用的,密钥只有自己知道,通常公钥根据一个密钥进行加密,根据另一个密钥进行解密。

RSA公钥密码算法是公钥密码算法中的一种,RSA中的加密和解密都可以使用公钥或者私钥,但是用公钥加密的密文只能使用私钥解密,用私钥加密的密文智能使用公钥解密。

二.SSL证书的原理

这里只叙述SSL证书的原理,至于如何申请证书,如何生成证书,如何部署证书可以Google得到。在介绍SSL证书前,需要先知道证书的指纹和指纹算法。

指纹是在证书信息(证书机构,公司名,证书有效期等)后面加上一段内容,保证信息没有被修改过。具体操作是将将原来的信息通过指纹算法算法(一个hash算法)计算得到指纹与原信息一起发出去。用户收到这份数据后,首先将原信息用同样的指纹算法计算结果,将得到的结果与指纹对比,如果一致,则说明信息没有被修改过。当然这个过程是有危险的,黑客完全可以修改内容并重新通过指纹算法生成指纹。这里需要使用加密算法来解决这个隐患。

假设一个公司B company向证书机构xxx CA申请SSL证书,他会得到一张类似下面这张图的证书

B company得到这张证书后,会在与用户通信的过程中将证书发送给用户,用户首先会检测办法证书的机构,如果是大家都公认的证书机构,操作系统在出厂时会内置这个机构的机构信息和公钥,例如xxx CA,如果是一个不受信任的证书机构,应用程序(比如浏览器)会发出警告,如果是受信任的证书机构,应用程序会使用预置的xxx CA的公钥去解密最后的指纹内容和指纹算法,然后再把前面的证书内容用指纹算法计算后与指纹内容比对,由于指纹内容是由证书机构唯一的私钥加密的,因此只要比对成功说明证书是没有人被人修改过的。接下来用户就可以放心使用该公司的公钥了。

三.HTTPS的原理

HTTPS的出现是为了解决网络通信中数据传输不安全的问题,下面我们以登陆为例,先看一个网络通信最简单的过程,再一步步分析这个过程中不安全的因素以及解决办法。

1.最简单的通信过程

这个通信过程槽点太多,这样一个网络通信过程属于小学生水准,首先最明显一个错误是作为客户端如何知道给予回应一定是目标服务器,黑客可以有一百种办法来伪装这个服务器,轻轻松松就拿到用户的用户名和密码,所以图中也只能无奈的使用“某个地址”来标识服务器。为了解决这个问题,首先需要让浏览器确认对方的身份,于是有了下面的通信过程。

2.确认服务器身份

确认服务器身份就需要用到前面说过的RSA算法了,由于RSA算法有下面这几个特性,所以是可以用来唯一确认服务器身份的:

  • 私钥的唯一性
  • 私钥的保密性(只有服务器知道这个私钥)
  • 只能用公钥解密用私钥加密过的密文(对称加密算法的特点)

其中“()”里的内容是服务器用私钥加密后的内容,一般服务器会将明文加密,浏览器在收到消息后首先会用公钥解密密文,由前面特性3可以知道,公钥和解密算法是可以解出明文的,如果解不出来说明对方不是目标服务器,浏览器解密后会与明文做比对,如果比对成功,由私钥的唯一性和保密性就可以确认对方是目标服务器。然而确认服务器身份后,在向服务器发送数据的过程中,如果数据被黑客截获,我们的用户名和密码也会落入黑客之手,于是下一步我们需要对发送的数据进行加密。

3.通信内容加密

浏览器对用户名和密码用公钥进行加密,由于

  • 只能用私钥解密用公钥加密过的密文

于是密文只能由服务器用私钥解密,黑客即使拿到密文,也是无法解密的。但是在服务器向客户返回信息的过程中就出现问题了,由于公钥是公有的,任何人都可以拿到这份数据并使用公钥解密,所以这里还是存在不安全因素。于是客户和浏览器的通信过程多了一个步骤。

4.使用用户定义的对称加密算法对信息加密

为了使浏览器和服务器发出的信息都无法被别人解密,这里使用了一个对称加密算法,而算法和密钥的加密是在浏览器用公钥来加密的,这样可以保证只有服务器才能用私钥来解密这个内容,也就是保证对称加密算法和密钥只能被服务器拿到。当服务器拿到对称加密算法和密钥后,后面的通信都能使用这个对称加密算法来完成,由于对称加密算法和密钥只有客户和服务器知道,后面的通信加密过程都是无法被破解的。

到这里,基本就是HTTPS通信的整个过程了,似乎整个过程都很难被黑客破解,但是注意到前面的所有过程都默认了一个前提,那就是客户手里已经拥有公钥。公钥的获取如果只是在客户和服务器之间进行的话,是存在很大的安全隐患的,最直接的问题就是用户怎么确定拿到的公钥就是目标服务器的公钥,类似“证明‘能证明你身份’的凭证是你的”这样的命题,最好的解决办法是引入一个大家都信任的第三方来“证明这个凭证”是服务器的,于是这里就使用了SSL证书。前面提到,通过发送SSL证书服务器可以将公钥安全的交给用户,而这里的第三方就是证书机构。于是我们得到了一个完整的HTTPS通信过程。

到这里已经基本讲完了SSL证书与HTTPS的原理,当然实际通信过程中还有很多细节没有说到,但是不妨碍理解原理。实际开发和生产过程中很多信息敏感的操作都可以参照这种思想来实现,文中有不合理的和错误的地方欢迎指正。

参考文章

  1. 传输层安全协议
  2. 数字证书原理
  3. SSL/TLS协议运行机制的概述

最后,欢迎申请使用腾讯云的SSL证书 具体SSL证书使用方法参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
非常不错哦~~对称加密在于他的加密解密速度比较快~
非常不错哦~~对称加密在于他的加密解密速度比较快~
回复回复点赞举报
推荐阅读
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。
归思君
2023/10/16
2920
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
java中clone_java copyproperties
在日常编码中我们经常需要产生某个对象的副本,这里的副本并不是指向同一个对象的不同引用,而是与当前对象状态一模一样的另一个新的对象。如果使用单纯的引用赋值,会发生什么效果呢?
全栈程序员站长
2022/11/04
7710
创建型模式————原型模式(2.3)
收货地址包括姓名,电话和住址。第一次点外卖的时候需要完整的填写这些信息,但是之后点的过程基本上是不用再重新填写这些信息的。试想一下,每次下单之前都要填一遍姓名,电话,详细地址(假设省市已经定位好了)。头大.....而这个场景,正是原型模式的用武之地。
Noneplus
2019/09/24
2370
创建型模式————原型模式(2.3)
【Java编程进阶之路 05】深入探索:Java中的浅克隆与深克隆的原理与实现
在Java编程中,克隆(Cloning)是一个重要的概念,它允许创建并操作对象的副本。克隆可以分为两种类型:浅克隆(Shallow Cloning)和深克隆(Deep Cloning)。这两种克隆方式在处理对象及其引用的成员变量时有所不同。下面,将详细讨论它们之间的区别,并提供实现方法。
夏之以寒
2024/03/05
6490
使用POJO对象绑定请求参数值(6)
SpringMVC 会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值。支持级联属性
桑鱼
2020/03/18
4610
Java对象拷贝
通过Object的clone方法实现浅拷贝,通过实现cloneable接口实现拷贝。
Java开发者之家
2021/06/17
5200
【BeanUtils】自己写的BeanUtils的嵌套使用
通过这个类来返回一个bean对象的。 你给的参数是bean的class和封装的Map对象。
谙忆
2021/01/21
8090
Java序列化库protostuff介绍
protostuff是一个开箱即用的序列化库,使用非常简单,相对其它序列化库,protostuff优势在于:
心平气和
2021/09/24
4.5K0
Java 中如何实现一个像 String 一样不可变的类?
如果问你在日常开发中用到的最多的一个 Java 类是什么,阿粉敢打赌绝对是 String.class。说到 String 大家都知道 String 是一个不可变的类;虽然用的很多,那不知道小伙伴们有没有想过怎么样创建一个自己的不可变的类呢?这篇文章阿粉就带大家来实践一下,创建一个自己的不可变的类。
Java极客技术
2022/12/04
7180
Java 中如何实现一个像 String 一样不可变的类?
深入理解Java浅拷贝与深拷贝
本文将会深入探讨Java浅拷贝和深拷贝的概念,讲解它们各自的用途、使用场景以及技巧,并通过实战案例帮助读者更好地理解这两种拷贝方式的含义。
阿珍
2025/03/24
1700
深入理解Java浅拷贝与深拷贝
springmvc之使用POJO作为参数
springmvc会按请求参数名和POJO属性名进行匹配,自动为该对象填充属性值,支持级联属性。
西西嘛呦
2020/08/26
7160
springmvc之使用POJO作为参数
设计模式---原型模式
可以感受到,对象拷贝的朴素写法非常的麻烦。而且想到每一处对象拷贝都需要这样写就感觉头皮发麻。
技术文章精选
2022/11/08
1940
学习SpringMVC——说说视图解析器
  各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~)   相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注解的魅力和套路了。搭上@RequestMapping的便车,我们可以去到我们想去的地方(方法)去,借助@RequestParam、@PathVariable等我们可以得到请求中想要的参数值,最终还能够通过神奇的“return SUCCESS”到达我们的目的地。今天主要就来说说在达到目的地的路上,我们都经
JackieZheng
2018/01/16
7280
学习SpringMVC——说说视图解析器
大牧絮叨设计模式:原型模式
原型模式(Prototype)[GOF95]是一种对象的创建模式,通过给定一个参考的原型对象来指定要创建的对象的类型及数据,然后复制该对象创建更多的相同对象的方式完成对象的构建过程。
大牧莫邪
2019/07/23
3820
大牧絮叨设计模式:原型模式
好似你,饼印咁:原型模式、浅拷贝与深拷贝
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。大概意思就是:允许一个对象再创建另外一个可定制的对象,根本无需知道对象创建的细节。其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。其UML类图如下:
BUG弄潮儿
2021/01/18
3210
好似你,饼印咁:原型模式、浅拷贝与深拷贝
五分钟 掌握 原型模式
大家好,我是老田,今天我给大家分享设计模式中的原型模式。用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式。
田维常
2021/06/09
5460
五分钟 掌握 原型模式
【Java设计模式】006-原型模式
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。
訾博ZiBo
2025/01/06
710
一文带你快速了解JavaWeb中的请求响应以及Postman工具的使用!
这次来了解一下JavaWeb中请求响应相关的内容,本篇将带你快速了解JavaWeb中的请求响应以及Postman工具的使用!
reload
2024/03/22
9161
一文带你快速了解JavaWeb中的请求响应以及Postman工具的使用!
Java面向对象程序设计实验报告(实验二 面向对象基础练习)
2.编写并测试一个代表地址的Address类,地址信息由:国家,省份,城市,街道,邮编组成,并可以返回完整的地址信息。
命运之光
2024/03/20
2200
Java面向对象程序设计实验报告(实验二 面向对象基础练习)
Javaweb核心之EL表达式
EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
楠羽
2022/11/18
2850
Javaweb核心之EL表达式
相关推荐
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
更多 >
目录
  • 一.基础概念
    • 1. 对称加密算法
    • 2. 非对称加密算法
    • 3. 公钥密码与RSA
  • 二.SSL证书的原理
  • 三.HTTPS的原理
    • 1.最简单的通信过程
    • 2.确认服务器身份
    • 3.通信内容加密
    • 4.使用用户定义的对称加密算法对信息加密
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档