当连接的双方验证彼此的身份时,就会发生相互身份验证或双向身份验证。
阅读本文后,您将能够:
复制文章链接
相互身份验证是指通信通道的两端相互验证身份,而不是仅一侧验证另一侧。相互身份验证也称为“双向身份验证”,因为该过程是双向的。
当有人使用拼车应用程序时,他们通常会检查车牌或车辆描述,以确保他们乘坐的是正确的汽车。在他们上车后,司机会询问乘客他们的姓名,以确认他们正在接正确的人。乘客和司机都在确认他们正在与预期的人互动——以确保司机在提供正确的服务,乘客在前往目的地的汽车中,且双方都可以确认他们是与经过拼车应用程序验证的人在一起。
类似地,相互身份验证在数字通信通道中验证双方。例如,使用相互身份验证的客户端和服务器会采取步骤独立验证彼此的身份,而不是仅客户端对服务器进行身份验证。设备到设备的连接,例如物联网 (IoT) 设备之间的连接,通常也使用相互身份验证。
相互身份验证最常与传输层安全 (TLS) 协议联系在一起,但它也可以由其他协议在其他情况下使用。了解相互 TLS。
有三种主要的方法可以对通信通道的两端进行相互身份验证:
1.公钥身份验证:这种方法依赖于公钥加密。密钥是一串数据,可用于加密或数字签署数据。公钥加密使用两个密钥——一个公钥和一个私钥。用公钥加密的数据用私钥解密。
在公钥相互身份验证中,通信双方都公告一个公钥,并且双方都必须证明自己拥有与公钥相对应的私钥——就像有人出示政府颁发的身份证来验证他们的姓名一样。每一方都向另一方发送一个数字签名。如果可以使用公钥验证签名,则表示使用了正确的私钥,且发送签名的一方是合法的。
2.证书身份验证:这种方法与公钥身份验证相似,但是不是只有一个公钥,而是双方都有一个公钥证书。证书包含有助于验证各方身份的附加信息,包括谁颁发了证书和公钥、证书适用于谁、证书何时到期等等。如果双方都有证书,则可以使用 TLS 证书来进行这种类型的相互身份验证。
3.用户名和密码:尽管名称不同,但这种相互身份验证的方法仍然在服务器端使用证书。服务器向客户端出示证书,客户端验证证书。在客户端,它就像典型的用户名/密码身份验证:客户端将其用户名和密码组合发送到服务器,服务器验证凭证。
单向身份验证在互联网上一直存在。每次有人加载使用 HTTPS 的网站时,他们的设备都会通过检查服务器的 TLS 证书来验证 Web 服务器的身份。另一个例子是人们在应用程序上登录他们的帐户,在这种情况下,应用程序会验证这个人的身份。
虽然相互身份验证消除了一些安全漏洞并使某些类型的攻击更加难以实施,但它需要更多时间和计算能力才能完成信息交换。它还需要一些预先设置——通信双方都需要一组凭证、一个公私密钥对或一个公钥证书(取决于使用的身份验证类型)。这使得普通用户难以实现相互身份验证,这就是为什么当有人使用 Web 应用程序时,相互身份验证通常不是 TLS 的一部分。
相互身份验证的主要用例包括:
在途攻击:在在途攻击中,攻击者位于两方连接的中间。攻击者拦截两个方向的通信,并互相冒充对话的两端。相互身份验证有助于阻止此类攻击,因为攻击者将无法对通信的两端进行身份验证。
欺骗和冒充:攻击者使用这些攻击来欺骗服务器或用户,让他们认为他们是已知且受信任的一方。攻击者可以面向用户假冒 Web 服务器,也可以面向 Web 服务器假冒用户。当双方都必须进行身份验证时,此类攻击要困难得多。
凭证盗窃:有些形式的相互身份验证是基于密码的,这些仍然可能遭受凭证盗窃(即攻击者窃取合法用户的密码)。然而,由于相互身份验证通常是基于公钥的,根本不使用凭证,所以不可能出现凭证盗窃。这可以阻止网络钓鱼攻击,使其无法产生影响。
以下网络协议要么具有内置的相互身份验证,要么提供使用它的选项:
安全外壳协议 (SSH):SSH 是一个隧道协议,用于安全地连接到远程服务器或设备。SSH 可以使用公钥身份验证或证书身份验证。换句话说,在 SSH 中可以用公钥或公钥证书进行相互身份验证。
TLS:虽然默认情况下 TLS 不会相互验证连接的两端,但它可以用于此目的。相互 TLS (mTLS) 是最常用的相互身份验证类型之一。在 mTLS 中,连接的两端都有一个 TLS 证书。mTLS 通常用于 API 安全、IoT 安全和零信任安全应用。
相互身份验证是 Cloudflare 提供的几个零信任安全解决方案的核心。Cloudflare for Teams 是一个用于应用程序访问控制和互联网浏览的零信任解决方案套件,提供 mTLS 以验证用户和设备。Cloudflare API Shield 支持 mTLS 以用于 API 身份验证和安全性。