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/ |
2
zjqzxc 2015-12-29 10:40:50 +08:00 1
去看看什么是“非对称加密”然后就明白了
|
3
virusdefender 2015-12-29 10:42:18 +08:00 1
内容加密是采用对称加密的,双方在握手的时候确定了这个密钥,而这个密钥是通过非对称加密来加密的,为了性能。
浏览器为了确保服务器可信会验证服务器证书,也是非对称加密的一个应用,和加密解密的方向是相反的。 |
4
la0wei 2015-12-29 10:46:45 +08:00 1
"我的意思是,每个电脑都是一样的,服务器也不知道谁是谁啊"
|
5
nopy 2015-12-29 10:49:14 +08:00 via Android 1
不是不能解密,是解密的代价太大,可能需要几十年上百年的时间。
只要知道是安全的就行了。 |
6
wzxjohn 2015-12-29 10:54:00 +08:00 1
你需要的不是了解 HTTPS 的原理,而是去简单的看一下密码学,了解一下 非对称加密算法。从你的问题中可以看出你对加解密的理解还停留在 “只有双方都有密码本才能加密” 的 对称加密阶段。如果用这个思路那再白话也说不通 HTTPS 的原理的。
|
7
honeycomb 2015-12-29 11:15:45 +08:00 1
1 ,验证基于 pki 。 2 ,验证用户后,有密钥交换算法
|
8
SpicyCat 2015-12-29 11:26:24 +08:00 32
你和你朋友想聊天。
最开始你们就是直接聊天,明文传输,所有人都看得到,这是 HTTP. 然后你们觉得这样太不安全了,没有一点隐私,自然而然的,你们想给聊天内容加密。 你朋友提议:"咱们约定个密码,用这个密码加密聊天内容吧。" 你觉得不错,但是马上又发现一个问题,这个密码怎么传输?如果明文传输密码,那加密不就等于形同虚设了吗。 你朋友又提议:“你设想的是对称加密。对称加密是用一个密码或者密钥加密信息,不管谁只要知道了密钥,都能解开密文。我知道一种加密方式是非对称加密。非对称加密的密钥不是一个,而是一对,称之为公钥和私钥。公钥负责加密,私钥负责解密。用公钥加密的密文,只有对应的私钥能解。私钥在我这里妥善保存,谁都得不到,公钥我公布出去,谁都能拿到。你把我的公钥拿去,把你想的密码用公钥加密一下,然后发给我,我就知道咱们约定的密码了” 你说:“这是个好主意呀。” 于是,你先向你的朋友发出聊天邀请,你朋友回复了你,并带上了公钥,你想了个密码,然后用公钥加密,再发给朋友,你朋友用自己的私钥解密,得到了聊天用的密码,好了,现在你和你朋友安全地传输了聊天专用加密密码,你们用这个密码加密聊天信息,谁也看不到了。这叫 HTTPS 简单来说,传输内容的加密是对称加密,而对称加密用的密码是用非对称加密的形式传输的。 实际情况比这复杂,比如客户端还要验证服务器端的证书等等,但是大致流程就是这样。 |
9
yeyeye OP 已感谢以上所有……看来还要深入了解非对称加密算法才能了解……
|
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 这篇文章写的不错。 |
11
tanyuxiang 2015-12-29 12:03:27 +08:00 via Android 1
两个问题
1 你先学会抓包,解析包。 2 加密简单原理。 |
12
tiancaiamao 2015-12-29 12:07:05 +08:00 1
可以 at 一下阮一峰,这是一个能够把技术解释到非常直白的科普作家
|
13
la0wei 2015-12-29 12:09:43 +08:00 1
http://chuansong.me/n/2096079
linux 中国微信号看到的,官网反而找不到了,上面链接大概是个聚合网站的。 |
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')); ..... |
15
kacong 2015-12-29 13:48:42 +08:00 1
学习 crypto 是了解基础的必修课。
|
16
fds 2015-12-29 14:08:16 +08:00 2
是有 CA 的,你电脑上操作系统预先安装的信任证书里面有 CA 的公钥,你通过公钥跟 CA 通信,获得要访问网站的公钥,然后就可以跟网站秘密通信了。这种情况下浏览器上一般都有个绿色的对勾。
另外一种是网站自己签名的,这种情况无法验证你连接的服务器确实是你想要的网站,一般浏览器会有红色的警告。 |
19
rex1901 2015-12-29 15:04:20 +08:00 1
https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/
非对称加密的核心在于密钥分发,即握手过程。 如果懂英文,推荐你看看这篇文章,大多数的中文文章都是在描述 RSA 握手,但是现在基本都采用 ECDH 握手,在这篇文章的下部分有分部解析,有图片,非常容易理解。 |
20
Hardrain 2016-05-23 22:55:42 +08:00
数据的传输使用对称加密(一般是 AES)然后对称加密的密钥通过 RSA 或 ECDSA(椭圆曲线)等非对称加密的公钥加密后给服务器,服务器有私钥能解密之,得到对称加密密钥,从而双方可知通信内容而传输层无法得知
P.S. 以上所述仅在有可信任的 CA 或无 CA 也无 MITM(中间人攻击)的情形下 |
21
rabex 2023-08-01 17:34:02 +08:00
这个用漫画方式讲解 HTTPS 过程的,也很直观。
[howhttps.work]( https://www.howhttps.work) |