Web中包含四种认证方式:Basic,Form,Digest,SSL。
Basic(HTTP 1.0 提出)
客户端请求某个资源后,服务器会发送一个401(未授权)的响应,在响应中带了Realm信息表示使用Basic认证。 浏览器接收到这个响应后会弹出一个框,输入用户名和密码。点取消表示取消认证,点确定会提交用户名、密码到服务器。 提交的方式是在HTTP头中加入:
WWW-Authorization:Basic XXXXXXX
Basic后面是用户名、密码的BASE64编码。在客户端编程中,这段内容的构造为:
a. String cre = userName + ":" + password b. Base64 encode(cre); c. add to request header with "WWW-Authroization"
Form
Form就是在页面上以Form的形式提交数据,GET或POST. 也可以使用AJAX来提交认证信息。
Digest(HTTP 1.1最基本)
为了防止重放攻击,采用摘要访问认证。客户发送一个请求后,收到一个401消息,消息中还包括一个唯一的字符串:nonce,每次请求都不一样。如:
HTTP/1.1 401 Unauthorized WWW-Authenticate: Digest realm="xxxxxxx", qop="auth,auth-int", nonce="--base code--", opaque="--base code--"
此时客户端将用户名、密码、nonce、HTTP Method和URI为校验值基础进行散列(默认为MD5)的摘要返回给服务器。响应头必须包括的5个部分:
- realm:领域,不同领域可能密码不一样
- nonce: 挑战值
- username:用户名
- digest-uri:请求URI
- response:摘要部分
服务器端则根据收到的信息加上存储的密码算出一个新的摘要与请求中的摘要比较,因为每次nonce都会变,就很难做到重放攻击了。 更多信息可参见: 参考链接
SSL
SSL协议位于TCP/IP和应用协议之间,基于公钥体制保证数据通讯的安全性。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程中不被改变。
SSL协议的工作流程: 服务器认证阶段:
- 客户端向服务器发送一个开始信息"Hello"以便开始一个新的会话连接;
- 服务器根据客户的信息确定是否需要生成新的主密钥,即会话密钥,如需要则服务器在响应客户的"Hello”信息时将包含生成主密钥所需的信息;
- 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
- 服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户(往往是一张登录页面),客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
查看原文:http://www.sherryblog.cn/?p=341