某些Web页面只想让特定的人浏览,为达到这个目标,必不可少的就是认证功能。
什么是认证
为了弄清究竟是谁在访问服务器,就得让对方的客户端自报家门。
-
核对的信息通常如下:
- 密码:只有本人才会知道的字符串信息
- 动态令牌:仅限本人持有的设备内显示的一次性密码
- 数字证书:仅限本人持有的信息
- 生物认证:指纹和虹膜等本人的生理信息
- IC卡等:仅限本人持有的信息
-
HTTP使用的认证方式:
- BASIC认证(基本认证)
- DIGEST认证(摘要认证)
- SSL客户端认证
- FormBase认证(基于表单认证)
BASIC认证
BASIC认证是从HTTP/1.0就定义的认证方式。
- 认证步骤
- 当请求的资源需要BASIC认证时,服务器会返回状态码401 Authorization Required,并返回带WWW-Authenticate首部字段的响应。该字段内包含认证的方式(BASIC)及Request-URI安全域字符串(realm)。
- 接收到状态码401的客户端为了通过BASIC认证,需要将用户ID及密码发送给服务器。发送的字符串内容是由
用户ID:密码
经过Base64编码处理后的。浏览器会自动完成明文到Base64编码的转换。 - 接收到包含首部字段Authorization请求的服务器,会验证信息的正确性,如验证通过,返回一条包含Request-URI资源的响应。
-
BASIC认证虽然采用Base64编码方式,但这不是加密处理,不需要任何附加信息即可对其解码。
另外,一般浏览器也无法实现认证注销操作。 -
BASIC认证并不常用,不灵活,达不到多数Web网站期望的安全性等级。
DIGEST认证
DIGEST认证同样使用质询/响应的方式(challenge/response),但不会像BASIC认证那样直接发送明文密码。
质询响应方式:一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。
因为发送给对方的只是响应摘要及由质询产生的计算结果,所有密码泄露的可能性就降低了。
-
DIGEST认证的步骤
- 请求需认证的资源时,服务器会随着状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(nonce)。
首部字段WWW-Authenticate内必须包含realm和nonce这两个字段的信息,客户端就是依靠向服务器回送这两个值进行认证的。 - 接收到401状态码的客户端,返回的响应中包含DIGEST认证必须的首部字段Authorization信息。
- 接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应。
- 请求需认证的资源时,服务器会随着状态码401 Authorization Required,返回带WWW-Authenticate首部字段的响应。该字段内包含质问响应方式认证所需的临时质询码(nonce)。
-
DIGEST认证提供了高于BASIC认证的安全等级,但是和HTTPS的客户端认证相比仍旧很弱。
DIGEST认证提供防止密码被窃听和保护机制,但并不存在防止用户伪装的保护机制。
DIGEST认证和BASIC认证一样,使用上不灵活,切扔达不到多数Web网站对高度安全等级的追求标准,因此它的适用范围也有所限制。
SSL客户端认证
SSL客户端认证是借由HTTPS的客户端证书完成认证的方式,凭借客户端证书认证,服务器可确认访问是否来自已登陆的客户端。
-
SSL客户端认证步骤:
为达到SSL客户端认证的目的,需要事先将客户端证书分发给客户端,且客户端必须安装此证书。- 接收到需要认证资源的请求,服务器会发送Certificate Request报文,要求客户端提供客户端证书。
- 用户选择将发送的客户端证书后,客户端会把客户端证书信息以Client Certificate报文方式发送给服务器。
- 服务器验证客户端证书验证通过后方可领取证书内客户端的公开密钥,然后开始HTTPS加密通信。
-
SSL客户端认证采用双因素认证
一般的,SSL客户端认证不仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证来使用。
双因素认证:认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他特有信息,从而作为另一个因素,与其组合使用的认证方式。 -
SSL客户端认证必要的费用
从认证机构购买客户端证书的费用、和服务器运营者为保证自己搭建的认证机构安全运营所产生的费用。
基于表单认证
基于表单的认证方法并不是在HTTP协议中定义的,客户端会向服务器上Web应用发送登录信息,按登录信息的验证结果认证。
-
认证多半为基于表单的认证
BASIC认证和DIGEST认证几乎不怎么使用,SSL客户端认证费用高,尚未普及。 -
Session管理及Cookie应用
基于表单认证的标准规范尚未有定论,一般使用Cookie来管理会话。
基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户ID和密码与之前登录过得信息做匹配来进行认证的。所以使用Cookie来管理Session,以弥补HTTP协议中不存在的状态管理功能。