安全通信需要满足的四个特性(TLS解决了什么问题):
①机密性:对报文加密,报文只能被发送方和接收方理解,窃听者即使截获报文也无法解密。
②完整性:确认对方的真实身份。若没有完整性约束,服务器就会“照单全收”,那么黑客就可以制造大量伪造密钥,通过服务器的响应最终破解出明文。
使用摘要算法保证完整性。摘要算法把数据压缩成一个独一无二的字符串,我们在传输数据时只要在原文后附上它的摘要,就能保证数据的完整性(摘要也需要加密哦)
③身份认证:通信两方各种证实双方身份的正确性。否则黑客会伪造身份发布公钥,即混合加密失效。
④运行安全性:防火墙、入侵检测系统。
HTTP与HTTPS的区别
①HTTP是明文传输,不保证数据安全。HTTPS实际上下面附带一个安全套接层TLS的HTTP。TLS保证加密传输、身份认证。
②HTTP与HTTPS使用的端口也不一样,HTTP使用80端口,HTTPS使用443端口
对称加密与非对称加密
[对称加密]:加密和解密时使用同一个密钥。只要保证密钥的安全,就可以保证机密通信。但是如何保证密钥的机密传输呢?只用对称加密好像无法保证,所以就出现了非对称加密(也叫公钥加密算法)。 应用场景: [非对称加密]:非对称加密有公钥和私钥,公钥加密后只能用私钥解密,私钥加密后只能用公钥解密。非对称加密解决了“密钥交换”的问题:网站秘密保管我们的私钥,并向我们分发公钥。我们用公钥对信息加密得到密文,此密文只有拥有我们密钥的浏览器才能解密,继而阻挡了黑客破解。(RSA是非对称加密) 应用场景: [混合加密]:在开始通信时使用非对称加密完成密钥交换,然后用随机数生成会话密钥作为对称加密的密钥,再用公钥对此密钥加密。对方拿到密文后使用私钥解密,取出会话密钥即对称密钥。这样,双方就实现了对称密钥的安全交换,后续全部使用对称加密即可。
--通过加密算法结合摘要算法,基本可用保证通信数据的安全。但是目前还有漏洞,就是通信的两个端点。黑客可以伪造我们自己,向网站发送支付转账等消息;也可以伪造网站来窃取信息,所以就需要签名算法
[数字签名]:把公钥私钥的用法反过来,发送方使用私钥对摘要加密,接收方拿到数字签名,使用公钥对数字签名解密,判断摘要是否相同。两端交换公钥,分别进行数字签名验证,成功后就可以进行混合加密的安全通信了。(黑客无法伪造数字签名,从而保证通信双方的身份) ---目前还有最后一个问题,我们如何保证这个公钥的可靠性呢。黑客仿造浏览器与我们交换公钥,那不就凉了么---
[证书]:所以,我们使用CA给公钥签名,把公钥和持有者的相关信息打包并签名形成数字证书,保证公钥的可靠性。而CA的可靠性就要靠根证书来保证了。操作系统和浏览器中都内置了各大CA的根证书,服务器发来它的证书,浏览器就可以顺着证书链一层层地验证证书中的签名,直至找到根证书,就可以保证证书可信。
TLS
TLS通过采用机密性、数据完整性、服务器鉴别和客户鉴别来强化TCP,它能被用于任何运行在TCP的应用程序上。TLS实际上是通过非对称加密来保证握手过程中的可靠性,再通过对称加密来保证数据传输的可靠性的。浏览器和服务器在使用TLS建立连接时需要选择一个密码套件来实现安全通信。(密码套件 = 密钥交换算法+签名算法+对称加密算法+摘要算法,一般是使用ECDHE密钥交换 + RSA身份验证 + AES对称加密算法 + SHA256签名加密算法)
TLS加密过程:
①客户端首先生成一个随机数A和支持的加密套件列表,发送给服务端。服务端也生成一个随机数,然后根据客户端支持的加密方法选出加密方法组合,而后服务端会生成一个包含公钥的CA证书,发送给客户端。(这个公钥也就是RSA公钥,它的作用是确保随机数不被篡改,即确保TLS握手的可靠性)
②客户端收到消息后,验证证书的有效性,确保证书中的公钥可信。然后客户端再生成一个随机数C。此时客户端根据服务端给出的加密方法组合,将随机数ABC加密组合成新的密钥X,这个密钥X就是用于保证数据传输的对称密钥。
浏览器是如何验证证书的有效性呢? 浏览器先获得证书中的颁发机构,判断此颁发机构是否为浏览器的信任机构。服务端的CA整数是经过CA机构的私钥加密的,所以浏览器可以获取CA机构的公钥,解析证书签名与内容,若一致则说明证书没有被篡改。
③然后客户端再使用CA证书中的公钥对随机数C进行加密,还要再生成一个用于快速验证的摘要串,一并发送给服务端。服务端收到消息,使用自己的私钥解密随机数C,也通过加密方法组合得到会话密钥X,还要解密这个摘要串是否。若这个摘要串与原串相同,则告知客户端表示握手成功。后续的数据传输通过会话密钥X进行加密解密。
关于金钱的接口,只接受客户端的商品ID与数量,然后根据服务端计算,并与客户端传来的金额做比较。尽量不要通过用户IP做去重,因为用户IP可以通过cURL自己修改,而且网吧学校往往透出的是同一个IP,所以我们利用请求头中的X-Forwarded-For不合理。 注册一般涉及发短信接口,若黑客无限制刷新则会造成大量短信费。我们可以在请求头中增加隐藏字段,防止爬虫捕获URL之后的无限刷;我们还可以控制相同手机号不能连续发送、需要输入验证码等。