MongoDB默认使用的SCRAM-SHA1认证机制
SCRAM(Salted Challenge Response Authentication Mechanism),MongoDB自3.0版本开始使用SCRAM作为其默认的安全认证机制,取代了之前使用的MONGODB-CR。
这篇文档主要说明的是SCRAM认证机制的设计原理和安全性。
背景
在介绍SCRAM之前,还需要介绍下MongoDB的认证。MongoDB不保存明文密码,它的认证要求客户端(Client)提供自身合法性的依据,在3.0版本中,有3种认证机制:
- 基于密码的认证(Password-based authentication):客户端通过证明预先持有的加密值来验证身份。SCRAM-SHA-1仍采用这种机制。
- 基于证书的认证(Certificate-based authentication):客户端通过使用x.509认证签名的受信证书实现身份验证。
- 第三方认证:客户端通过外部第三方服务实现身份验证,例如Kerberos、LDAP等。
1.1 挑战-应答协议(Challenge-Response Protocols)
在3.0版本中使用了一种新的基于密码认证协议,即挑战-应答协议(Challenge-Response Protocols)。该协议的原理是服务器对客户端的连接请求都会发起一个问答过程,客户端需要在回应中证明自己知道真正的密码。这就像是一个程序员找工作去面试,他不需要在面试现场直接手撸一个系统什么的,最重要的是把思路方法、问题点和解决方案等等细节表达清楚,这样才能让面试官相信眼前的这位面试者能胜任这个岗位的工作。
挑战-应答协议也是这么回事,它需要客户端来自证身份。这种协议的好处显而易见,假的真不了,防范了重放攻击(replay attacks)。那么同样采用了挑战-应答协议的SCRAM不仅能做到这一点,它还采用了其他的安全机制以实现防范其他类型的安全攻击。
1.2 威胁模型(Threat Model)
我们假定黑客可以捕获和生成任意网络流量(事实也是如此),并检查服务器的磁盘存储内容,同时假设他在运算方面受到限制,因为他也无法突破任何标准密码原语,比如安全哈希函数。
以下是根据以上威胁模型对SCRAM的一些安全威胁场景。这些都是SCRAM的设计理由,并且实现了应对这些攻击的策略。
- 窃听(Eavesdropping):攻击者可以读取客户端和服务器之间交换的所有流量。为了防止窃听,SCRAM客户端从不在网络环境下以明文形式发送密码。
- 重放(Replay):攻击者可以将客户端的有效响应重新发送到服务器。SCRAM通过随机数(random nonces)保证每个认证会话唯一,因此协议消息仅对单个会话有效。
- 数据库泄露(Database Compromise):攻击者可以查看服务器持久内存的内容。通过在存储密码之前对密码进行salting和迭代哈希,可以降低数据库泄露的风险。
- 服务器伪装(Malicious Server):攻击者可以充当客户端的服务器。攻击者无法在不知道客户端SCRAM凭证的情况下冒充服务器。
SCRAM
2.1 协议图(Protocol Diagram)
- 客户端启动SCRAM身份验证会话
- 服务端发起challenge应答
- 客户端响应challenge,提供proof
- 服务端验证客户端的proof,并提供自己的proof
- 客户端验证服务端的proof
2.2 参考资料
具体的加密过程点我查看。
SCRAM对安全攻击的防范点我查看。
MongoDB默认使用的SCRAM-SHA1认证机制相关推荐
- php mongo 认证,MongoDB 认证机制升级
早上某php开发反映新搭建的 mongodb 副本集连不上,后发现是认证问题导致的. 具体的报错信息如下: 2019-07-11T10:31:38.142+0800 I ACCESS [conn191 ...
- 没文档也要扒源码让 ShardingSphere 支持 openGauss SCRAM 前端认证
记录自己如何在没有协议文档的情况下,根据 openGauss JDBC Driver 源码,让 ShardingSphere openGauss Proxy 支持 openGauss 的 SCRAM ...
- Kafka 如何给集群配置Scram账户认证
前言 很早之前的一篇博客[Kafka+ Centos7服务器集群详细安装教程] 详细的说了下一个真正的集群应该如何搭建Kafka环境,由于当时的需求只是能够使用Kafka服务,因此并没有做别的什么配置 ...
- Node.js数据库与身份验证(MySQL,前后端身份认证:Session 认证机制,JWT认证机制)
目录 MySQL SQL 语句语法 where 条件.and 和 or 运算符.order by 排序.count(*) 函数 在express项目中操作 MySQL 安装与配置 mysql 模块 1 ...
- SSO 认证机制对比
2019独角兽企业重金招聘Python工程师标准>>> SSO 认证机制对比 博客分类: 架构 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单 ...
- mongodb默认的用户名密码_MongoDB 设置账号和密码
https://www.cnblogs.com/mengyu/p/9071371.html 一.安装MongoDB 1.环境配置: i.操作系统:CentOS release 6.8 (Final) ...
- 常用的认证机制之session认证和token认证
一.session认证 1.session认证的过程: 前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否 ...
- (golang)HTTP基本认证机制及使用gocolly登录爬取
内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...
- jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题
一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...
最新文章
- java.util.ResourceBundle使用详解
- Community Server专题一:概述Community Server
- 深度学习之基于Inception_ResNet_V2和CNN实现交通标志识别
- C++学习第二天(打卡)
- 创建war类型的maven工程时报web.xml is missing and failOnMissingWebXml is set to true
- python分布爬虫_13天搞定Python分布爬虫(第七天)(Scrapy)
- 设置视图IOS开发(97)之自定义视图之使用XIB自定义一个UIView
- 本地提交spark_spark快速入门(三)-------spark部署及运行模式
- 50个技巧提高你的PHP网站程序执行效率
- 【理论】浅解硬件网络通信+交换机芯片+通信系统设计
- 微软卷土重来 只收购雅虎搜索业务
- Hibernate用Query删除数据表中的数据的问题(EntityManager.clear())
- 我的世界服务器怎么改无限力量,我的世界无限力量效果指令,我的世界怎么用命令方块做无限的效果...
- 什么是Data Matrix二维码
- String spilt()方法
- javascript 基本用法
- Zabbix Trapper items
- 2018年区块链红黑榜-千氪
- 基于sklearn的软硬间隔以及各类核函数的SVM实现
- 视图概念,优缺点及作用