zoukankan      html  css  js  c++  java
  • SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐、经济、社会关系等都离不开互联网的帮助。在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的。幸运的是,在大牛们的努力下,很早以前就有一套安全体系来保障互联网信息的传递。下面我们一起来了解一下这套体系。

    加密算法
    首先我们需要了解一下加密相关的知识,加密可以分为对称加密和非对称加密。两者的主要区别就是是否使用同一个秘钥,对称加密需要用同一个秘钥。非对称加密不需要用同一个秘钥,而是需要两个秘钥:公开密钥(publickey)和私有密钥(privatekey),并且加密密钥和解密密钥是成对出现的。

    对称加密

    对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。常见的对称加密有 DES、AES 等。

    非对称加密

    非对称加密使用一对“私钥-公钥”,用私钥加密的内容只有对应公钥才能解开,反之亦然。非对称加密有以下特性:

    对于一个公钥,有且只有一个对应的私钥。
    公钥是公开的,并且不能通过公钥反推出私钥。
    通过私钥加密的密文只能通过公钥能解密,通过公钥加密的密文也只能通过私钥能解密。
    非对称加密不需要共享同一份秘钥,安全性要比对称加密高,但由于算法强度比对称加密复杂,加解密的速度比对称加解密的速度要慢。常见的非对称加密有 RSA、ESA、ECC 等。

    摘要算法
    除了加密算法,摘要算法在互联网安全体系中也扮演了重要的角色。摘要算法有以下特性:

    只要源文本不同,计算得到的结果,必然不同(或者说机会很少)。
    无法从结果反推出源数据。
    基于以上特性,我们一般使用摘要算法来校验原始内容是否被篡改。常见的摘要算法有 MD5、SHA 等。

    Tips: 摘要算法不能算作加密算法,加密算法需要使用秘钥加解密,但摘要算法无法根据结果反推出内容。另外 MD5 目前也不算安全了,例如彩虹表攻击。
    具体例子
    假设甲公司要给乙公司发送一份机密的文件,那么这次传输需要确保以下几点:

    文件内容不能被读取(加密)
    文件内容不能被篡改(数字签名)
    文件不能被掉包(数字证书)
    加密

    对称加密需要用同一份秘钥,这一份秘钥的约定就有被中途截获的可能。因此可以采用非对称加密算法加密对称秘钥的方式来加密内容,也就是用乙的公钥加密对称秘钥,并用这个对称秘钥加密文件内容。

    假设这份文件被黑客截获,但是黑客没有乙的私钥无法解出对称秘钥,也就无法解密文件内容。但是这里有个风险,虽然黑客无法解密文件内容,但他可以自己生成一份秘钥并用乙的公钥加密,再用这份秘钥加密一份伪造的文件发给乙,这种情况下乙收到的就是被篡改的文件。

    数字签名

    上面提到乙有可能收到被篡改的文件,这个问题可以用数字签名的方式解决,数字签名就是用摘要算法提取出源文件的摘要并用私钥进行加密后的内容。针对上面那个问题,甲在发送文件时再附带上源文件的数字签名。如果被黑客截取到加密后的文件和数字签名,黑客即使使用甲的公钥解出了文件摘要,由于摘要算法的特性黑客也无法还原出原始内容。但乙可以解密出文件内容再用同样的摘要算法提取出摘要来和数字签名里的摘要进行比对,摘要一致则说明文件没有被篡改过。

    到目前为止还有一个风险就是乙无法确定自己用的公钥就是甲提供的,如果黑客将乙手里的甲的公钥替换成自己的并用自己的私钥生成数字签名,那么乙还是会受到被篡改的文件。

    数字证书

    数字证书的出现就是为了解决上述提到的问题,数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。

    数字证书里一般会包含公钥、公钥拥有者名称、CA 的数字签名、有效期、授权中心名称、证书序列号等信息。

    数字证书如何确保列出的用户就是公钥的拥有者呢?关键点是 CA 的数字签名,CA会用自己的私钥将证书内容的摘要进行加密。因为 CA 的公钥是公开的,任何人都可以用公钥解密出 CA 的数字签名的摘要,再用同样的摘要算法提取出证书的摘要和解密 CA 数字签名后的摘要比对,一致则说明这个证书没有被篡改过,可以信任。

    PKI
    PKI(Public Key Infrastructure)翻译过来就是公钥基础设施,可以理解为利用公钥技术为网络应用提供加密和数字签名等密码服务以及必需的密钥和证书管理体系。它是一个提供安全服务的基础设施,PKI 技术是信息安全技术的核心,同时也是电子商务的关键和基础技术。

    PKI 既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为 PKI。
    PKI是一个标准,它包括一些基本的组件,不同的组件提供不同的服务,主要由一下几个组件组成:

    认证中心 CA(证书签发):CA 机构,又称为证书授证 (Certificate Authority) 中心,是 PKI 的”核心”,即数字证书的申请及签发机关,CA 必须具备权威性的特征,它负责管理 PKI 结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份,CA 还要负责用户证书的黑名单登记和黑名单发布。
    X.500目录服务器(证书保存):X.500目录服务器用于”发布”用户的证书和黑名单信息,用户可通过标准的 LDAP 协议查询自己或其他人的证书和下载黑名单信息。
    具有高强度密码算法(SSL)的安全 WWW 服务器(即配置了 HTTPS 的apache):Secure socket layer(SSL)协议最初由 Netscape 企业发展,现已成为网络用来鉴别网站和网页浏览者身份,以及在浏览器使用者及网页服务器之间进行加密通讯的全球化标准。
    Web(安全通信平台):Web 有 Web Client 端和 Web Server 端两部分,分别安装在客户端和服务器端,通过具有高强度密码算法的 SSL 协议保证客户端和服务器端数据的机密性、完整性、身份验证。
    自开发安全应用系统:自开发安全应用系统是指各行业自开发的各种具体应用系统,例如银行、证券的应用系统等。
    总结
    数字签名和数字证书是两个不同的概念,理解的关键点是数字签名是内容提供方用自己的私钥对内容摘要(MD5、SHA)非对称加密,而数字证书的关键是 CA 用自己的私钥对证书内容的摘要非对称加密从而确保证书内的用户合法拥有证书里列出的公钥。
    这里写图片描述

    这里写图片描述

    SSL/TLS 握手过程详解:
    http://www.jianshu.com/p/7158568e4867

  • 相关阅读:
    JavaScript的函数(二)
    Python:os.walk()和os.path.walk()用法
    Python:代码单元、代码点介绍
    Python:如何去掉字符串中不需要的字符
    Python:更改字典的key
    Python:如何对字符串进行左、右、居中对齐
    Python:format()方法
    日常开发之缓存技术
    Web系统大规模并发——秒杀与抢购 秒杀系统优化与预防措施
    PHP之位运算符
  • 原文地址:https://www.cnblogs.com/MaAce/p/7755707.html
Copyright © 2011-2022 走看看