能不能有人白话文解释下 HTTPS 加密原理。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
yeyeye
V2EX    HTTP

能不能有人白话文解释下 HTTPS 加密原理。

  •  
  •   yeyeye 2015-12-29 10:35:36 +08:00 5569 次点击
    这是一个创建于 3578 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先每个电脑都有数字签名颁发机构信任列表这个我懂,其他的我就不懂了。

    主要问题没想明白(原谅我没文化!),明明 HTTPS 的数据包,也和普通的数据包一样在互联网上传输,可以说从数据包的角度考虑,它其实还是明文的,只是在于加密方式,如何加密能让传输不可破解,而且客户端本身也没有独立的加密表(我的意思是,每个电脑都是一样的,服务器也不知道谁是谁啊,又没有特别的标示?而且也没有对应每个计算机生成一个加密表,可以互相对应。)

    所以如何实现的“内容加密”,同时“双方都能解密”,又同时“传输层被截取无法解密”。

    这个问题我想了很多次,每次都觉得除非服务器和客户端互相有对方的“加密表”(绝对不能在网上传输这个表内容),而且要是独立的,才能实现加密,互相可解密,传输层被截取也无法解密和伪造。
    21 条回复    2023-08-01 17:34:02 +08:00
    maemual
        1
    maemual  
       2015-12-29 10:40:46 +08:00   2
    本质上是,传输的数据是经过对称加密的,客户端和服务端都有这个密钥。但是这个密钥是在 HTTPS 的握手阶段生成的,通过非对称加密进行交换的。

    发几篇最近在看的文章。

    https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/

    https://cattail.me/tech/2015/11/30/how-https-works.html

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/
    zjqzxc
        2
    zjqzxc  
       2015-12-29 10:40:50 +08:00   1
    去看看什么是“非对称加密”然后就明白了
    virusdefender
        3
    virusdefender  
       2015-12-29 10:42:18 +08:00   1
    内容加密是采用对称加密的,双方在握手的时候确定了这个密钥,而这个密钥是通过非对称加密来加密的,为了性能。

    浏览器为了确保服务器可信会验证服务器证书,也是非对称加密的一个应用,和加密解密的方向是相反的。
    la0wei
        4
    la0wei  
       2015-12-29 10:46:45 +08:00   1
    "我的意思是,每个电脑都是一样的,服务器也不知道谁是谁啊"
    nopy
        5
    nopy  
       2015-12-29 10:49:14 +08:00 via Android   1
    不是不能解密,是解密的代价太大,可能需要几十年上百年的时间。

    只要知道是安全的就行了。
    wzxjohn
        6
    wzxjohn  
       2015-12-29 10:54:00 +08:00   1
    你需要的不是了解 HTTPS 的原理,而是去简单的看一下密码学,了解一下 非对称加密算法。从你的问题中可以看出你对加解密的理解还停留在 “只有双方都有密码本才能加密” 的 对称加密阶段。如果用这个思路那再白话也说不通 HTTPS 的原理的。
    honeycomb
        7
    honeycomb  
       2015-12-29 11:15:45 +08:00   1
    1 ,验证基于 pki 。 2 ,验证用户后,有密钥交换算法
    SpicyCat
        8
    SpicyCat  
       2015-12-29 11:26:24 +08:00   32
    你和你朋友想聊天。
    最开始你们就是直接聊天,明文传输,所有人都看得到,这是 HTTP.
    然后你们觉得这样太不安全了,没有一点隐私,自然而然的,你们想给聊天内容加密。
    你朋友提议:"咱们约定个密码,用这个密码加密聊天内容吧。"
    你觉得不错,但是马上又发现一个问题,这个密码怎么传输?如果明文传输密码,那加密不就等于形同虚设了吗。
    你朋友又提议:“你设想的是对称加密。对称加密是用一个密码或者密钥加密信息,不管谁只要知道了密钥,都能解开密文。我知道一种加密方式是非对称加密。非对称加密的密钥不是一个,而是一对,称之为公钥和私钥。公钥负责加密,私钥负责解密。用公钥加密的密文,只有对应的私钥能解。私钥在我这里妥善保存,谁都得不到,公钥我公布出去,谁都能拿到。你把我的公钥拿去,把你想的密码用公钥加密一下,然后发给我,我就知道咱们约定的密码了”
    你说:“这是个好主意呀。”
    于是,你先向你的朋友发出聊天邀请,你朋友回复了你,并带上了公钥,你想了个密码,然后用公钥加密,再发给朋友,你朋友用自己的私钥解密,得到了聊天用的密码,好了,现在你和你朋友安全地传输了聊天专用加密密码,你们用这个密码加密聊天信息,谁也看不到了。这叫 HTTPS

    简单来说,传输内容的加密是对称加密,而对称加密用的密码是用非对称加密的形式传输的。
    实际情况比这复杂,比如客户端还要验证服务器端的证书等等,但是大致流程就是这样。
    yeyeye
        9
    yeyeye  
    OP
       2015-12-29 11:51:14 +08:00
    已感谢以上所有……看来还要深入了解非对称加密算法才能了解……
    looyao
        10
    looyao  
       2015-12-29 12:00:39 +08:00   1
    我的简单理解:通过非对称 RSA 算法来交换一个对称加密 AES 或者 RC4 算法的 key ,之后就用 AES 或者 RC4 来发送加密数据了。每次建立的链接的 key 都是随机的。

    http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
    这篇文章写的不错。
    tanyuxiang
        11
    tanyuxiang  
       2015-12-29 12:03:27 +08:00 via Android   1
    两个问题
    1 你先学会抓包,解析包。
    2 加密简单原理。
    tiancaiamao
        12
    tiancaiamao  
       2015-12-29 12:07:05 +08:00   1
    可以 at 一下阮一峰,这是一个能够把技术解释到非常直白的科普作家
    la0wei
        13
    la0wei  
       2015-12-29 12:09:43 +08:00   1
    http://chuansong.me/n/2096079
    linux 中国微信号看到的,官网反而找不到了,上面链接大概是个聚合网站的。
    maxsec
        14
    maxsec  
       2015-12-29 13:31:07 +08:00   2
    浏览器连接 www.taobao.com>
    > hello, taobao, random tick is 8274
    服务器:
    > hello, random tick is 3122, My certificate which contains public key is in bellow:
    > ----BEGIN CERTIFICATE----
    > ....
    > ----END CERTIFICATE----
    浏览器:
    > hello, random tick is rsa_encrypt(pubkey_from_cert,7461)
    服务器:
    > okay, we've don all ssl handshake progress, let's have a talk...
    浏览器:
    > aes_encryption( 'give me your /images/campaign.jpg', 8274-3122-7461);
    服务器:
    > aes_encryption( file_get_contents('/images/campaign.jpg'));


    .....
    kacong
        15
    kacong  
       2015-12-29 13:48:42 +08:00   1
    学习 crypto 是了解基础的必修课。
    fds
        16
    fds  
       2015-12-29 14:08:16 +08:00   2
    是有 CA 的,你电脑上操作系统预先安装的信任证书里面有 CA 的公钥,你通过公钥跟 CA 通信,获得要访问网站的公钥,然后就可以跟网站秘密通信了。这种情况下浏览器上一般都有个绿色的对勾。
    另外一种是网站自己签名的,这种情况无法验证你连接的服务器确实是你想要的网站,一般浏览器会有红色的警告。
    GavinHao
        17
    GavinHao  
       2015-12-29 14:53:12 +08:00 via Android   1
    @SpicyCat 通俗,给你赞
    ooTwToo
        18
    ooTwToo  
       2015-12-29 14:59:13 +08:00   1
    @SpicyCat 懂了!
    rex1901
        19
    rex1901  
       2015-12-29 15:04:20 +08:00   1
    https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/
    非对称加密的核心在于密钥分发,即握手过程。
    如果懂英文,推荐你看看这篇文章,大多数的中文文章都是在描述 RSA 握手,但是现在基本都采用 ECDH 握手,在这篇文章的下部分有分部解析,有图片,非常容易理解。
    Hardrain
        20
    Hardrain  
       2016-05-23 22:55:42 +08:00
    数据的传输使用对称加密(一般是 AES)然后对称加密的密钥通过 RSA 或 ECDSA(椭圆曲线)等非对称加密的公钥加密后给服务器,服务器有私钥能解密之,得到对称加密密钥,从而双方可知通信内容而传输层无法得知
    P.S. 以上所述仅在有可信任的 CA 或无 CA 也无 MITM(中间人攻击)的情形下
    rabex
        21
    rabex  
       2023-08-01 17:34:02 +08:00
    这个用漫画方式讲解 HTTPS 过程的,也很直观。
    [howhttps.work]( https://www.howhttps.work)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1069 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:11 PVG 02:11 LAX 11:11 JFK 14:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86