常见的用户身份认证方式:
在HTTP1.1中通常存在下面几种认证方式:
由于SSL认证是我们日常开发基础最多的的,所以首先来理解一下。
SSL是同时使用对称加密和非对称加密的方式,在链接的过程中使用非对称加密,而在连接之后使用对称加密,类似在两边先通过身份牌认识双方,然后用特定的通行证完成双方的通信。
安全套接字层 (SSL) 技术通过加密信息和提供鉴权,保护您的网站安全。一份 SSL 证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。浏览器指向一个安全域时,SSL 同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。
对于SSL的认证方式,基本的流程如下(注意这里省略一步是客户端需要安装SSL证书):
当然书中提到的模糊的交互过程,下面是关于SSL两种认证方式的区别和细节:
单向认证在整个SSL握手流程中仅仅单向验证了服务器的SSL证书。因此这个单向认证过程使客户端浏览器可以连接到正确的网站服务器,并且仅通过安全连接将所有数据传输到目标站点。
主要的步骤和单向认证一致,这里仅仅介绍有差别的步骤,主要差别是在客户端发送加密方式之前,服务端会多一步索要客户端证书的步骤,然后在选择好加密方式之后不是通过明文的方式而是通过客户端给的公钥进行加密再进行返回。而其他步骤基本照旧,最终改动如下:
表单认证也就是我们常说的账号密码登录。绝大多数的网站基本使用表单认证+SSL认证结合的方式,基本能保证99%的请求能建立安全链接,保证客户的信息不被窃取。但是因为表单认证没有规范和标准,质量也参差不齐,所以不是所有网站有表单认证就是安全的,但是有比没有强不少。
Cookie
和 Session
作为HTTP无状态的一种用户信息暂存的补救机制,作用是让客户在登录某个网站之后可以保持一段时间或者很长一段时间不需要重新登录,或者说保存一些网站的账户密码登录的时候自动填充,总之是提升浏览器使用体验的东西。
Cookie
和 Session
通常是一起作用的,下面是客户登录中 Cookie
和 Session
作用的基本流程:
向客户端返回响应时,会在首部字段 Set-Cookie 内写入 Session ID(如 PHPSESSID=028a8c…)。
SessionID应该保证其安全性和难以推测的特性,常见处理方式使用加盐对于密码进行二次的哈希处理,这种方式是使用比较多的方式,防止XSS攻击获取到密文之后解密获得账户密码。
为减轻跨站脚本攻击(XSS)造成的损失,建议事先在 Cookie 内加上
httponly
属性。
BASIC 认证(基本认证)是从 HTTP/1.0 就定义的认证方式。还有极少部分网站在使用,作为大概了解即可。
大致步骤如下:
401 Authorization Required
,返回带WWW-Authenticate
首部字段的响应。401 Authorization Required
通知客户端需要BASIC认证。为了通过BASIC认证,需要把ID密码发给客户端,加密方法是串联用户ID和密码用连接符冒号链接,然后Base64加密。可以看到整个过程最大的问题是Base64不加密,一旦获取到传输信息通过字典暴力破解基本两下就可以解开。
为了解决Basic认证问题,后续出现了DIGEST 认证进行升级,HTTP/1.1 起就有了 DIGEST 认证,DIGEST 认证同样使用质询 / 响应
的方式。
什么是质询呢?指的是一方发送认证请求之后需要利用服务器返回的质询码生成响应码,最后通过响应码认证。
整个 DIGEST 认证的过程如下:
401 Authorization Required
,返回带WWW-Authenticate
首部字段的响应,同时Authenticate
还会传送响应认证需要的临时质询码。DIGEST
** 认证**必需的首部字段 Authorization
信息。Authorization
请求,然后返回一条 Request-URI
响应。DIGEST和BASIC认证看上去比较像,但是在安全性上比使用明文Base64多了一重认证,所以安全性要高上不少。但是因为认证方式十分不灵活所以使用的范围依然受限。
现如今的主流认证方式使用身份令牌+对称加密的方式,实际上和质询认证的方式类似,只不过整个流程和细节更加完善一点而已。
另外身份令牌一般用于接口对接,对于一般用户通常依然使用表单认证。
Kerberos
是一种身份认证协议,被广泛运用在大数据生态中,甚至可以说是大数据身份认证的事实标准。本文将详细说明 Kerberos 原理。
题外话
Kerberos指的是西方神话中的地狱三头犬。在古希腊神话中Kerberos含义:有着一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中。
NTLM
NTLM是NT LAN Manager
的缩写,NTLM是基于挑战/应答的身份验证协议,是 Windows NT 早期版本中的标准安全协议。
个人粗略看了一下这个认证,看上去十分复杂并且流程繁琐,这里找了几篇博客作为储备,有需要之后再来学习,推荐阅读顺序是213,其中第二篇整理的比较系统,第一篇虽然比较老但是是英文的加上给了很多图,适合学技术同时顺带提升英语阅读水平:
https://www.roguelynn.com/words/explain-like-im-5-kerberos/
https://blog.csdn.net/sky_jiangcheng/article/details/81070240
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。