HTTP Basic Auth:BA 认证

简介:

1. 背景

梳理 BA 认证的过程,以及每一步的意义和解决的问题:

  1. 加密算法

  2. 明文输入

  3. 数字签名

  4. 潜在风险:是否可能被攻破

note:

HTTP BA(基本认证)原始 BA 认证:

  • HTTP 头部:Authorization

  • Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  • 其「数字签名」默认 Base64 编码,能够被解密出来

HTTP BA 定制:

  • HTTP 头部:Authorization

  • Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  • 其「数字签名」定制的「签名算法」,「私钥」

    • 计算数字签名过程中,加入「请求参数」和「时间」

    • 防止篡改和重放攻击(时间窗口)

2. HTTP BA 认证

HTTP BA 基本数字签名:

针对用户名和密码,进行 Base64 编码:

  1. 每 3 个8Bit的字节,转换为4 个 6 Bit的字节;

  2. 6 Bit再添 2 位高位 0;

  3. 组成四个8Bit的字节;

  4. 3*8 = 4*6 = 24

  5. 3 个字节,变为 4 个字节,字符串长度增长 1/3

  6. Base64 的元字符:数字、字母、+、/

Base64 编码:是最简单的数字签名,能够避免人眼识别,但机器都可以解码出原文。

2.1. HTTP 请求中,未携带 BA 认证信息

客户端请求(没有认证信息)

GET / private /index.html HTTP/ 1.0
Host: localhost

服务端应答:401 未授权

HTTP/ 1.0  401  Authorization Required
Server: HTTPd/ 1.0
Date: Sat,  27  Nov  2004  10 : 18 : 15  GMT
WWW-Authenticate: Basic realm= "Secure Area"
Content-Type: text/html
Content-Length:  311
 
<!DOCTYPE HTML PUBLIC  "-//W3C//DTD HTML 4.01 Transitional//EN"
  "<a href="http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd" "="" style="text-decoration-line: none; border-radius: 0px; background: 0px center; border: 0px; bottom: auto; float: none; height: auto; left: auto; line-height: 20px; margin: 0px; outline: 0px; overflow: visible; padding: 0px; position: static; right: auto; top: auto; vertical-align: baseline; width: auto; box-sizing: content-box; min-height: inherit; color: rgb(0, 51, 102) !important;">http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd" >
<HTML>
   <HEAD>
     <TITLE>Error</TITLE>
     <META HTTP-EQUIV= "Content-Type"  CONTENT= "text/html; charset=ISO-8859-1" >
   </HEAD>
   <BODY><H1> 401  Unauthorized.</H1></BODY>
</HTML>

2.2. HTTP 请求中,携带 BA 认证信息

客户端的请求(用户名“"Aladdin”,口令, password “open sesame”)

GET / private /index.html HTTP/ 1.0
Host: localhost
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

 

服务端的应答

 

HTTP/ 1.0  200  OK
Server: HTTPd/ 1.0
Date: Sat,  27  Nov  2004  10 : 19 : 07  GMT
Content-Type: text/html
Content-Length:  10476

 

2.3. 工具测试 Base64 编码

可以使用 shell 来测试 base64 编码:

 

# 编码
$ echo -n  "Aladdin:open sesame"  | base64
QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  
# 解码
$ echo -n  "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="  | base64 -D
Aladdin:open sesame

3. HTTP BA 定制数字签名

HTTP BA 定制数字签名的作用:

  • 安全通信:防止参数篡改(无法防止窃听)

HTTP BA 认证,需要提前沟通的内容:

  1. client_id:字符串,一般推荐 16个字符,代表调用方

  2. secret:跟 client_id 绑定,每个 client_id 对应一个 secret

  3. 数字签名算法:使用 secret,对 HTTP 请求行内容,计算数字签名

    1. 使用 Secret

    2. HTTP 请求头:请求方法、uri、date、param(param 利用 TreeMap 按照字典序排序)

    3. signature = base64 ( HMAC-SHA1 ( ( string_to_sign, appkey ) ) );

    4. string_to_sign

HTTP BA 签名的基本过程:

  1. 计算数字签名,Client 端:根据 client_id,使用对应 secret,对 string_to_sign 进行数字签名运算

    1. string_to_sign:uri、date、param

  2. 传输数字签名,HTTP 头部携带数字签名

    1. Authorization:头部

    2. Authorization: MWS shanghai:frJIUN8DYpKDtOLCwozzyllqDzg=

    3. MWS:M web service

    4. shanghai:client id

    5. frJIUN8DYpKDtOLCwozzyllqDzg=:具体的数字签名

  3. 验证数字签名,Server 端:根据 client_id 找出对应的 secret,并根据「签名算法」,计算签名,进行校验。

BA 认证:使用「私钥」计算数字签名,通过数字签名,验证消息的完整性和可信性。

  1. 私钥:双方线下沟通「身份标识」和「私钥」

  2. 签名算法:线下沟通「签名算法」和「签名原始字符串」

  3. 双方:都使用「私钥」、「签名算法」、「签名原始字符串」,验证数字签名的正确性

3.1. 具体算法

HMAC-SHA2

HMAC:Hash-based Message Authentication Code,使用 secret 对 message 进行hash 运算,具体 Hash 算法,MD5、SHA-1、SHA-2

  • MD5:输出 hash 值 128 bit

    • MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。

    • 具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。

  • SHA-1:输出 hash 值 160 bit

    • SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。

    • SHA1基于MD5,加密后的数据长度更长,

    • 因此,比MD5更加安全,但SHA1的运算速度就比MD5要慢了。

    • 它对长度小于264的输入,产生长度为160bit的散列值。比MD5多32位。

    • 2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1

  • SHA-2:输出 hash 值 256 bit 等,具体实现不同,bit 位数也不同

    • 包含SHA-256 、SHA-512等

    • 暂未被攻破

Base64

  • 3 个 8 bit,变为 4 个 6 bit;

  • 高位 bit,填充 0;

  • 安全性:低,可以解码

 

4. 参考资料



      本文转自Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1932447,如需转载请自行联系原作者




相关文章
|
2月前
|
算法 数据库 数据安全/隐私保护
摘要认证,使用HttpClient实现HTTP digest authentication
这篇文章提供了使用HttpClient实现HTTP摘要认证(digest authentication)的详细步骤和示例代码。
244 2
|
7月前
|
安全 生物认证 网络安全
HTTP 常见认证方式
HTTP 常见认证方式
274 0
|
5月前
|
存储 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
【7月更文挑战第16天】在Flask应用中实现mTLS双向TLS加密认证可增强HTTP通信安全性。步骤包括: 1. 使用OpenSSL为服务器和客户端生成证书和密钥。 2. 配置Flask服务器使用这些证书: - 安装`flask`和`pyopenssl`. - 设置SSL上下文并启用mTLS验证: 注意事项: - 保持证书有效期并及时更新. - 确保证书链信任. - 充分测试mTLS配置.
116 2
|
4月前
|
安全 网络安全 数据安全/隐私保护
[flask]使用mTLS双向加密认证http通信
[flask]使用mTLS双向加密认证http通信
129 0
|
4月前
|
网络协议 应用服务中间件 Go
[golang]使用mTLS双向加密认证http通信
[golang]使用mTLS双向加密认证http通信
106 0
|
5月前
Qt http的认证方式以及简单实现
以上就是Qt实现HTTP认证的基本步骤。需要注意的是,以上代码未进行错误处理,实际使用时需要根据具体情况进行相应的错误处理。
125 1
|
7月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用签名认证调用HTTP触发器的步骤如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
356 7
|
7月前
|
运维 Serverless API
Serverless 应用引擎产品使用之阿里函数计算中要关掉http触发器的jwt认证才可以进行性能探测如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
运维 安全 Linux
CA认证与HTTPs原理介绍
CA认证与HTTPs原理介绍
210 2
|
7月前
|
存储 缓存 安全
https跳过SSL认证时是不是就是不加密的,相当于http?
https跳过SSL认证时是不是就是不加密的,相当于http?
407 0