网络方面学的不怎么样,之前看过一本图解HTTP协议,里面有讲过SSL,现在又有点忘了,刚好在看Java Web的书,里面有提供几个思路,于是就又拿出来讲了。当然,如果以后还有新的认识的话,我再回过来改。
SSL,中文翻译过来是安全套接层,保障数据传输安全的,主要是保证数据传输的安全性,要知道http时代数据一旦截取,就是明文展示了,传输的密码也只是通过浏览器用简单的base64加密一下。而https多了这个ssl就不一样了。
现代安全通信广泛采用的加密技术就是非对称加密,这也是SSL的基本实现技术,广泛使用的加密算法是RSA算法。
加密与解密
非对称密钥一共有两个密钥,分为公钥和私钥,公钥可以随便传阅,通过公钥或者私钥加密的信息只有通过它的另一把钥匙才可以解密。要清楚一个概念,用私钥加密只有一个目的,就是认证,因为谁都可以有公钥,都可以解密。所以下面说认证。
认证
为什么要认证?
因为我们一般是客户端,要上网发数据给远程服务器什么的,最重要的是保证我们发送数据不被窃听,所以我们可以用公钥加密,那么可以解密的只有对应的私钥了(只有一把)。但问题是你怎么知道服务器传过来的公钥的主人就是这个网站呢?不可能见面验证吧。。
SSL身份验证需要引入证书。专属通常包含一下几个:
- 公钥
- 关于主题的信息,即公开密钥的所有者
- 证书的发行机构
- 证书到期时间
其实关键在3,你要有一个可信的证书颁发者,像verisign。那么具体步骤呢?就是服务器要想这个证书认证机构申请辨别真身,证书机构会要服务器提供相关身份证件复印件。到这里为止,一个第三方已经证实了服务器的身份。然后证书机构给服务器颁布证书,证书主要内容就是以上四项.而且这个证书还是用证书机构的私钥加密过的,只有证书机构的公钥才可以解密(当然证书机构的公钥广泛分布在各个浏览器,如果你这个机构比较low,可以想牛逼的机构申请验证自己的身份,让它带你玩,这样浏览器也能有你了)。
然后简单介绍认证过程
- 服务器: 我是真的,这是我的证书。看看就行了。
- 客户端: 不一定。证书虽然是真的,但我不能确定你就是证书的持有者呀。谁知道你是不是偷的。我要用证书机构的公钥解密,然后找到你的公钥,看你怎么说?
- 服务器:宝贝,真是我+[使用服务器的私钥加密这几个字,如果匹配就没话说了]
- 客户端: 嗯。欢迎欢迎。认证完成,接下来就可以用对称加密了,速度可以快不少呢!我有密码要传给你,会用你的公钥加密啊
- 服务器: 好的。我有私钥,可以解密,并且没有任何人知道。
最后
这里就简单的介绍一下,做到有个数就行,具体的https实现可能会有九个交互过程呢?还可能会出现传输数据遭到篡改,完整性缺失。具体可以看之前写的图解http的思维导图