《图解HTTP》之确认访问用户身份的认证
1.何为认证
为确认本人是否真的具有访问系统的权限,就需要核对“登录者本人才知道的信息”、“登录者本人才会有的信息”。
核对的信息通常是指以下这些。
- 密码:只有本人才会知道的字符串信息。
- 动态令牌:仅限本人持有的设备内显示的一次性密码。
- 数字证书:仅限本人(终端)持有的信息。
- 生物认证:指纹和虹膜等本人的生理信息。
- IC卡等:仅限本人持有的信息。
HTTP/1.1使用的认证方式如下
- BASIC认证(基本认证)
- DIGEST认证(摘要认证)
- SSL客户端认证
- FormBase认证(基于表单认证)
2.BASIC认证
BASIC认证是从HTTP/1.0就定义的认证方式。即便是现在仍有一部分的网站会使用这种认证方式。是Web服务器与通信客户端之间进行的认证方式。
屏幕快照 2019-01-02 上午10.39.08.png
BASIC认证使用上不够便捷灵活,且达不到多数Web网站期望的安全性级别,因此它并不常用。
3.DIGEST认证
为弥补BASIC认证存在的弱点,从HTTP/1.1起就有了DIGEST认证。DIGEST认证同样使用质询/响应的方式,但不会像BASIC认证那样直接发送明文密码。
所谓质询响应方式是指,一开始一方会先发送认证要求给另一方,直接使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。
屏幕快照 2019-01-02 上午10.57.30.png
DIGEST认证提供了高于BASIC认证的安全等级,但是和HTTPS的客户端认证相比仍旧很弱。DIGEST认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。
DIGEST认证和BASIC认证一样,使用上不那么便捷灵活,且仍达不到
多数Web网站对高度安全等级的追求标准。因此它的适用范围也有所限制。
4.SSL客户端认证
SSL客户端认证是借由HTTPS的客户端证书完成认证的方式。凭借客户端证书认证,服务器可确认访问是否来自已登录的客户端。
- SSL客户端认证的步骤
为到达SSL客户端认证的目的,需要事先将客户端证书分发给客户端,且客户端必须安装此证书。
步骤一:接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
步骤二:用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器。
步骤三:服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。
多数情况下,SSL客户端认证不会仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证来使用。所谓双因素认证就是指,认证过程中不仅需要密码这一因素,还需要申请认证者提供其他持有信息,从而作为另一因素,与其组合使用的认证方式。
5.基于表单认证
基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。
-
认证多半为基于表单认证
不具备共同标准规范的表单认证,在每个Web网站上都会有各不相同的实现方式。如果是全面考虑过安全性能而实现的表单认证,那么就能够具备高度的安全等级。但在表单认证的实现中存在问题的Web网站也屡见不鲜。 -
Session管理及Cookie应用
基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户ID和密码与之前登录过的信息做匹配来进行认证的。
屏幕快照 2019-01-02 下午1.32.41.png
通常,一种安全的保存方法是,先利用给密码加盐的方式增加额外信息,再使用散列函数计算出散列值后保存。