【51CTO.com快译】在当今的数字世界中,无论何时何地,人们都在交换信息,并且每天都在呈指数级增长。跨系统交换数据的安全性至关重要,因为它们容易受到网络攻击。
随着世界朝着数字化的方向发展,建立安全连接并了解其工作原理也变得更加重要。随着IT技术的发展,出现了很多现代化的技术与产品,并改变了人们日常的工作和生活的方式。人们从零售购物转向网上购物、金融交易实现数字化,货币实现数字化,以及图片共享和列表等等。
由于人们的大部分活动都是在线进行的,那么如何确保通过网络传输的数据安全?本文将介绍幕后发生的事情及其工作原理。
信息交流
当人们交换信息时,通常使用像互联网,但由于其性质是共享的,任何人都可能拦截并查看交换的信息。
在这种情况下,通信的双方可以采用加密策略,采用加密格式发送消息,该格式可由收件人读取。早期的系统是交换一个共享密钥,发送方使用该密钥进行加密,接收方将使用该密钥进行解密。由于两者使用相同的密钥,因此称为对称密钥。接收方使用密钥进行解码,只有在双方采用同一密钥时才可能进行解码。但是如果中间人知道这个密钥,就可以读取和更改消息。
为了使用公共通道进行有效通信,人们可以利用使用两个密钥的公钥密码。一个是公共的,另一个是私有的。这种技术称为非对称加密或公钥加密。
公钥密码
在公钥密码中使用两个密钥:一个称为公钥,另一个称为私钥。这两个密钥是相互关联的,公钥不能与其他私钥一起使用,反之亦然,它们是绑定在一起的。这些密钥用于散列函数以生成数据的散列值,并使用公钥对其进行加密。消息的预期接收者使用相应的私钥对其进行解密,并且只有关联的私钥才能对其进行解密。
如果中间人窃取了密钥,他就会发送公钥来加密,并使用私钥来解密以改变原始消息,然后将使用预期接收者的公钥进行加密。这样,原来的发送方和接收方就不会知道有中间人的更改,他们会认为发送和接收的内容是准确的。
由于公钥和私钥很容易落入中间人的手中,因此应该有一种对服务器进行身份验证的方法,服务器通过出示其身份证书来验证其身份。服务器从受信任的第三方系统获取其身份证书,而第三方通常是证书颁发机构(CA)。CA就像政府办公室或受信任的代理,遵守公共密钥基础(PKI)标准和颁发证书的准则,而作为CA的实体都会遵循。
在验证预期用户的真实性之后,CA颁发证书并使用其私钥签署证书。该签名称为证书的数字签名。正在使用的证书种类繁多,并且每种证书都有其各自的用途。例如在当今客户端和服务器之间的Web交换世界中,使用X509证书,它遵循ASN.1(抽象语法表示法一)标准。
这个证书通常作为二进制数据存储在文件系统中,这些数据通常被转换为称为PEM(隐私增强电子邮件)的Base64 ASCII文件,这些文件具有.pem、.crt、.cer等扩展名。
例如X509v3证书内容如下:
Properties files
- Data:
- Version: 3 (0x2)
- Serial Number
- Signature Algorithm
- Issuer
- Validity
- Not Before
- Not After
- Subject
- Subject Public Key Info
- Public Key Algorithm
- Public-Key
- X509v3 extensions
- Signature Algorithm
- Signature Value
签名值
例如某个医生的办公室通过其网站允许患者在线注册他们的详细信息并安排预约。服务器就会起CA的作用,并证明其身份,并获得以他的域名(医生办公室)为主题的证书。CA验证医生的办公室身份并向服务器颁发X509证书。参阅下面使用OpenSSL命令生成的x509证书内容示例。
使用SSL/TLS的安全连接
两方之间的安全连接是使用SSL/TLS协议标准建立的。而SSL之前使用过,但由于安全漏洞而被弃用,现在主要使用TLS。SSL/TLS层位于TCP/IP之上,在应用层之前。所以驻留在应用层的应用会自动被安全协议覆盖。
考虑一下医生办公室网上预约的例子,在部署应用程序之前,服务器对CA采取了几个步骤。
- 承载医生办公室网页的Web服务器向CA请求证书。
- CA验证医生办公室的申请并颁发证书;它还使用其私钥(数字签名)对其进行签名。
- CA颁发的证书称为实体证书,它包含用于验证服务器的公钥。
- 服务器有相应的私钥,它驻留在服务器端,即部署医生办公室应用的服务器端。
- 如前所述,证书的所有者或主题与医生办公室的域相匹配。例如,www.doctoroffice.com。
SSL握手
- 患者从浏览器进入医生办公室网页。其请求通过不安全的通道到达服务器;浏览器发送其使用的SSL版本、密码设置以及服务器建立安全SSL通道所需的任何其他信息。
- 服务器依次以其SSL版本、密码设置进行响应,并发送从CA接收的证书(也称之为叶证书或实体证书)。
- 客户端使用其信任库验证从服务器收到的叶证书。浏览器和计算机都带有嵌入信任存储区的大多数第三方CA的中间证书和根证书。
- 浏览器在其信任库中搜索已签署叶证书的相应中间证书。然后使用中间证书的发行者公钥来验证数字签名(因为公钥和私钥是配对的);如果它可以验证数字签名,则验证会进入中间体,直到它到达自签名根证书并最终结束。这种验证称为认证路径验证或认证链。
- 一个证书可以有一个或多个中间证书,并且必须对链进行验证。
- 一旦服务器证书通过身份验证,客户端将根据需要将其证书发送到服务器。在某些情况下,客户端请求资源并通过提供其证书来证明其身份。而在使用浏览器的情况下,并没有使用证书的客户端身份验证(应用程序使用其他形式的身份验证,如用户名/密码)。
- 如果客户端无法验证来自客户端信任库的服务器证书,它将终止连接,并且浏览器将显示警告消息。
- 此外,浏览器会根据域中的主题名称检查用户输入的域名,将显示错误消息,并停止进一步连接。
- 在验证成功之后,客户端使用约定的密码为该会话生成一个预主密钥,并使用服务器的公钥对其进行加密,该公钥是叶证书的一部分。
- 服务器使用服务器的私钥解密预主密钥,然后生成主密钥。然后客户端和服务器都使用主密钥生成会话密钥,对称密钥用于加密和解密该会话的消息。
证书链看起来是什么样的?
使用OpenSSL验证证书链:
仅使用中间人验证证书。
下面给出了由不同中间人签署的证书的验证。
中间人证书和根证书作为OpenSSL的一个文件。
通过正确的中间人证书和根证书链的验证。
在找到正确的中间人证书和根证书后,OpenSSL能够验证叶证书。
结论
了解密码技术将使人们对每天访问的网站充满信心,并且可以更深入地了解浏览器在与其他方握手期间出现任何异常情况下尝试与他人通信的内容。关于证书认证的力量将使人们能够在网上安全地做更多的事情。
原文标题:Cryptography and Secure Connection: How It Works,作者:Joseph Stephen Savariraj
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】