摘要:一开始,有了网络,安全问题就来了,大家都在想,这到底是怎么一回事,Netscape这家公司,算是先驱吧,捣鼓出了SSL技术,那时候,SSL还很年轻,版本也在不停升级,SSL 3.0,算是个重要的里程碑,后来,IETF觉得这玩意儿不错,标准化了,就有了TLS 1
图解SSL/TLS协议:从历史到未来的安全之路.
一开始,有了网络,安全问题就来了,大家都在想,这到底是怎么一回事,Netscape这家公司,算是先驱吧,捣鼓出了SSL技术,那时候,SSL还很年轻,版本也在不停升级,SSL 3.0,算是个重要的里程碑,后来,IETF觉得这玩意儿不错,标准化了,就有了TLS 1.0,其实,TLS 1.0,你可以理解为SSL 3.1,只是换了个名字,纳入了RFC规范,大家就按这个标准来。
SSL/TLS,说白了,就是为了保障网络通信的安全,核心功能有三个,认证,加密,数据完整性,认证,就是确认通信双方的身份,加密,就是把数据变成别人看不懂的乱码,数据完整性,就是保证数据在传输过程中没有被篡改,要实现这些功能,SSL/TLS采用了一种分层模型,可以理解为,在HTTP和TCP之间加了一层安全保护罩,这就是SSL/TLS。
这个保护罩,又分两层,记录协议层(Record Protocol),负责数据的封装,压缩,加密等基础工作,它基于TCP协议,保证数据可靠传输,记录层就像一个打包员,把数据打包好,再加密,然后通过TCP送出去,另一层是握手协议层(Handshake Protocol),负责身份认证,算法协商,密钥交换,它基于记录协议,保证安全传输,握手层就像一个谈判专家,跟对方确认身份,商量好用什么加密方式,然后交换密钥。
SSL和TLS,虽然看起来很像,但还是有些区别,主要是版本号的规范不一样,SSL是3.0,TLS是3.1,虽然只是小数点后一位的差别,但内部实现还是有很多改进的,消息验证码(MAC)算法也改进了,计算范围更广,更安全,伪随机函数(PRF)也增强了安全性,保证密钥的随机性,报警代码也扩展了,能更精确地指示安全问题,密钥交换,加密算法,客户端证书,这些方面也有些差异。
"certificate_verify","finished",消息的散列码计算,也有些不一样,主密钥(master secret)的计算方式也有变化,更安全了,填充字节的规范也有些差异,增强了抗攻击能力,总的来说,TLS比SSL更安全,更强大,但它们的基本原理是一样的,都是为了保障网络通信的安全,所有人都觉得TLS以后不得了。
TLS握手,是整个安全通信的关键,它的目标是安全地协商出一个会话密钥,用于后续的数据加密通信,这个过程有点复杂,但很重要,简单来说,就是用非对称加密来交换密钥,然后用对称加密来传输数据,再用HMAC算法来保证数据完整性,记住,SSL/TLS默认只认证服务器端,客户端认证是可选的,不是每次都有。
握手流程是这样的,首先,客户端发起ClientHello,告诉服务器自己支持哪些协议版本,随机数,加密套件列表,压缩方法,就像去商店买东西,先告诉店员自己需要什么,接下来,服务器回应ServerHello,确认协议版本,随机数,加密方法,服务器证书,就像店员告诉顾客,我们有什么货,多少钱,服务器可能还会提供更多密钥信息,这就是Server Key Exchange,甚至可能请求客户端提供证书进行验证,这就是Certificate Request,最后,服务器发送ServerHelloDone,表示ServerHello消息结束了,就像店员说,我要说的都说完了。
客户端收到ServerHello后,开始验证服务器证书,看看域名是不是匹配,证书是不是过期,是不是由可信机构颁发的,如果一切都没问题,客户端就生成一个PreMaster Secret,用服务器公钥加密发送给服务器,这就ClientKeyExchange,然后,客户端发送ChangeCipherSpec,通知服务器切换到协商的加密套件,就像顾客说,我决定买了,然后,客户端发送Finished,这是一个加密的握手信息哈希值,用于验证握手过程,就像顾客说,我付完钱了,确认一下。
服务器收到ClientKeyExchange后,解密PreMaster Secret,生成Session Secret,然后,服务器发送ChangeCipherSpec,通知客户端切换到协商的加密套件,就像店员说,我收到钱了,然后,服务器发送Finished,这是一个加密的握手信息哈希值,用于验证加密通道,就像店员说,东西给你了,确认一下,握手就完成了。
在这个过程中,有几个关键的密钥,PreMaster Secret,是客户端生成的,用于生成Master Secret的种子,它的作用是防止中间人篡改,Master Secret,是客户端和服务端独立计算得出的,它是加密相关密钥的基石,Key Material,Session Secret,也叫Session Key,是由Master Secret生成的,它实际用于会话数据加密的密钥,比如client write MAC key,Server write MAC secret,这些密钥就像一把把钥匙,打开安全通信的大门。
握手完成后,就可以进行应用数据传输了,客户端把数据附加MAC secret,然后使用write encryption key加密,发送给服务器,服务器端收到数据后,分别解密和验证数据,保证数据的安全性和完整性,这个过程就像两个人用暗号通信,只有知道暗号的人才能看懂内容,中间人就算拿到数据,也看不懂,也不知道有没有被篡改。
SSL/TLS协商过程,就像两个人安全地交换了一把钥匙,有了这把钥匙,他们就可以安全地通信了,但网络安全面临很大的威胁,其中之一就是中间人攻击(Man-in-the-Middle),中间人可以监听,拦截,篡改通信,就像有人偷听电话,甚至篡改对话内容,为了防范中间人攻击,可以使用带证书的密钥交换算法,关注浏览器警告,如果浏览器提示证书不可信,那就要小心了,可能有人在搞鬼。
在代理场景下,浏览器先与代理服务器建立TCP连接,发送CONNECT请求,然后,代理服务器与Web服务器建立连接,转发流量,但是,代理服务器无法解密HTTPS流量,因为它没有服务器的私钥,所以,它只能转发流量,不能看到具体内容,很多人看完这个故事,都会去想,那如果他有私钥呢,那该怎么办。
未来,量子计算能力会逐渐提升,它对现有非对称加密算法构成了潜在威胁,因为量子计算机可以快速破解这些算法,就像有了万能钥匙,可以打开所有的锁,但也不用太担心,科学家们正在探索基于格,编码,多变量等数学难题的抗量子密码算法,保障未来加密安全,这些算法就像更高级的锁,即使有了量子计算机,也很难破解,所以,要结合最新技术发展,持续优化SSL/TLS协议,应对未知安全挑战。
来源:电子小课堂一点号