1 TLS协议简介
1.1 简介
TSL是传输层安全协议(Transport Secure Protocol)的简称,它的前身是SSL(Secure Sockets Layer)。TLS的设计目标是为互联网通信提供安全保证,防止数据被窃听,篡改。TLS协议由记录层(TLS Record Layer)和握手层(TLS Handshake Layer)组成,记录层处于协议的最低层,为TLS协议提供安全可靠的连接。TLS在协议栈中处于HTTP和TCP协议之间,但是TLS协议是独立于应用层协议的,也就是说高层的应用层协议,如HTTP,FTP等都可以创建在TLS之上,TLS的下层可以是任何可靠传输层协议,如TCP,SPX等。
1.2 TLS的版本演进
TLS目前已发布的最新版本是TLS1.2,它在RFC5246中定义,其前身SSL1.0,SSL2.0和SSL3.0。SSL由于安全漏洞,已逐渐在被淘汰;TLS1.0和SSL3.0差异很小,几乎等同,渐渐也不再使用,所以现在的话,只要注意TLS1.1以上的版本。
1.3 TLS握手过程
TLS分为记录层协议和握手层协议:
记录层协议(TLS Record Protocol):
记录层协议负责将要发出的消息进行分片,压缩,打上消息认证码(MAC)并最终交到传输层;或将接收到的数据进行解压,解密,数据校验,重新 组装后传到上一层。
握手层协议(TLS Handshake Protocol):
握手层协议处于记录层协议之上,握手层协议的作用是在真正的应用数据传输之前,使客户端和服务器互相进行身份认证,协商加密算法以及生成加密密钥。握手层用于协商出记录层的参数。这些参数将会被记录层用于双方的身份认证,实例化协商的安全参数,错误报告。
TLS在协议栈中的位置:
TLS的协议栈位置TLS的握手过程:
1.客户端发送ClientHello消息,包含可选密码组件,一个客户端生成的随机数等,服务端接收后回一个ServerHello消息给客户端,确定密码方案,并生成一个服务器随机数,发给客户端。
这一步的数据传输在TCP上进行,数据都是公开的,中间人攻击者可以很轻松的得到这些数据。
2.服务器发送证书,服务器的身份确认成功后;服务器可能会请求一个客户端证书,要求客户端进行身份认证,客户端给服务器发出证书,验明身份。这一步不是必须的。
3.客户端向服务器发出摘要认证,确认接收的消息的完整性,保证没有被第三方篡改。
4.双方交换必需的加密参数。其中包括一个预主密钥,客户端会用服务器证书中的公钥将这个密钥加密传给服务器,服务器使用私钥进行解密。
5.客户端生成一个预主密钥,并使用服务器证书中的公钥加密,服务器解密后生成一个主密钥。双方使用这个主密钥(master secret)对应用层数据进行对称加密(如AES256)。 主密钥是客户端和服务器共享的。
6.最后,把这些准备好的的安全参数交给记录层协议。
下图转自维基百科TLS词条 https://zh.wikipedia.org/wiki/%E5%82%B3%E8%BC%B8%E5%B1%A4%E5%AE%89%E5%85%A8%E5%8D%94%E8%AD%B0:
SSL_handshake_with_two_way_authentication_with_certificates.png会话恢复过程:
客户端服务器出于性能的考虑,可能会恢复前面的会话,或复制一个当前存在的会话,而不是重新协商密码参数,建立新的会话(4.2部分使用tcpdump跟踪发现,这个过程确实是耗时占比很大)。
1.客户端发出一个ClientHello消息,这个消息包含要恢复的会话的Session ID。
2.服务接到这个SessionID后,检查它的缓存是否存在该会话ID。如果找到了,服务器将使用该会话状态重建连接,并发一个ServerHello给客户端,其中包含一个和ClientHello消息一模一样的SessionID。
3.此时,协议规定,必须要双方发出ChangeCipherSpec消息,并接着发出Finished消息确认握手完成。然后客户端服务器就可以传输应用层数据了。
4.如果服务器没有在缓存中找到Session ID,那么新的SessionID将会建立,然后又会执行一次完全握手。
--------------------------------------------------------------------------------
2 使用nginx搭建https服务器
2.1 环境准备
先搭建nginx,nginx的搭建在官网中可以找到 http://nginx.org/en/docs/install.html
注意如果是用源码编译,有的较老版本构建编译时需要带上参数--with-http_ssl_module,最新的nginx版本是默认有这个编译参数的。
配置:
ssl_certificate : 存放服务器证书的地址,主要用于数字证书的身份认证。所有连到服务器的客户端都能拿到这个证书;
ssl_certificate_key : 是私钥,只能被服务器知道。
ssl_protocols, ssl_ciphers选项是可选的。
2.2 详细操作步骤
下面尝试在本地搭建一个简单的https服务器,在443端口监听。
大致步骤如下:
1.搭建一个nginx服务器;
2.使用openssl生成服务器私钥,客户端私钥,服务器公钥,客户端公钥;
3.生成CA根证书,为服务器证书和客户端证书(可选)提供签名服务;
4.生成服务器证书和客户端证书,并请求CA的签名;
5.在操作系统上信任我们伪造的服务器证书,这里没有为客户端生成证书;
6.随便写一个web服务,提供一个url返回一段静态报文,让nginx为它做一下代理,然后启动这个web服务器;
7.测试。
以下是这些步骤的操作命令:
证书和私钥生成完毕后,开始配置nginx(http部分从略);
配置完后,保存,在nginx根目录下运行命令:
$ ./sbin/nginx -t -c conf/https_server.conf
nginx会测试一下配置文件 conf/https_server.conf
如果输出下面的东西,表示配置没什么格式问题了:
启动nginx:
$ ./sbin/nginx -c conf/https_server.conf
这里我们搭建一个http服务器,在端口8887上监听,使用nginx代理,在浏览器中访问:
https://localhost/hello
返回:
2.3 信任证书:
浏览器中输入
https://localhost:443
因为我们的根证书是自己签发的,签发机构是伪造的,不在浏览器的信任列表中。对于这种情况,不同的浏览器对此会有不同的表现,但主流的浏览器都会发出警告。下面提供了一种办法,使浏览器信任证书。注意,这里只是为了测试,正常上网不要忽略浏览器的警告,轻易地信任不明来源的证书。
下面是在Mac下的Google Chrome中信任证书的操作步骤:
. 当浏览器提示连接不安全时,在浏览器的抓包工具中点到如下的界面:
图4. 点按钮:View Certificate
. 拖动证书的icon,拉到本地桌面上并双击它:
图5:访问https://www.baidu.com得到的服务器证书,仅举例双击它打开系统的钥匙串,将桌面证书拖拽到系统钥匙串中,
双击打开,选择『始终信任』
图6
图7
注:截图的证书为测试时随意生成的根证书;所有证书信任的办法类似。
重启浏览器后,再访问https://localhost/hello ,会看到这样的结果:
图8
2.4 测试加密效果
现在,我们尝试用抓包工具模拟中间人截取报文,看看能不能截取到报文:
在mac上我们使用charles进行抓包,结果如下,报文已经被加密,看到的内容都是乱码:
图9
尝试用Charles进行一次中间人攻击:伪造证书,在Charles上可以安全一个代理证书,具体操作参考这里:http://www.jianshu.com/p/7a88617ce80b,然后再访问https://localhost/hello
这时浏览器会又提示我们连接不安全,这是因为TLS握手感知到了客户端的证书来源不明,假如我们点击高级,继续访问,忽略这个警告,那么我们会在抓包工具上看到这样的画面:
图10
报文的内容成功被Charles窃听了,所以,再次验证了一点:如果正常上网浏览网页,操作电子银行等敏感信息时,不要随便忽略浏览器的安全警告。
由于大多数人安全意识薄弱,很习惯地点继续访问不安全连接 ,所以就有了HSTS。
2.5 HSTS是什么
HSTS(HTTP Strict Transport Security),这是一个由IEEE发布的网络安全策略机制,如果服务器增加了这种策略,那么就意味着要求客户端必须使用https协议和服务器进行对话。
主流的浏览器都实现了HSTS策略。当TLS握手出现问题时,浏览器不会再访问服务器。
百度的防火墙代理就实现了这个策略。访问https://www.baidu.com ,在浏览器截取到的服务器响应头中有一个Strict-Transport-Security字段 max-age=172800 。max-age是指HSTS的失效时间,单位是秒。
图11
由于服务器响应头增加了这个字段,浏览器就会履行一些HSTS的职责。假如我们采取抓包工具伪造一个未知证书,再去访问域名,就会受到警告,尝试让浏览器忽略不安全的警告继续访问会被禁止,如下图:
图12
然而HSTS也不是绝对安全的。一方面原因在于Strict-Transport-Security的max-age会过期,浏览器是否强制HSTS策略取决于当前系统时间,它可能伪造;另一方面是因为首次访问网址并不受HSTS保护。可见技术对安全的防护永远是有限的,还需要用户有足够的安全意识进行自我保护。
3 实现https抓包
了解了https的原理之后,知道TLS的握手关键在身份认证这一步。HTTPS的数据传输可以类比成交谈的双方各自亮出身份证,然后用约定的暗号进行交流,这样即时旁边有人窃听,也无法破解经过加密的信息。
测试时,我们通常会有抓取https包的需求。如果以为https已被加密,我们没办法抓到明文包,那这是不对的。抓包的原理通常是在通信双方插一个中间代理,对原有的客户端和服务器的请求进行来回转发。如果要抓取https包,显然,构造的代理必须有完成TLS握手的能力,所以代理工具一般需要支持ssl。有了TLS的握手能力,我们再设法使通信双方相信代理的身份,就能实现https的抓包了。可以看到,https的数据安全关键点其实就是在数字证书上 ,因此也很容易理解为什么主流的浏览器都会警告用户使用了来路不明的机构颁发的证书。
实现https抓包,具体操作方案就是:用一个支持ssl的代理,伪造一个ca证书,当通信双方在TLS握手时发现有人窃听时,设法让他们相信代理的身份(这个过程就见2.3); 代理身份被信任了,就会发生这个过程: 客户端和代理进行握手,请求数据发到代理上,由代理和服务器做TLS握手,并转传客户端的请求数据;服务器加密报文应答,代理解密报文再用和客户端协商的密码方案加密报文,传给客户端,客户端解密报文。
Charles抓包参看:http://www.jianshu.com/p/7a88617ce80b
4 HTTPS的性能
4.1 HTTPS与HTTP的性能评测对比
我们使用Jmeter来测试http和https的比较。
在远程服务器上搭建一个http服务器,让它返回一个简单的静态网页:
然后使用nginx进行代理
关键词标签:
HTTPS测试服务器搭建及性能探究,HTTPS 服务器,ERP,ERP系统,ERP软件,ERP系统软件,ERP管理系统,ERP管理软件,进销存软件,财务软件,仓库管理软件,生产管理软件,企业管理软件,拓步,拓步ERP,拓步软件,免费ERP,免费ERP软件,免费ERP系统,ERP软件免费下载,ERP系统免费下载,免费ERP软件下载,免费进销存软件,免费进销存,免费财务软件,免费仓库管理软件,免费下载,
本文转自:e-works制造业信息化门户网
本文来源于互联网,拓步ERP资讯网本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。联系方式:QQ:10877846 Tel:0755-26405298。(请勿发邮件,由于垃圾邮件众多,有可能会被当作垃圾邮件处理掉,同时现在很用邮件处理事务了,邮件处理时效期为3天,如急件请直接QQ联系。)
相关文章