https服务

较之于平常一般网页的http访问,除非是银行、政府机关或者其它对于安全性要求比较高的机构才会采用https服务,因为它所要付出的成本是比较高的。先看看二者的区别:

  1. https协议需要到ca申请证书,一般免费证书很少,需要交费。
  2. http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

从区别可以看出,对于诸如银行的企业来说,用户的数据和交易信息都是非常敏感的,容不得第三方的窃取,毕竟如得逞后果是非常严重的。所以必须要采用走https的方案来保证数据传输的安全,那么这里面会涉及建立连接之前的证书验证,密钥交换,过程中的信息加密解密等等,这必然会带来效率上的下降,当然从大局上看效率上的牺牲对于保证安全来说是值得的。所以,对于一般性的网站,只需要采用http就行了,方便快捷!

接下来我想再笔记下,用户在请求https服务的网站所经过的流程。再延伸一点,https服务其实就是工作在TLS/SSL上的http,而TLS/SSL则是一个公钥/私钥的结构。对于公钥/私钥的概念在之前的文章就介绍过, 在这里

我就以访问百度为例吧(话说以前访问度娘都是http的),下面的图是网上找的,请自行忽略地址栏的url。当我请求这个百度地址的时候,如图:

Alt text

百度服务器收到了我的url请求了过后,它会把它的证书和公钥发送给我,如图:

Alt text

这里面提到了证书,它是防止第三方中间人介入的认证,我客户端就是根据这个来知晓对方服务器是正常的,不是人家伪造的。对于数字证书更多的知识,比如如何申请、本身的构成部分可自行wiki哈。如图:

Alt text

此时我们已经拿到了服务器发过来的公钥,为了以后跟服务器进行加密通信,我需要跟服务器协商出一个密钥(这个密钥就是对称密钥了,注意区别哦),所以我这边就使用公钥加密了一个随机对称密钥(假设是RSA算法)包括用它加密的URL一起发送到服务器。

Alt text

接着服务器应该会收到我发给它的一串加密信息,然后它用它的私钥把它解密打开,看到了里面的内容(哦,里面是让我们用RSA算法的对称钥加密数据呀)。服务器紧接着用看到的对称钥解密了我刚发过来的url请求,然后把请求得到的结果用对称钥加密后,通过服务器的私钥再包裹这个用对称钥加密的结果发送给我!

Alt text

自此会话密钥协商成功,双方以后就可以用同一份会话密钥来通信了,这次清楚了吧~