SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入,RFC里包含了很多互联网技术的规范!
起初是因为HTTP在传输数据时使用的是明文
(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS
是HTTP+SSL/TCP
的简称。
由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0
进行了标准化,并添加了少数机制(几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议)
,可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”
。
SSL连接过程
SSL在通信时会先发送一段内容:
- 客户端可以支持的SSL最高版本号
- 用于生成主秘密的32字节的随机数
- 确定会话的会话ID
- 客户端可以支持的密码套件列表
密码套件格式:每个套件都以“SSL”开头,紧跟着的是密钥交换算法。用“With”这个词把密钥交换算法、加密算法、散列算法分开,例如:SSL_DHE_RSA_WITH_DES_CBC_SHA,表示把DHE_RSA(带有RSA数字签名的定义为Diffie-HellMan)密钥交换算法;把DES_CBC定义为加密算法;把SHA定义为散列算法。 - 客户端可以支持的压缩算法列表
选择密钥过程:
SSL客户端(也是TCP的客户端)在TCP连接建立之后,发出一个ClientHello来发起握手,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL的服务器端会回应一个ServerHello,这里面确定了这次通信所需要的算法,然后发过去自己的证书(里面包含了身份和自己的公钥)。Client在收到这个消息后会生成一个秘密消息,用SSL服务器的公钥加密后传过去,SSL服务器端用自己的私钥解密后,会话密钥协商成功,双方可以用同一份会话密钥来通信了。
当服务器收到客户端发来的请求通信消息后会作出回应消息,回应消息如下:
- 一个SSL版本号。取客户端支持的最高版本号和服务端支持的最高版本号中的较低者。
- 一个用于生成主秘密的32字节的随机数。(客户端一个、服务端一个)
- 会话ID
- 从客户端的密码套件列表中选择的一个密码套件
- 从客户端的压缩方法的列表中选择的压缩方法
这个阶段之后,客户端服务端知道了下列内容:
- SSL版本
- 密钥交换、信息验证和加密算法
- 压缩方法
- 有关密钥生成的两个随机数。
- 颁发证书机构,过期时间!
随机数是用来验证通信双方在连接过程中的准确性!
TLS与SSL连接过程无任何差异
SSL与TLS两者所使用的算法是不同的,SSL使用的是MAC哈希算法,TLS使用的是RFC-2104定义的HMAC算法,两者差异是在填充字节与密钥之间一个使用的是连接运算,一个使用的是异或运算,MAC和HMAC在取值范围也是不同的,但是安全度是相同的!
SSL可以分为两个协议,SSL记录协议(SSL Record Protocol)为TCP协议在通信提交数据时提供数据封装、压缩、加密等基本操作!
SSL握手协议(SSL Handshake Protocol)它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
TLS与SSL的两个协议工作方式与SSL一样!
SSL所使用的版本为3.0,版本号也为3.0.x(x代表未知数因为SSL还在更新),而TLS版本为1.0,但版本号却为SSL3.1.0!
TLS增加了许多新的报警代码,比如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等,但同时也支持SSL协议上所有的报警代码!
TLS和SSL不能共用,因为在认证证书时TLS指定必须与TLS之间交换证书,因为TLS与SSL所使用的加密算法是不同的,所以不能把TLS与SSL一并使用!
在加密数据前会额外填充一部分在SSL中,填充后的数据长度要达到密文块长度的最小整数倍,而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),并和公开密钥拼接,随后在跟着密文,这种方式可以防止基于对报文长度进行分析的攻击!
TLS对随机数算法也进行了增强,TLS所使用的随机数算法是HMAC中定义的PRF来完成的,PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的,而SSL则使用的是MAC算法生成的随机只是用了一种散列算法!
不使用SSL与TLS加密会带来的威胁:
- 窃听风险(eavesdropping):第三方可以获知通信内容。
- 篡改风险(tampering):第三方可以修改通信内容。
- 冒充风险(pretending):第三方可以冒充他人身份参与通信。
使用SSL和TLS加密所带来的好处
- 所有信息都是加密传播,第三方无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
网站如何通过加密和用户安全通信
SSL (Secure Sockets Layer)
是用来保障你的浏览器和网站服务器之间安全通信,免受网络“中间人”窃取信息。SSL原理很简单。当你的浏览器向服务器请求一个安全的网页(通常是
https://
),服务器就把它的证书和公匙发回来浏览器检查证书是不是由可以信赖的机构颁发的,确认证书有效和此证书是此网站的。
使用公钥加密了一个随机
对称密钥
,包括加密的URL一起发送到服务器服务器用自己的私匙解密了你发送的钥匙。然后用这把对称加密的钥匙给你请求的URL链接解密。
服务器用你发的对称钥匙给你请求的网页加密。你也有相同的钥匙就可以解密发回来的网页了
对称加密和非对称加密
下面来解释一下加密中“对称加密”和“非对称加密”的区别
对称加密:
在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,也可以不使用算法加密!
非对称加密:
甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密
另一方面,甲方可以使用乙方的公钥对机密信息进行加密后在发送给乙方;乙方在使用自己的私钥对数据进行解密在验证!
甲/乙方只能用其专用密钥解密由其公用密钥加密后的任何信息。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。
客户端/服务器在交换密钥时可以从中所使用的两把密钥中随便选择一把作为公钥发送给目标方!
双方优点:
对称加密不需要经过过多的数学计算,不会影响速率,而非对称加密需要经过复杂的数学计算,需要CPU ALT运算单元进行大量算数运算,会提高耗电量,降低性能,影响速率,降低网页访问速率,不过根据现在的电脑配置这些问题都不算什么,所以为什么在使用HTTP和HTTPS时感觉没用差别一样!
但是服务器只承载一个HTTPS的网站还好如果承载过多的话再好的配置也会吃不消,正所谓三个臭皮匠 胜过诸葛亮,所以不是所有网站都要用HTTPS,仅个别需要提交敏感类数据时才建议使用!