SSL server 发数据到client 用的啥加密方法?

时间:2022-03-24 13:09:00
client 用public key加密数据发送到server,server 用private key 解密,这个过程即使数据被hacker窃取 因他没有private key,所以也是徒劳.
但是反过来server 发送敏感数据到client 的时候用啥加密?
应该不是用public key加密吧?
我猜应该是用某种对称加密方法,是不?那问题就出来了,hacker窃取到数据用对称解密,不就完蛋了吗。
查了 蒋老和国外很多网站的说法,都没有说到server->client的加密方法。
求高人指教  好的答复追加分

7 个解决方案

#1


ssl并不规定加密算法,所以要具体情况具体看。

ssl用的加密算法,公钥私钥,证书等等都视握手协议而定

google SSL Handshake Protocol

#2


引用 1 楼 caozhy 的回复:
ssl并不规定加密算法,所以要具体情况具体看。

ssl用的加密算法,公钥私钥,证书等等都视握手协议而定

google SSL Handshake Protocol

 谢谢 答复   我先研究下握手协议

#3


client 用public key加密数据发送到server,...

一般不用RSA public key来直接加密数据,因为RSA慢,而且有长度限制(小于Key的长度)。
RSA可以用来传递一个密码(第三方无法知道),该密码用来加密 随后的通讯。

’随后的通讯‘可以包括server->client或client->server的传输。

#4


一般是这样的

公钥是对外开放的,公钥加密的字符可以通过私钥来解密出原字符

私钥只有自己知道,不对外的,用作解密公钥加密的字符,同时也可以用作加密字符,私钥加密的字符,公钥是没有办法解密的,但可以验证是否为私钥加密的字符,这个过程我们称之为签名和验证签名

#5


打个比喻,某天有人打电话给你,说是你的领导,让你给他汇款10万给他,那么你是否会照做呢?

所以先要有个验证对方身份是否真实,一个是电话号码,二个是确认涵之类的,总之要先确保对方身份,如果是真的就照办,假的就不用理会,所以私钥的加密作用就在于此,它会加密一个字符串,给你验证,如果通过(告诉你真的是你老板这边过来的指令),就按照明文(不加密的字符)执行

#6


引用 3 楼 gomoku 的回复:
client 用public key加密数据发送到server,...

一般不用RSA public key来直接加密数据,因为RSA慢,而且有长度限制(小于Key的长度)。
RSA可以用来传递一个密码(第三方无法知道),该密码用来加密 随后的通讯。

’随后的通讯‘可以包括server->client或client->server的传输。

“传递一个密码” 是指2个证书都能识别的密码吗是由公钥生成的还是私钥生成的?
这样就是说每个链接都有唯一的一个密码(加解密速度很快不需要经过一系列的数学算法对吧)

#7


下面是建立一个SSL连接的一个示例(具体方式和字节数可以不同),其中
第一列是字节数,第二列式传输方向(客户在左边,服务在右边),第三列是内容

62 --> SYNC
62 <-- SYNC+ACK
60 --> ACK

167 --> Client Hello
907 <-- Server Hello (包括Server的证书)
380 --> Client Key Exchange (可选包含客户证书,选择加密规范,加密握手)
113 <-- Change Cipher Spec 
155 --> App Data (TSL1.0)
267 <-- App Data (TSL1.0)

前三行是TCP握手;
Hello Client要求建立SSL安全连接;
Hello Server中,服务返回了证书。客户可以验证服务证书,并用证书中的公钥,加密一个会话密码。
Client Key Exchange 把加密的会话密码传回。可选的客户证书可以让服务端验证客户。
Change Cipher Spec 服务方用私钥可以得到会话密码,并开始加密通讯。

因此,在上述例子中
建立SSL只需要一个证书(客户证书是可选的)。
会话密码由客户随机产生,并用公钥加密传给服务端。
只有服务端可以用私钥得到会话密码。

具体的加密规范可以由双方在Key Exchange/Change Cipher Spec中完成。比如可以指定具体的加密算法用RC4(以前非常常用)等。



#1


ssl并不规定加密算法,所以要具体情况具体看。

ssl用的加密算法,公钥私钥,证书等等都视握手协议而定

google SSL Handshake Protocol

#2


引用 1 楼 caozhy 的回复:
ssl并不规定加密算法,所以要具体情况具体看。

ssl用的加密算法,公钥私钥,证书等等都视握手协议而定

google SSL Handshake Protocol

 谢谢 答复   我先研究下握手协议

#3


client 用public key加密数据发送到server,...

一般不用RSA public key来直接加密数据,因为RSA慢,而且有长度限制(小于Key的长度)。
RSA可以用来传递一个密码(第三方无法知道),该密码用来加密 随后的通讯。

’随后的通讯‘可以包括server->client或client->server的传输。

#4


一般是这样的

公钥是对外开放的,公钥加密的字符可以通过私钥来解密出原字符

私钥只有自己知道,不对外的,用作解密公钥加密的字符,同时也可以用作加密字符,私钥加密的字符,公钥是没有办法解密的,但可以验证是否为私钥加密的字符,这个过程我们称之为签名和验证签名

#5


打个比喻,某天有人打电话给你,说是你的领导,让你给他汇款10万给他,那么你是否会照做呢?

所以先要有个验证对方身份是否真实,一个是电话号码,二个是确认涵之类的,总之要先确保对方身份,如果是真的就照办,假的就不用理会,所以私钥的加密作用就在于此,它会加密一个字符串,给你验证,如果通过(告诉你真的是你老板这边过来的指令),就按照明文(不加密的字符)执行

#6


引用 3 楼 gomoku 的回复:
client 用public key加密数据发送到server,...

一般不用RSA public key来直接加密数据,因为RSA慢,而且有长度限制(小于Key的长度)。
RSA可以用来传递一个密码(第三方无法知道),该密码用来加密 随后的通讯。

’随后的通讯‘可以包括server->client或client->server的传输。

“传递一个密码” 是指2个证书都能识别的密码吗是由公钥生成的还是私钥生成的?
这样就是说每个链接都有唯一的一个密码(加解密速度很快不需要经过一系列的数学算法对吧)

#7


下面是建立一个SSL连接的一个示例(具体方式和字节数可以不同),其中
第一列是字节数,第二列式传输方向(客户在左边,服务在右边),第三列是内容

62 --> SYNC
62 <-- SYNC+ACK
60 --> ACK

167 --> Client Hello
907 <-- Server Hello (包括Server的证书)
380 --> Client Key Exchange (可选包含客户证书,选择加密规范,加密握手)
113 <-- Change Cipher Spec 
155 --> App Data (TSL1.0)
267 <-- App Data (TSL1.0)

前三行是TCP握手;
Hello Client要求建立SSL安全连接;
Hello Server中,服务返回了证书。客户可以验证服务证书,并用证书中的公钥,加密一个会话密码。
Client Key Exchange 把加密的会话密码传回。可选的客户证书可以让服务端验证客户。
Change Cipher Spec 服务方用私钥可以得到会话密码,并开始加密通讯。

因此,在上述例子中
建立SSL只需要一个证书(客户证书是可选的)。
会话密码由客户随机产生,并用公钥加密传给服务端。
只有服务端可以用私钥得到会话密码。

具体的加密规范可以由双方在Key Exchange/Change Cipher Spec中完成。比如可以指定具体的加密算法用RC4(以前非常常用)等。