ssl协议的身份认证和数据传输

来源:互联网 发布:wap游戏源码 编辑:程序博客网 时间:2024/05/01 23:21

关于http和https及https的加密,两者的区别还是比较好理解的:


一、https协议需要到ca申请证书,一般免费证书很少,需要交费。 

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。 

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


从程序员的角度来说,https比http多了个s,这个s是为了解决http明文传输这个缺陷的。明文传输的两个弊端是身份无法认证,数据传输不安全,而这个s就是一个相对来说很权威的解决方案,而这个s解决方案我们的确是可以自己来搭建的。先不管这样算法那样算法,先说ssl是怎么规避明文传输缺陷的。

1 身份认证

client -> server : SSL 协议的版本号,加密算法的种类等等信息。

server -> client:SSL 协议的版本号,加密算法的种类等等信息,以及自己的证书(该证书内有公钥,因为所有客户端都可以取到这把钥匙,所以叫公钥,只是个名称)。

client -> server:拿到了服务端的证书,开始验证服务端合法性,主要是看证书内容和实际情况是否吻合,比如证书域名和实际域名比较,或者用公钥来解证书内的数字签名。验证通过后,就可以进行数据传输了。

2 数据传输

client -> server:生成一个对称密钥,对请求的内容(如url及其参数)进行加密,然后用证书内的公钥对这个对称密钥再加一次密,一起发送到服务端。

server -> client:服务用自己的私匙对拿到的加过密的对称密钥解密然后用这把对称密钥对请求内容进行解密再根据请求内容执行相关的操作,请求执行完毕返回时,再次用对称密钥对返回内容加密。

client -> server:拿到服务端返回的内容时,只需要用对称密钥对其解密就可以了。


上面是一个简化简单版本的基本流程,需要注意的是:

1 公钥指公开的钥匙,即每个客户端访问都可以获得该钥匙。私钥指只有自己有的钥匙,即服务端自己保留的钥匙。那么上面的流程中,服务端有一把公钥一把私钥,公钥负责加密,私钥负责解密,这就是非对称加密。那么客户端生成的对称密钥,既自己可以加密也可以让服务端解密,密钥既能加密又能解密,这就是对称加密。

3 数字签名,在上面身份认证阶段,客户端要验证服务端的合法性,需要用公钥来解密证书内的数字签名,那么根据非对称性,对其进行加密的肯定就是服务端的私钥了。

4 CA指第三方,它只起一个监督公正的作用,它在认证过程中的实际行为其实和服务端是一样的,它负责把服务端的公钥进一步用自己的私钥加密,然后把自己的公钥发给客户端,客户端能用CA的公钥解出服务端的公钥就算是可信的。

2 这个过程,不用自己写,在javax.net.ssl包里已经封装好了请求方法。


0 0
原创粉丝点击