标签:
最近看了《http权威指南》几个章节,对HTTPS随着节,了一些资料,遂打算记录一下心得。写的仓促,肯定有非常多错误的地方,欢迎大家指正。
那么在介绍https之前,有必要先解释下http。http是一个非常easy又非常复杂的协议。说其简单,是我们每天都在用它。并且又浑然不觉。貌似非常easy的样子。可是真正可以把http全然了解清楚。并非非常容易的事情。《http权威指南》诺厚的一本书,都是http相关内容,可知有多么复杂了。
而差点儿世界上全部的HTTP通信都是由TCP/IP协议承载的,这就是我们熟悉的网络ISO七层结构和TCP/IP4层结构,在大部分的情况我们仅仅讨论TCP/IP分层结构。那么详细的訪问过程是怎么样的呢?比方我们訪问http://movie.douban.com/subject/10485647/?
from=showing 这个链接地址。那么详细包含例如以下几个过程:
主要的HTTP在web事务中是不够安全的,这也就催生了HTTPS的诞生。HTTPS是在HTTP和TCP之间加了一层传输层的password安全层-SSL或者后来普遍使用的TLS。
HTTPS协议会对web通信过程中的数据加密,杜绝了数据被窃取。整体来说还是非常安全的。尽管前不久openssl爆出了一个heartbleed漏洞,只是如今已经修复了。
HTTPS在URL中的前缀是HTTPS,默认port是443,HTTP默认port80。
因为SSL安全层的存在,HTTPS建立安全传输的过程会稍微复杂一些。HTTPclient(最经常使用的就是浏览器了)打开一条到webserverport443的连接。
一旦建立了TCP连接,client和server端就会初始化SSL层,对加密參数进行沟通并交换密钥。握手完毕后,SSL也就初始化完毕了,client就能够把请求报文发送给安全层了。
当然,这些报文发送给TCP之前,会被加密。
(SSL支持双向认证。webserver将server证书发送给client。然后再将client的证书回送给server。可是实际应用中非常多用户都没有自己的client证书。因此server也非常少会要求client证书)
主要验证步骤例如以下:
检查证书的起始时间和结束时间,以确保证书仍然有效。假设证书过期了或者还没有被激活,则证书有效性验证失败,浏览器提示错误信息。
每一个证书都是由某些证书颁发机构(CA)签发的,它们负责为server担保。
证书有不同等级。每种证书都须要不同级别的背景验证。不论什么人都能够生成证书,可是有些CA是很著名的组织。它们能够通过很清晰的流程来验证证书申请人的身份以及商业行为的合法性。因此,浏览器一般会附带一个签名颁发机构的受信列表。假设是未知机构颁发的证书,则浏览器会显示警告信息。
假设不匹配,则要么是浏览器警告用户。要么就是直接终止连接。对于虚拟主机(一台server有多个主机名)网站上的安全流量处理是比較棘手的。有些流行的webserver程序仅仅支持一个证书,假设用户请求虚拟主机名,则与证书中的主机名不匹配,这样浏览器会发出警告。
一个处理办法是在開始安全事务前,将虚拟主机域名重定向至server证书中的官方主机名。(server证书中通常仅仅包括一个主机名。但有些CA会为一组server创建一些包括了server名称列表或者通配域名的证书)
最后将这些信息(用公钥加密的随机数password,握手消息。採用HASH算法、随机数password加密的握手消息签名)发送给server。
HTTPS一般使用的加密与HASH算法例如以下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4。3DES
HASH算法:MD5,SHA1,SHA256
非对称加密算法用于之前在传递随机数password的时候用到。
对称加密算法是安全连接建立后用到。用于加快加密解密的速度。HASH算法是用于验证SSL握手过程数据完整性。SSL握手过程中假设有不论什么错误,都会使连接断开。从而阻止了隐私信息的传输。因为HTTPS非常安全,攻击者非常难找到下手的地方,于是很多其它的是採用了假证书的手法来欺骗client。这些假证书的识别方法在第2节中已经有说明。
版权声明:本文博主原创文章,博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/4803466.html