# 【图解HTTP】第八章 确认访问用户身份的认证 作者:wallace-lai
发布:2024-03-19
更新:2023-03-26
计算机本身无法判断坐在显示器前的使用者的身份。进一步说,也无法确认网络的那头究竟有谁。可见,为了弄清究竟是谁在访问服务器,就得让对方的客户端自报家门。 可是,就算正在访问服务器的对方声称自己是ueno,身份是否属实这点却也无从谈起。为确认ueno本人是否真的具有访问系统的权限,就需要核对“登录者本人才知道的信息”、“登录者本人才会有的信息”。 核对的信息通常是指以下这些: (1)密码:只有本人才会知道的字符串信息; (2)动态令牌:仅限本人持有的设备内显示的一次性密码; (3)数字证书:仅限本人(终端)持有的信息; (4)生物认证:指纹和虹膜等本人的生理信息; (5)IC卡等:仅限本人持有的信息。 HTTP/1.1使用的认证方式如下所示: (1)BASIC认证(基本认证); (2)DIGEST认证(摘要认证); (3)SSL客户端认证; (4)FormBase认证(基于表单认证)此外,还有Windows统一认证(Keberos认证、NTLM认证); 其中BASIC认证和DIGEST认证达不到多数Web网站对高度安全等级的追求标准,这里不介绍他们的原理。 ## 一、SSL客户端认证 SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。 其认证步骤如下: (1)接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。 (2)用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器。 (3)服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。 在多数情况下,SSL客户端认证不会仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证(Two-factor authentication)来使用。所谓双因素认证就是指,**认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式**。 使用SSL客户端认证需要用到客户端证书。而客户端证书需要支付一定费用才能使用。这里提到的费用是指,从认证机构购买客户端证书的费用,以及服务器运营者为保证自己搭建的认证机构安全运营所产生的费用。因此,客户端认证是很少见的。除非是银行等需要高度安全的场景。 ## 二、基于表单认证 基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务器上的Web应用程序发送登录信息(Credential),按登录信息的验证结果认证。就是我们常见的登录认证。 由于使用上的便利性及安全性问题,HTTP协议标准提供的BASIC认证和DIGEST认证几乎不怎么使用。另外,SSL客户端认证虽然具有高度的安全等级,但因为导入及维持费用等问题,还尚未普及。所以,现存的认证绝大多数是基于表单的认证。