赞
踩
HTTPS是最常见的HTTP安全版本,HTTPS将HTTP协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得HTTPS不仅很安全,而且很灵活,很容易在出于无序状态的、分散的全球互联网上进行管理
HTTPS就是在安全的传输层上发送HTTP。HTTPS在将位加密的HTTP报文发送给TCP之前,先将其发送给了一个安全层,对其进行加密。
现在,安全HTTP是可选的。因此,对Web服务器发起请求时,我们需要有一种方式来告知Web服务器去执行HTTP的安全版本。这是在URL的方案中实现的:
http
,比如:http://www.xxx.comhttps
,比如:https://www.bao.com/eee请求一个客户端对某Web资源执行某事务时,它会去检测URL的方案:
- SSL是一个复杂的二进制协议。我们基本上都是通过一些开源的库来编写SSL客户端和服务器。
- OpenSSL是SSL和TLS最常见的开源实现。OpenSSL项目由一些志愿者合作开发,目标是开发一个强壮的、具有完备功能的商业级工具集,以实现SSL和TLS协议以及一个全功能的通用加密库
在未加密HTTP中,客户端会打开一条到Web服务器端口80的TCP连接,发送一条请求报文,接收一条响应报文,关闭连接。(见下图a)
由于SSL安全层的存在,HTTPS中这个过程会比较复杂一点。在HTTPS中,客户端首先打开一条到Web服务器端口443(默认)的连接。一旦建立了TCP连接,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。握手完成之后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层了。在将这些报文发送给TCP之前,要先对其进行加密。(见下图b)
在发送已加密的HTTP报文之前,客户端和服务器要进行一次SSL握手,在这个握手过程中,它们要完成如下工作:
在通过网络传输任何已加密的HTTP数据之前,SSL已经发送了一组握手数据来建立通信连接了,下图显示了SSL握手的基本思想
SSL支持双向认证,将服务器证书承载回客户端,再将客户端的证书回收给服务器。现在,服务器很少会请求客户端证书了,但是安全的HTTPS事务总是要求使用服务器证书。
服务器证书是一个显示了组织的名称、地址、服务器DNS域名以及其他信息的X.509 v3派生证书。客户端可以检测证书,以确认所有信息都是可信的
通过HTTPS建立了一个安全Web事务之后,现代的浏览器都会自动获取所连接服务器的数字证书。如果服务器没有证书,安全连接就会失败。
浏览器收到证书时会对签名颁发机构进行检测,如果这个机构是很有权威的公共签名机构,浏览器可能已经知道其公开密钥了(浏览器会预先按照很多签名颁发机构的证书)。这样,就可以验证签名了。如下图:
如果对签名颁发机构一无所知,浏览器就无法确认是否应该信任这个签名颁发机构,它通常会向用户显示一个对话框,看看他是否相信这个签名发布者。签名发布者可以是本地的IT部分或者软件厂商。
客户端通常会用Web代理服务器代表它们来访问Web服务器。比如,很多公司都会在公司网络和公共因特网的安全边界上放置一个代理(见下图)。代理是防火墙路由器唯一允许进行HTTP流量交换的设备,它可能会进行病毒检测或其他的内容控制工作。
但只要客户端开始用服务器的公开密钥对发往服务器的数据进行加密,代理就再也不能读取HTTP首部了!代理不能读取HTTP首部,就无法知道应该将请求转向何处了。
为了使HTTPS与代理配合工作,要进行几处修改以告知代理连接到何处。一种常见的技术是HTTPS SSL隧道协议。要使用HTTPS隧道协议,客户端首先要告知代理,它想要连接的安全主机和接口。这是在开始加密之前,以明文形式告知的,所以代理可以理解这条信息。
HTTP通过新的名为CONNECT的扩展方法来发送这些明文形式的端点信息。CONNECT方法会告诉代理,打开一条到所期望主机和端口号的连接。这项工作完成之后,直接在客户端和服务器之间以隧道的方式传输数据。CONNECT方法就是一条单行的文本命令,它提供了有:
分隔的安全服务器的主机名和端口号。host:port
后面跟着一个空格和HTTP版本字符串,再后面是CRLF。接下来是零个或者多个HTTP请求首部行,后面跟着一个空行。空行之后,如果建立连接的握手过程成功完成,就可以开始传输SSL数据了。例子:
在请求中的空行之后,客户端会等待来自代理的响应。代理会对请求进行评估,确保它是有效的,而且用户有权请求这样一条连接。如果一切正常,代理会建立一条到目标服务器的连接。如果成功,就向客户端发送一条200 Connection Established响应。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。