HTTPS 原理与实现

多了 SSL 层的 HTTP 协议

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

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

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

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

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

账号:cbssfaw

密码:123djaosid

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

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

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

图片 3

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

STEP 8: 客户端解密信息

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

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

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

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

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

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

 

1 赞 收藏
评论

图片 4

STEP 5: 传送加密信息

客户端发送以下:

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

对称加密与非对称加密

对称加密

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

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

非对称加密

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

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

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 到底加密了什么?

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

原文出处:
云叔_又拍云   

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

图片 5

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

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

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

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

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

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

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

非对称加密

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

优点:安全

缺点

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

参考资料

[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 下的加密

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

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

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

HTTPS 简介

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

HTTPS 和HTTP 协议相比提供了:

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

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

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 key
    Client write MAC key 是客户端发数据的session secret
    Server write MAC secret 是服务端发送数据的session key
    MAC(Message Authentication Code)
    ,是一个数字签名,用来验证数据的完整性,可以检测到数据是否被串改。然后用证书公钥
    public_key
    对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

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

SSL/TLS

图片 6

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

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

图片 7

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注