澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

毕竟加密了哪些,https加密原理

HTTPS 到底加密了什么?

2018/07/03 · 基础技术 · HTTPS

原文出处: 云叔_又拍云   

关于 HTTP 和 HTTPS 这个老生常谈的话题,我们之前已经写过很多文章了,比如这篇《从HTTP到HTTPS再到HSTS》,详细讲解了 HTTP 和 HTTPS 的进化之路,对的没错,就是 HTTP 兽进化 HTTPS 兽。

图片 1

那么今天我们主要聊一聊 HTTPS 到底加密了些什么内容。

先跟大家讲个故事,我初恋是在初中时谈的,我的后桌。那个时候没有手机这类的沟通工具,上课交流有三宝,脚踢屁股、笔戳后背以及传纸条,当然我只能是那个屁股和后背。

说实话传纸条真的很危险,尤其是这种早恋的纸条,被抓到就是一首《凉凉》。

于是我和我的小女朋友就商量一下加密这个小纸条上面的数据,这样就算被班主任抓到她也奈何不了我们!

我们用将英文字母和数字一一对应,组成一个密码本,然后在小纸条上写上数字,要将他翻译成对应的字母,在拼成拼音才能知道这串数字意思。

上面就是最初我坎坷的感情史。

后来等我长大了,才知道这是回不去的美好。如果给我一个机会,我愿意……啊呸,跑偏了,等长大了才知道,这个就是现在网站数据传输中的 HTTPS。

总结HTTPS

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,

会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

 

http(超文本传输协议)

一种属于应用层的协议

缺点:

  1. 通信使用明文(不加密),内容可能会被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能已遭篡改

优点:

  1. 传输速度快

HTTP

HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP是采用明文形式进行数据传输,极易被不法份子窃取和篡改。

HTTPS 简介

在日常互联网浏览网页时,我们接触到的大多都是 HTTP 协议,这种协议是未加密,即明文的。这使得 HTTP 协议在传输隐私数据时非常不安全。因此,浏览器鼻祖 Netscape 公司设计了 SSL(Secure Sockets Layer) 协议,用于对 HTTP 协议传输进行数据加密,即 HTTPS 。

HTTPS 和HTTP 协议相比提供了:

  • 数据完整性:内容传输经过完整性校验
  • 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
  • 身份认证:第三方无法伪造服务端(客户端)身份

SSL 目前版本是 3.0,之后升级为了 TLS(Transport Layer Security) 协议,TLS 目前为 1.2 版本。如未特别说明,SSL 与 TLS 均指同一协议。

多了 SSL 层的 HTTP 协议

简而言之,HTTPS 就是在 HTTP 下加入了 SSL 层,从而保护了交换数据隐私和完整性,提供对网站服务器身份认证的功能,简单来说它就是安全版的 HTTP。

现在随着技术的发展,TLS 得到了广泛的应用,关于 SSL 与 TLS 的差别,我们不用在意,只要知道 TLS 是 SSL 的升级版本就好。
图片 2
一般来说,HTTPS 主要用途有三个:一是通过证书等信息确认网站的真实性;二是建立加密的信息通道;三是数据内容的完整性。
图片 3

上文为又拍云官网,我们可以通过点击浏览器地址栏锁标志来查看网站认证之后的真实信息,SSL证书保证了网站的唯一性与真实性。

那么加密的信息通道又加密了哪些信息呢?

签发证书的 CA 中心会发布一种权威性的电子文档——数字证书,它可以通过加密技术(对称加密与非对称加密)对我们在网上传输的信息进行加密,比如我在 Pornhub 上输入:

账号:cbssfaw

密码:123djaosid

可是这个数据被黑客拦截盗窃了,那么加密后,黑客得到的数据可能就是这样的:

账号:çµø…≤¥ƒ∂ø†®∂˙∆¬

密码:∆ø¥§®†ƒ©®†©˚¬

图片 4

最后一个就是验证数据的完整性,当数据包经过无数次路由器转发后会发生数据劫持,黑客将数据劫持后进行篡改,比如植入羞羞的小广告。开启HTTPS后黑客就无法对数据进行篡改,就算真的被篡改了,我们也可以检测出问题。

HTTPS和HTTP的区别:

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS和HTTP的区别主要为以下四点:

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

 

https

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL (安全套接字层)和TLS (安全传输层协议)代替而已。即添加了加密及认证机制的 HTTP 称为 HTTPS ( HTTP Secure )。

HTTP 加密 认证 完整性保护 = HTTPS

使用两把密钥的公开密钥加密

公开密钥加密使用一对非对称的密钥。一把叫做私钥,另一把叫做公钥。私钥不能让其他任何人知道,而公钥则可以随意发布,任何人都可以获得。使用公钥加密方式,发送密文的一方使用对方的公钥进行加密处理,对方收到被加密的信息后,再使用自己的私钥进行解密。利用这种方式,不需要发送用来解密的私钥,也不必担心密钥被攻击者窃听而盗走。

HTTPS

HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。

HTTPS主要作用是:

  1. 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
  2. 对网站服务器进行真实身份认证。

所以HTTPS其实是有两部分组成:HTTP SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

下图说明了HTTPS的流程:

图片 5

HTTPS流程

  1. 客户端发起HTTPS请求
    用户在浏览器里输入一个https网址,然后连接到server的443端口。
  2. 服务端的配置
    采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。
  3. 传送证书
    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
  4. 客户端解析证书
    这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
  5. 传送加密信息
    这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务段解密信息
    服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
  7. 传输加密后的信息
    这部分信息是服务段用私钥加密后的信息,可以在客户端被还原
  8. 客户端解密信息
    客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

HTTPS 工作原理

对称加密与非对称加密

对称加密

对称加密是指加密与解密的使用同一个密钥的加密算法。小编初中的时候传纸条使用了同一套加密密码,所以我用的加密算法就是对称加密算法。

目前常见的加密算法有:DES、AES、IDEA 等

非对称加密

非对称加密使用的是两个密钥,公钥与私钥,我们会使用公钥对网站账号密码等数据进行加密,再用私钥对数据进行解密。这个公钥会发给查看网站的所有人,而私钥是只有网站服务器自己拥有的。

目前常见非对称加密算法:RSA,DSA,DH等。

HTTPS工作原理:

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下:

 

  1. 浏览器将自己支持的一套加密规则发送给网站。
  2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  3. 获得网站证书之后浏览器要做以下工作:
  • 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
  • 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
  • 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

   4.  网站接收浏览器发来的数据之后要做以下的操作:

  • 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
  • 使用密码加密一段握手消息,发送给浏览器。

   5.  浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

 

这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • HASH算法:MD5,SHA1,SHA256

其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。

TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,于是更多的是采用了假证书的手法来欺骗客户端,从而获取明文的信息,但是这些手段都可以被识别出来,我将在后续的文章进行讲述。不过2010年还是有安全专家发现了TLS 1.0协议处理的一个漏洞:毕竟加密了哪些,https加密原理。,实际上这种称为BEAST的攻击方式早在2002年就已经被安全专家发现,只是没有公开而已。目前微软和Google已经对此漏洞进行了修复。见: 

HTTPS简化版的工作原理也可以参见《对称加密与非对称加密 》。

过程

①服务器把自己的公钥登录至数字证书认证机构。
②数字证书机构把自己的私有密钥向服务器的公开密码部署数字签名并颁发公钥证书。
③客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签名。以确认服务器公钥的真实性。
④使用服务器的公开密钥对报文加密后发送。
⑤服务器用私有密钥对报文解密。

HTTPS的原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:

  1. 浏览器将自己支持的一套加密规则发送给网站。
  2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  3. 浏览器获得网站证书之后浏览器要做以下工作:
    1. 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
    2. 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
    3. 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
  4. 网站接收浏览器发来的数据之后要做以下的操作:
    1. 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
    2. 使用密码加密一段握手消息,发送给浏览器。
  5. 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
![](https://upload-images.jianshu.io/upload_images/1802251-cb755b6a2fc3737c.png)

HTTPS原理

网络通信(握手过程)

此图非常详尽的描述了 HTTPS 在通讯过程中的原理,总共分为 8 步。

图片 6

Https 原理

HTTPS=数据加密 网站认证 完整性验证 HTTP

通过上文,我们已经知道,HTTPS 就是在 HTTP 传输协议的基础上对网站进行认证,给予它独一无二的身份证明,再对网站数据进行加密,并对传输的数据进行完整性验证。

HTTPS 作为一种加密手段不仅加密了数据,还给了网站一张身份证。

如果让我回到十年前,那么我一定会这样跟我的女朋友传纸条:

先准备一张独一无二的纸条,并在上面签上我的大名,然后用只有我女朋友可以解密的方式进行数据加密,最后写完后,用胶水封起来,防止隔壁桌的小王偷看修改小纸条内容。

 

1 赞 收藏 评论

图片 7

HTTPS通信的步骤

①客户端发送报文进行SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(加密算法及密钥长度等)。
②服务器应答,并在应答报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接受到的客户端加密组件内筛选出来的。
③服务器发送报文,报文中包含公开密钥证书。
④服务器发送报文通知客户端,最初阶段SSL握手协商部分结束。
⑤SSL第一次握手结束之后,客户端发送一个报文作为回应。报文中包含通信加密中使用的一种被称Pre-master secret的随机密码串。该密码串已经使用服务器的公钥加密。
⑥客户端发送报文,并提示服务器,此后的报文通信会采用Pre-master secret密钥加密。
⑦客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够完成成功,要以服务器是否能够正确解密该报文作为判定标准。
⑧服务器同样发送Change Cipher Spec报文。
⑨服务器同样发送Finished报文。
⑩服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。
⑪应用层协议通信,即发送HTTP响应。
⑫最后由客户端断开链接。断开链接时,发送close_nofify报文。

TLS/SSL工作原理

TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

图片 8

TLS/SSL工作原理

结合三类算法的特点,TLS的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。

STEP 1: 客户端发起HTTPS 请求

SSL 连接总是由客户端启动,在 SSL 会话开始时,执行 SSL 握手。用户在浏览器里输入一个https 网址,然后连接到server 的443 端口。
客户端发送以下:

  • 列出客户端密支持的加密方式列表(以客户端首选项顺序排序),如 SSL 的版本、客户端支持的加密算法和客户端支持的数据压缩方法(Hash 算法)。
  • 包含 28 字节的随机数,client_random

以下是 Wireshark 抓包所得

Transmission Control Protocol, Src Port: 28258 (28258), Dst Port: 443 (443), Seq: 1, Ack: 1, Len: 517
    Source Port: 28258
    Destination Port: 443
    [Stream index: 13]
    [TCP Segment Len: 517]
    ......
Secure Sockets Layer
    TLSv1 Record Layer: Handshake Protocol: Client Hello
        // 握手记录
        Content Type: Handshake (22)
        // 0x0301 可以看出 TLS 是基于 SSL 3.1 构建而来
        Version: TLS 1.0 (0x0301)  
        Length: 512
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 508
            Version: TLS 1.2 (0x0303)
            Random
                GMT Unix Time: Jun 20, 2025 23:30:57.000000000 �й���׼ʱ��
                // 28 字节随机数 client_random
                Random Bytes: 12154d457c935c162fb8c0062572a5f84639b06289c51bf2...
            Session ID Length: 32
            // 可能为空,如果之前登陆过,则可以恢复之前的会话,避免一个完整的握手过程
            Session ID: c958100d8b678c0b071b54e977b456c06a233c08b9e2dd42...    
            Cipher Suites Length: 34
            // 密文族,列举浏览器所支持的加密算法清单
            Cipher Suites (17 suites)    
                Cipher Suite: Unknown (0xcca9)
                Cipher Suite: Unknown (0xcca8)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc14)
                Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcc13)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
                // 推荐使用
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)    
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
                Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
                Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
            Compression Methods Length: 1
            Compression Methods (1 method)
                Compression Method: null (0)
            Extensions Length: 401
            Extension: renegotiation_info
                Type: renegotiation_info (0xff01)
                Length: 1
                Renegotiation Info extension
                    Renegotiation info extension length: 0
            Extension: server_name
                Type: server_name (0x0000)
                Length: 36
                Server Name Indication extension
                    Server Name list length: 34
                    Server Name Type: host_name (0)
                    Server Name length: 31
                    // 允许服务器对浏览器的请求授予相应的证书。
                    Server Name: images-cn.ssl-images-amazon.com    
            Extension: Extended Master Secret
                Type: Extended Master Secret (0x0017)
                Length: 0
            Extension: SessionTicket TLS
                Type: SessionTicket TLS (0x0023)
                Length: 192
                Data (192 bytes)
            Extension: signature_algorithms
                Type: signature_algorithms (0x000d)
                Length: 18
                Signature Hash Algorithms Length: 16
                // Hash 算法,用于签名
                Signature Hash Algorithms (8 algorithms)    
                    Signature Hash Algorithm: 0x0601
                        Signature Hash Algorithm Hash: SHA512 (6)
                        Signature Hash Algorithm Signature: RSA (1)
                    Signature Hash Algorithm: 0x0603
                        Signature Hash Algorithm Hash: SHA512 (6)
                        Signature Hash Algorithm Signature: ECDSA (3)
                    Signature Hash Algorithm: 0x0501
                        Signature Hash Algorithm Hash: SHA384 (5)
                        Signature Hash Algorithm Signature: RSA (1)
                    Signature Hash Algorithm: 0x0503
                        Signature Hash Algorithm Hash: SHA384 (5)
                        Signature Hash Algorithm Signature: ECDSA (3)
                    Signature Hash Algorithm: 0x0401
                        Signature Hash Algorithm Hash: SHA256 (4)
                        Signature Hash Algorithm Signature: RSA (1)
                    Signature Hash Algorithm: 0x0403
                        Signature Hash Algorithm Hash: SHA256 (4)
                        Signature Hash Algorithm Signature: ECDSA (3)
                    Signature Hash Algorithm: 0x0201
                        Signature Hash Algorithm Hash: SHA1 (2)
                        Signature Hash Algorithm Signature: RSA (1)
                    Signature Hash Algorithm: 0x0203
                        Signature Hash Algorithm Hash: SHA1 (2)
                        Signature Hash Algorithm Signature: ECDSA (3)
            Extension: status_request
                Type: status_request (0x0005)
                Length: 5
                Certificate Status Type: OCSP (1)
                Responder ID list Length: 0
                Request Extensions Length: 0
            Extension: signed_certificate_timestamp
                Type: signed_certificate_timestamp (0x0012)
                Length: 0
                Data (0 bytes)
            Extension: Application Layer Protocol Negotiation
                Type: Application Layer Protocol Negotiation (0x0010)
                Length: 14
                ALPN Extension Length: 12
                ALPN Protocol
                    ALPN string length: 2
                    ALPN Next Protocol: h2
                    ALPN string length: 8
                    ALPN Next Protocol: http/1.1
            Extension: channel_id
                Type: channel_id (0x7550)
                Length: 0
                Data (0 bytes)
            Extension: ec_point_formats
                Type: ec_point_formats (0x000b)
                Length: 2
                EC point formats Length: 1
                Elliptic curves point formats (1)
                    EC point format: uncompressed (0)
            Extension: elliptic_curves
                Type: elliptic_curves (0x000a)
                Length: 8
                Elliptic Curves Length: 6
                Elliptic curves (3 curves)
                    Elliptic curve: Unknown (0x001d)
                    Elliptic curve: secp256r1 (0x0017)
                    Elliptic curve: secp384r1 (0x0018)
            Extension: Padding
                Type: Padding (0x0015)
                Length: 77
                Padding Data: 000000000000000000000000000000000000000000000000...
                    Padding length: 0
                    Padding Data: <MISSING>

一、什么是HTTPS

在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。目前TLS的版本是1.2,定义在RFC 5246中,暂时还没有被广泛的使用。
n

HTTPS和HTTP的区别

  1. HTTPS是加密传输协议,HTTP是明文传输协议;
  2. HTTPS需要用到SSL证书,而HTTP不用;
  3. HTTPS比HTTP更加安全,对搜索引擎更友好
  4. HTTPS标准端口443,HTTP标准端口80;
  5. HTTPS基于传输层,HTTP基于应用层;
  6. HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
  7. HTTPS传输过程中需要加密、解密,所以HTTPS的性能比不上HTTP。

总的来说HTTPS比HTTP更加安全,能够有效的保护网站用户的隐私信息安全,这也是为什么现在的HTTPS网站越来越多。

STEP 2: 服务端的配置

采用HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。
** 如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。** 客户端和服务器至少必须支持一个公共密码对,否则握手失败。服务器一般选择最大的公共密码对。

二、HTTPS到底安全吗?

这个答案是肯定的,很安全。谷歌公司已经行动起来要大力推广HTTPS的使用,在未来几周,谷歌将对全球所有本地域名都启用HTTPS,用户只要在搜索前用Google帐号登录,之后所有的搜索操作都将使用TLS协议加密,
n

STEP 3: 传送证书

服务器端返回以下:

  • 服务器端选出的一套加密算法和 Hash 算法
  • 服务器生成的随机数 server_random
  • SSL 数字证书(服务器使用带有 SSLX.509 V3 数字证书),这个证书包含网站地址,公钥 public_key ,证书的颁发机构,过期时间等等。
Transmission Control Protocol, Src Port: 443 (443), Dst Port: 28258 (28258), Seq: 1, Ack: 518, Len: 137
    Source Port: 443
    Destination Port: 28258
    [Stream index: 13]
    [TCP Segment Len: 137]
    Sequence number: 1    (relative sequence number)
    [Next sequence number: 138    (relative sequence number)]
    Acknowledgment number: 518    (relative ack number)
    Header Length: 20 bytes
    Flags: 0x018 (PSH, ACK)
    ......
Secure Sockets Layer
    TLSv1 Record Layer: Handshake Protocol: Server Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 81
        Handshake Protocol: Server Hello
            Handshake Type: Server Hello (2)
            Length: 77
            Version: TLS 1.0 (0x0301)
            Random
                GMT Unix Time: Mar  1, 2090 17:07:25.000000000 �й���׼ʱ��
                // 28 字节的随机数 server_random
                Random Bytes: 903945ed14db8e4151d651814ed7067c0e9c115d94ff6af7...    
            Session ID Length: 32
            Session ID: c958100d8b678c0b071b54e977b456c06a233c08b9e2dd42...
            // 加密族中,服务器最终选择了这个。意味着服务器之后会使用 RSA 公钥加密算法来区分证书签名和交换密钥,通过 3DES 加密算法来加密数据,通过 SHA 算法来校验信息
            Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)    
            Compression Method: null (0)
            Extensions Length: 5
            Extension: renegotiation_info
                Type: renegotiation_info (0xff01)
                Length: 1
                Renegotiation Info extension
                    Renegotiation info extension length: 0
    TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
        Content Type: Change Cipher Spec (20)
        Version: TLS 1.0 (0x0301)
        Length: 1
        Change Cipher Spec Message
            [Expert Info (Note/Sequence): This session reuses previously negotiated keys (Session resumption)]
                [This session reuses previously negotiated keys (Session resumption)]
                [Severity level: Note]
                [Group: Sequence]
    TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 40
        Handshake Protocol: Encrypted Handshake Message

三、HTTPS的工作原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的简单描述如下:
1.浏览器将自己支持的一套加密规则发送给网站。
2.网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3.获得网站证书之后浏览器要做以下工作:

a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。

b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。

c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
4.网站接收浏览器发来的数据之后要做以下的操作:

a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

毕竟加密了哪些,https加密原理。b) 使用密码加密一段握手消息,发送给浏览器。
5.浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。
TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,于是更多的是采用了假证书的手法来欺骗客户端,从而获取明文的信息,但是这些手段都可以被识别出来,我将在后续的文章进行讲述。不过2010年还是有安全专家发现了TLS 1.0协议处理的一个漏洞:http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/。
实际上这种称为BEAST的攻击方式早在2002年就已经被安全专家发现,只是没有公开而已。目前微软和Google已经对此漏洞进行了修复。见:http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643

STEP 4: 客户端解析证书

这部分工作是由客户端的TLS 来完成的。

  1. 首先会验证证书是否有效,这是对服务端的一种认证,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
  2. 如果证书没有问题,那么浏览器根据步骤 3 的 server_random 生成一个随机值 premaster_secret (前 2 个字节是协议版本号,后 46 字节是用在对称加密密钥的随机数字)和 master_secret 。 master_secret 的生成需要 premaster_key ,并需要 client_randomserver_random 作为种子

    master_secret = PRF(pre_master_secret, "master secret", client_random   server_random)
    

    现在,各方面已经有了主密钥 master_secret ,根据协议约定,我们需要利用PRF 生成这个会话中所需要的各种密钥,称之为“密钥块”(Key Block ):

    key_block = PRF(SecurityParameters.master_secret, "key expansion", SecurityParameters.server_random   SecurityParameters.client_random);
    密钥块用于构成以下密钥:
    client_write_MAC_secret[SecurityParameters.hash_size]
    server_write_MAC_secret[SecurityParameters.hash_size]
    client_write_key[SecurityParameters.key_material_length]
    server_write_key[SecurityParameters.key_material_length]
    client_write_IV[SecurityParameters.IV_size]
    server_write_IV[SecurityParameters.IV_size]
    

    这是由系列 Hash 值组成,它将作为数据加解密相关的Key Material ,包含六部分内容,分别是用于校验一致性的密钥,用于对称内容加解密的密钥,以及初始化向量,客户端和服务器端各一份。其中,write MAC key ,就是session secret 或者说是session keyClient write MAC key 是客户端发数据的session secretServer write MAC secret 是服务端发送数据的session keyMAC(Message Authentication Code) ,是一个数字签名,用来验证数据的完整性,可以检测到数据是否被串改。然后用证书公钥 public_key 对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

  3. Hash 握手信息,用第3步返回约定好的 Hash 算法对握手信息取 Hash 值,然后用随机数加密“握手消息 握手消息 Hash 值(签名)”

STEP 5: 传送加密信息

客户端发送以下:

  • 客户端发送公钥 public_key 加密的 premaster secret 。目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

STEP 6: 服务端解密信息

服务端用私钥 private_key 解密后,得到了客户端传过来的随机值 premaster_secret(私钥),又由于服务器在步骤 1 中收到的 client_random ,所以服务器根据相同的生成算法,在相同输入参数的情况下,得到相同的 master_secret 。然后把内容通过该值进行对称加密。
所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

STEP 7: 传输加密后的信息

服务器端返回以下:
将被 premaster_key 对称加密的信息返回客户端,客户端可还原

STEP 8: 客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

SSL/TLS

图片 9

TCP/IP协议栈中TLS各子协议和HTTP的关系

HTTPS 可以认为是 HTTP TLS。TLS 是传输层加密协议TLS 协议本身又是由 record 协议传输的,record 协议的格式如下图

图片 10

general-format-of-all-TLS-records

TLS 协议主要有五种类型 Content Type:
Content types

Hex Dec Type
0x14 20 加密消息确认协议 ChangeCipherSpec
0x15 21 报警协议 Alert
0x16 22 握手协议 Handshake
0x17 23 应用数据层协议 Application
0x18 24 心跳协议 Heartbeat

加密方式

加密算法一般分为对称加密与非对称加密。

对称加密

客户端与服务器使用相同的密钥对消息进行加密
优点:

  • 加密强度高,很难被破解
  • 计算量小,仅为非对称加密计算量的 0.1%

缺点:

  • 无法安全的生成和管理密钥
  • 服务器管理大量客户端密钥复杂

非对称加密

非对称指加密与解密的密钥为两种密钥。服务器提供公钥,客户端通过公钥对消息进行加密,并由服务器端的私钥对密文进行解密。

优点:安全

缺点

  • 性能低下,CPU 计算资源消耗巨大,一次完全的 TLS 握手,密钥交换时的非对称加密解密占了整个握手过程的 90% 以上。而对称加密的计算量只相当于非对称加密的 0.1%,因此如果对应用层使用非对称加密,性能开销过大,无法承受。
  • 非对称加密对加密内容长度有限制,不能超过公钥的长度。比如现在常用的公钥长度是 2048 位,意味着被加密消息内容不能超过 256 字节。

HTTPS 下的加密

HTTPS一般使用的加密与HASH算法如下:

  • 非对称加密算法:RSADSA/DSS
  • 对称加密算法:AESRC43DES
  • HASH算法:MD5SHA1SHA256

其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。
TLS握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的传输。正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,于是更多的是采用了假证书的手法来欺骗客户端,从而获取明文的信息,但是这些手段都可以被识别出来

关于证书

证书需要申请,并由专门的数字证书认证机构 CA 通过非常严格的审核之后颁发的电子证书,证书是对服务器端的一种认证。颁发的证书同时会产生一个私钥和公钥。私钥有服务器自己保存,不可泄露,公钥则附带在证书的信息中,可以公开。证书本身也附带一个证书的电子签名,这个签名用来验证证书的完整性和真实性,防止证书被篡改。此外证书还有个有效期。
证书包含以下信息:

  • 使用者的公钥值。
  • 使用者标识信息(如名称和电子邮件地址)。
  • 有效期(证书的有效时间)。
  • 颁发者标识信息。
  • 颁发者的数字签名,用来证明使用者的公钥和使用者的标识符信息之间的绑定的有效性。

参考资料

[1] Wiki 关于 Transport Layer Security 的介绍,https://en.wikipedia.org/wiki/Transport_Layer_Security
[2] 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理 http://op.baidu.com/2015/04/https-s01a01/
[3] SSL工作原理 https://www.wosign.cn/Basic/howsslwork.htm
[4] SSL/TLS协议运行机制的概述 http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
[5] HTTPS工作原理,猫尾博客,https://cattail.me/tech/2015/11/30/how-https-works.html
[6] HTTPS那些事(一)HTTPS原理,晓风残月,http://www.guokr.com/post/114121/
[7] HTTPS证书生成原理和部署细节,小胡子哥,http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:毕竟加密了哪些,https加密原理