版权声明:本文由盛旷 原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/134

来源:腾云阁 https://www.qcloud.com/community

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的原理,当然实际通信过程中还有很多细节没有说到,但是不妨碍理解原理。实际开发和生产过程中很多信息敏感的操作都可以参照这种思想来实现,文中有不合理的和错误的地方欢迎指正。

参考文章:
https://zh.wikipedia.org/wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

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

浅析HTTPS与SSL原理的更多相关文章

  1. Https之SSL原理

    一.HTTPS和SSL HTTP(Hyper TEXT Transfer Protocol超文本传输协议)是目前互联网上应用最为广泛的一种网络协议,用于在Web浏览器和网站服务器之间传递信息,但是HT ...

  2. HTTPS、SSL 原理

    1.1 背景知识 对称加密     :加密解密使用同一密钥,加解密速度快.随着人数增多,密钥数量急增n(n-1)/2. 非对称加密 :使用公私钥配对加解密,速度慢.公钥是从私钥中提取出来的,一般拿对方 ...

  3. SSL 原理及 https 配置

    目录 1. SSL 原理 1.1. SSL 简介 1.2. 主要概念 1.3. 建立安全连接的过程 2. https 配置 (以 nginx 为例) SSL 原理 SSL 简介 SSL (Secure ...

  4. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  5. 浅谈HTTPS和SSL/TLS协议的背景和基础

    相关背景知识要说清楚HTTPS协议的实现原理,至少要需要如下几个背景知识.大致了解几个基础术语(HTTPS.SSL.TLS)的含义大致了解HTTP和TCP的关系(尤其是"短连接"和 ...

  6. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  7. 好程序员带你了解一下HTTPS和SSL/TLS协议的背景与基础

    >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 TCP 的关系(尤其 ...

  8. HTTPS-使用Fiddler抓取HTTPS数据包原理

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  9. HTTPS的工作原理

    参考自<图解HTTP> 果壳网http://www.guokr.com/post/114121/ HTTPS的工作原理 增加了一层:HTTPS流程:应用层 HTTP->SSL/TLS ...

随机推荐

  1. Maven_POM配置结构

    本文转载,转载地址:http://blog.csdn.net/ithomer/article/details/9332071 <project>    <parent>     ...

  2. Hibernate- QBC查询方式

    QBC查询方式 01.基本查询 02.组合查询 03.关联查询 04.分页查询 05.QBE查询 06.离线查询

  3. A/libc:fatal signal 11(SIGSEGV).code 1, fault addr 0x0 in tid 26488 (VideoEncoder)

    在调试Camera模块:发现相同的代码在厂家提供的环境里边编译.就是ok的,在我们的源码树中编译,将HAL库推进去后.就会signal 11退出. 一.现象 F/libc ( ): Fatal sig ...

  4. javascript 复制与粘贴操作

    <script language="javascript"> function readTxt() { alert(window.clipboardData.getDa ...

  5. 浅谈 JavaScript 编程语言的编码规范

    对于熟悉 C/C++ 或 Java 语言的工程师来说,JavaScript 显得灵活,简单易懂,对代码的格式的要求也相对松散.很容易学习,并运用到自己的代码中.也正因为这样,JavaScript 的编 ...

  6. 在jsp中,page指令的()属性用来引入需要的包或类。

    在jsp中,page指令的()属性用来引入需要的包或类. A.extends B.import C.language D.contentType 解答:B

  7. VS2010 快捷键设置,快速编码1

    全屏:Shift+Alt+Enter注释选定内容:Ctrl+E+C/Crtr+E+U代码格式化:ctrl+E+F VS2008 使用小技巧——快捷键1. 怎样调整代码排版的格式?选择:编辑—>高 ...

  8. (转)c++多态实现的机制

    原文地址:http://blog.csdn.net/zyq0335/article/details/7657465 1 什么是多态?多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决 ...

  9. UI标签库专题十一:JEECG智能开发平台 DictSelect (数据字典下拉选择框)

     1. DictSelect (数据字典下拉选择框) 1.1. 參数 属性名 类型 描写叙述 是否必须 默认值 typeGroupCode string 字典分组编码 是 null field s ...

  10. Ubuntu 14.04 安装R 环境

    Introduction R is a popular open source programming language that specializes in statistical computi ...