Socket应用编程实验(3)

Socket应用编程实验(3)

SSL原理

比如,Alice 和 Bob 要互相通讯,为了安全,他们希望双方发送的数据都是经过加密的。这就要求双方有一个共同的加解密密钥(一般加密都是基于对称加密算法)。如何才能让双方都拥有同一个密钥呢?

第一种方案: 由一方生成发送给另一方就行了。

这就带来另一个问题,如何保证这个传送的密钥是安全的?

SSL 实现了通过非对称的RSA加解密原理实现密钥的交换(这个密钥是对称的DES密钥)。

我们假设Alice 是服务器端,Bob是客户端,然后还有一个可信任的第三方 Caroline。

Alice首先生成一个 RSA 公私钥对,然后再由这个可信的第三方,用自己的私钥(为了便于描述,称为 CA_PRIVATE_KEY) 把这个 DES 密钥连同 RSA 公钥一起签发一个客户端证书(后面叫 CLIENT_CERT),这个证书中同时也包含一对签名。

Alice 会把 CA 证书(CA证书中包含 CA_PRIVATE_KEY 对应的公钥,后面叫 CA_CERT) 连同 CLIENT_CERT 一起发送给客户端。

客户端可以由其他途径获取这两个证书,比如由专门的安全设备中导入到本地。同时 RSA 私钥(CLIENT_PRIVATE_KEY)也会一起下发到客户端。

客户端首先用 CA_CERT 对CLINENT_CRET 做验签。(用CA的公钥 ,验证CA私钥加密后的证书),以确保数据确实是由 Alice发出来的。如果验签能过,其实就已经说明 Bob 已经认证了 Alice的身份。

CLIENT_CERT包含服务器的公钥,Bob用这个公钥对一个对称的DES密钥加密,然后可以公开发布。只有Alice 才有 CLIENT_PRIVATE_KEY,只有Alice才能解密出来这个DES密钥。完成了对称密钥的交换。

下图和上述原理描述有一定出入

客户机发出安全会话请求(HTTPS:// someserver.org/somedata.html)
---------------------------------------------------------->
服务器发送X.509 证书(包含服务器的公用密钥)
<----------------------------------------------------------
客户端用已知的CA列表来认证证书(如果不知道CA,浏览器会让用户选择自担风险接受证书。)
------------------------------------------------------------
客户机生成随机对称密钥,并用服务器的公用密钥加密。
------------------------------------------------------------>
 客户机和服务器都知道了对称密钥,并用它来加密会话期间的最终用户数据。
<----------------------------------------------------------->

大部分时候到这里,SSL通讯前的握手已经完成了,可以进行安全的数据通讯了。不过有时候会有双向认证的需求,也就是Alice 也想认证 Bob。这个时候CLIENT_PRIVATE_KEY(RSA私钥)就发生作用了,Bob会用这个私钥自己生成签名,然后发给Alice来认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值