由于HTTP天生"明文"的特点,整个传输过程中完全透明,任何人都能够在链路中截取、修改或者伪造请求/响应报文,数据不具有可信性,因此就诞生了HTTPS协议。使用HTTPS协议时所有HTTP请求和响应在发送到网络之前,都需要进行加密。HTTPS协议等于HTTP协议加上SSL/TLS协议。
SSL(Secure Socket Layer,安全套接字层):1994年为Netscape所研发,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从3.1开始被IETF标准化并改名,发展至今已经有TLS 1.0、TLS 1.1、TLS 1.2三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
摘要算法能够把任意长度的数据"压缩"成固定长度、而且独一无二的"摘要"字符串,就好像是给这段数据生成了一个数字"指纹"。任意微小的数据差异,都可以生成完全不同的摘要。所以可以通过把明文信息的摘要和明文一起加密进行传输,数据传输到对方之后再进行解密,重新对数据进行摘要,再比对就能发现数据有没有被篡改。这样就保证了数据的完整性。例如:MD5。
1.对称密钥加密算法:编、解码使用相同密钥的算法,如(AES、RC4、CHaCHa20)
2.非对称密钥加密算法:它有两个密钥,一个叫"公钥",一个叫"私钥"。两个密钥是不同的,公钥可以公开给任何人使用,而私钥必须严格保密。非对称加密可以解决"密钥交换"的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因为没有私钥,所以就无法破解密文。非对称密钥加密系统通常需要大量的数学运算,比较慢。如(DH、DSA、RSA、ECC)
TLS里使用的是混合加密方式,即把对称加密和非对称加密结合起来,两者互相取长补短,既能高效地加密解密,又能安全地密钥交换,大致流程如下:
- 通信开始时使用非对称加密算法如RSA、ECDHE先解决密钥交换问题
- 用随机数产生对称算法使用的"会话密钥",再用公钥加密。会话密钥很短,所以即便使用非对称加密算法也可以很快完成加解密
- 对方拿到密文后用私钥解密,取出会话密钥。完成对称密钥的安全交换,后续就使用对称算法发完成数据交换
一、数字证书组成:
CA信息、公钥用户信息、公钥、权威机构的签名、证书有效期、签名算法
二、数字证书的作用:
1.通过数字证书向浏览器证明身份
2.数字证书里面包含了公钥
三、数字证书的申请和验证
如何申请:
1.生成自己的公钥和私钥,服务器自己保留私钥
2.向CA机构提交公钥、公司、域名信息等待证书
3.CA机构通过线上,线下多种途径验证你提交信息的真实性、合法性
4.信息审核通过后,CA机构则会向你签发认证的数字证书,包含了公钥、组织信息、CA信息、有效时间、证书序列号,同时生成一个签名
签名步骤:hash(你用于申请证书所提交的明文信息)=信息摘要,CA再使用私钥对信息摘要进行加密,密文就是证书的数字签名
浏览器如何验证呢?
1.首先从服务器发送的证书内容中获取证书的颁发机构,然后从浏览器系统中去寻找此颁发机构是否为浏览器的信任机构。世界上就几个权威的CA机构,这几个机构的信息都是预先嵌入到浏览器系统中的,如果收到的一个数字证书但其颁发机构没有在浏览器系统中,那么就会有警告提示无法确认证书的真假,如果是受信息的机构,那么就到下一步。
2.CA机构有自己的根公钥和根私钥,在证书颁发之前,机构会用根私钥将这个证书内容加密得到一个签名,这个签名只能用对应的根公钥去解密。在浏览器收到服务器发过来的证书之后,首先从浏览器中拿到机构的根公钥,用这个根公钥去解析证书的签名获得证书的原始内容,然后进行哈希运算,得到一个哈希值H1,假设这个证书的签名是不法分子伪造的,但是伪造的签名不可能是根据根私钥加密生成的(因为根私钥是CA机构私有),所以根公钥也不可能去解密任何第三方生成的签名(加密内容只能由对应的公钥私钥解密),然后在对证书内容进行hash计算得到另一个哈希值H2,如果此时H1和H2相等,就代表证书没被修改过
3.在证书没有被修改过的情况下,再检查证书上使用者的URL和我们请求的URL是否相等,避免钓鱼网站。如果浏览器的连接被某个钓鱼网截取了,钓鱼网也可以发送一个自己的证书给浏览器,然后也可以通过证书没有被篡改的验证,但是在证书没有被篡改的情况下,对比证书上的URL和我们请求的URL,就可以发现这个证书的URL不是我们请求的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)