MongoDB 自签名 SSL 连接:SSL 对等证书验证失败

2023-12-27

我已遵循本指南使用 PyMongo 的自签名 SSL 连接,作者:Wan Bachtiar https://stackoverflow.com/questions/35790287/self-signed-ssl-connection-using-pymongo#35967188创建三个 .pem 文件;服务器.pem、客户端.pem 和 ca.pem。

我使用的是 Ubuntu 16.04 和 MongoDB v3.2.11。

目的是在向公共互联网开放 MongoDB 之前确保其安全。

让我们启动 mongodb:

$ mongod --auth --port 27017 --dbpath /data/db1 
--sslMode requireSSL --sslPEMKeyFile /etc/ssl/server.pem 
--sslCAFile /etc/ssl/ca.pem --sslAllowInvalidHostnames &

Output:

root@tim:/etc/ssl# 2017-01-13T12:58:55.150+0000 I CONTROL  [initandlisten] MongoDB starting : pid=19058 port=27017 dbpath=/data/db1 64-bit host=tim
2017-01-13T12:58:55.150+0000 I CONTROL  [initandlisten] db version v3.2.11
2017-01-13T12:58:55.151+0000 I CONTROL  [initandlisten] git version: 009580ad490190ba33d1c6253ebd8d91808923e4
2017-01-13T12:58:55.151+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten] modules: none
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten] build environment:
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten]     distmod: ubuntu1604
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten]     distarch: x86_64
2017-01-13T12:58:55.152+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2017-01-13T12:58:55.153+0000 I CONTROL  [initandlisten] options: { net: { port: 27017, ssl: { CAFile: "/etc/ssl/ca.pem", PEMKeyFile: "/etc/ssl/server.pem", allowInvalidHostnames: true, mode: "requireSSL" } 
}, security: { authorization: "enabled" }, storage: { dbPath: "/data/db1" } }
2017-01-13T12:58:55.211+0000 I -        [initandlisten] Detected data files in /data/db1 created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2017-01-13T12:58:55.212+0000 W -        [initandlisten] Detected unclean shutdown - /data/db1/mongod.lock is not empty.
2017-01-13T12:58:55.212+0000 W STORAGE  [initandlisten] Recovering data from the last clean checkpoint.
2017-01-13T12:58:55.212+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4)
,config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2017-01-13T12:58:55.886+0000 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2017-01-13T12:58:55.886+0000 I CONTROL  [initandlisten]
2017-01-13T12:58:55.895+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db1/diagnostic.data'
2017-01-13T12:58:55.897+0000 I NETWORK  [initandlisten] waiting for connections on port 27017 ssl
2017-01-13T12:58:55.897+0000 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2017-01-13T12:58:56.026+0000 I FTDC     [ftdc] Unclean full-time diagnostic data capture shutdown detected, found interim file, some metrics may have been lost. OK

运行 mongod 后,我启动 mongo shell:

$ mongo --port 27017 -u "my username" -p "my password" 
--authenticationDatabase "" --ssl --sslPEMKeyFile /etc/ssl/client.pem 
--sslCAFile /etc/ssl/ca.pem --host tim

输出类似于马歇尔·法里尔提出的问题 https://stackoverflow.com/questions/35790287/self-signed-ssl-connection-using-pymongo#35967188;我们来看一下。

MongoDB shell version: 3.2.11
connecting to: 127.0.0.1:27017/datatest
2017-01-13T12:35:58.247+0000 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:38902 #8 (1 connection now open)
2017-01-13T12:35:58.259+0000 E NETWORK  [thread1] SSL peer certificate validation failed: self signed certificate
2017-01-13T12:35:58.259+0000 E QUERY    [thread1] Error: socket exception [CONNECT_ERROR] for SSL peer certificate validation failed: self signed certificate :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6

2017-01-13T12:35:58.263+0000 E NETWORK  [conn8] SSL peer certificate validation failed: self signed certificate
2017-01-13T12:35:58.263+0000 I NETWORK  [conn8] end connection 127.0.0.1:38902 (0 connections now open)

我究竟做错了什么?


经过一番搜索,这个错误似乎是由于主机名“CN”不正确造成的。

From 数字海洋 https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs:

每当您生成 CSR 时,系统都会提示您提供有关证书的信息。此信息称为可分辨名称 (DN)。 DN 中的一个重要字段是公用名 (CN),它应该是您打算使用证书的主机的完全限定域名 (FQDN)。

同样来自 MongoDB文档 https://docs.mongodb.com/manual/tutorial/configure-ssl-clients/#ssl-clients:

如果您的 MongoDB 部署使用 SSL,您还必须指定 --host 选项。 mongo 验证您要连接的 mongod 或 mongos 的主机名是否与 mongod 或 mongos 的 --sslPEMKeyFile 证书的 CN 或 SAN 匹配。如果主机名与 CN/SAN 不匹配,mongo 将无法连接。

解决方案:

我重新生成了密钥,将 localhost 替换为 CN = hostname> 并完成指南通过万·巴赫蒂亚尔 https://stackoverflow.com/questions/35790287/self-signed-ssl-connection-using-pymongo#35967188.

完成后运行以下命令有效:

$ mongo --port 27017 -u '<_username_>' -p '<_password_>' 
--authenticationDatabase "<_my db_>" --ssl --sslPEMKeyFile 
/etc/ssl/client.pem  --sslCAFile /etc/ssl/ca.pem --host localhost

笔记: MongoDB 严格规定谁可以访问哪些数据库,在 mongo shell 中进行快速测试:

> 显示数据库

返回错误。但是,我的用户实际上只能访问“my db>”,因此循环遍历“my db>” 工作完美。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 自签名 SSL 连接:SSL 对等证书验证失败 的相关文章

  • 使用 MongoDB 和 ASP.NET MVC 进行分页的有效方法

    我们正在创建一个应用程序 MongoDB 作为数据库 我们正在使用MongoDB 的官方 C 驱动程序 http docs mongodb org ecosystem drivers csharp 我们有一个包含数千条记录的集合 我们想要创
  • 如何决定使用哪种NoSQL技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 MongoDB 基于文档 HBase 基于列 和 Neo4j 对象图 的优缺点是什么 我特别有兴趣了解
  • 如何减少嵌套文档聚合管道中的展开阶段?

    我是 mongodb 新手 正在尝试使用嵌套文档 我有一个查询如下 db EndpointData aggregate group id EndpointId RequestCount sum 1 FirstActivity min Dat
  • Mongodb upsert 嵌入文档

    我每天每米有一份文件 如果它不存在 如何在数据数组中添加另一个子文档并创建整个文档 key 20120418 123456789 data Meter 123456789 Dt ISODate 2011 12 29T16 00 00 0Z
  • PayPal IPN 确认因 SSL 例程失败:SSL3_READ_BYTES:sslv3 警报握手失败

    由于我们方面没有进行任何更改 并且可能与 POODLE SSL3 有关 因此您的 PayPal API 对 PIN Message validate 的调用现在失败了 SSL routines SSL3 READ BYTES sslv3 a
  • 如何获取 bson 文档的大小(以字节为单位)

    bson文档的size 函数返回的int值是字节数吗 无法找到此 API 的详细信息 如何获取 bson 文档的大小 以字节为单位 这是我的代码 import org bson Document MongoDatabase db Mongo
  • 通过 iframe 的信用卡付款表格有缺点吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在许多小型企业电子商务网站中看到的一个常见功能是 当我单击 结帐 按钮时 我会离开该网站并重定向到第三方支付网关 如 paypal authoriz
  • 如何更改 MongoDB 用户权限?

    例如 如果我有这个用户 gt db system users find user testAdmin pwd some hash roles clusterAdmin otherDBRoles TestDB readWrite 我想给那个用
  • 如何使用 pymongo 在 mongodb 中查询日期?

    我试图在 mongodb 中执行查询日期 但结果始终为空 我的查询如下 in the begin code def init self self now datetime now self db conexaoMongo self hora
  • 如何将指纹添加到密钥库

    我在写入 SSL 套接字时遇到以下异常 javax net ssl SSLHandshakeException sun security validator ValidatorException PKIX path validation f
  • 如何从数组中删除重复的条目?

    在下面的示例中 Algorithms in C 出现两次 The unset修饰符可以删除特定字段 但如何从字段中删除条目 id ObjectId 4f6cd3c47156522f4f45b26f favorites books Algor
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • AWS ACM 证书管理 删除正在使用的证书

    我想删除 AWS Certificate Manager 中正在使用的 AWS 证书 为此 我使用建议的 AWS CLI 和以下命令 aws iam delete server certificate server certificate
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • 获取对象数组中每个嵌套对象的虚拟属性?

    所以我知道如何获取单个虚拟属性 如 Mongoose 文档中所述 PersonSchema virtual name full get function return this name first this name last 但如果我的
  • Android 2.3.4 SSL问题

    升级到 Android 2 3 4 后 出现以下异常 javax net ssl SSLException Read error ssl 0x I O error during system call Connection timed ou
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而

随机推荐

  • :force => true 在模式文件中意味着什么

    如果你查看 db schema rb 你会看到类似的内容 create table users force gt true do t 什么是 force gt true mean 来自Rails 文档 http api rubyonrail
  • 计算用箭头和鼠标移动的对象

    我正在使用 openGL 做一个 Maya 模拟器应用程序 一切进展顺利 只有一个麻烦 我无法计算出通过鼠标移动物体的 100 准确度 我使用 3D 坐标中的箭头和屏幕坐标中的箭头的缩放 并将其乘以一些缩放来计算屏幕坐标的 x 和 y 方向
  • TensorFlow 嵌入查找

    我正在尝试学习如何使用 TensorFlow 构建用于语音识别的 RNN 首先 我想尝试 TensorFlow 页面上提供的一些示例模型TF RNN https www tensorflow org versions master tuto
  • 如何为 Chrome 上的每个选项卡获取不同的徽章值?

    我正在尝试做像 adblock 那样的事情 Adblock 计算 广告 的数量并更新徽章值 目前 我尝试对 背景页面 执行某些操作 但它们仅运行一次 并且所有选项卡的徽章值都相同 我无法使用浏览器操作 popup html 因为它仅在单击后
  • 在与其他线串的交叉点处匀称分割线串

    我有一组与其他 LineString 相交的 LineString 我想在这些交叉点将 LineString 分割成单独的线段 我有一个解决方案 但我认为这不是最好的方法 假设我们正在处理一个 LineString gt gt gt imp
  • 基于滚动位置的 div 位置

    我希望我的徽标根据网站上的滚动位置垂直上下滚动 就像默认滚动条指示您在网站上的位置一样 我希望我的徽标也能这样做 当您位于网站页面的顶部时 徽标位于顶部 而当您位于底部时 徽标将位于页面底部的垂直栏中 位于网页左侧 我不知道如何解决这个问题
  • Curl_exec 在 php 中返回 null

    我在使用curl操作获取数据时遇到问题 在这里我隐藏了令牌 如果我仅在浏览器中使用网址 那么它会返回数据 但这里它为空
  • 根据条件收集变量 (R)

    我正在阅读 R for Data Science 一书 并希望根据条件 类似于选择 从数据集中 收集 多个变量 具体来说 我想只选择连续变量而不是分类变量 如何在不手动指定变量的情况下完成此任务 下面不行 library tidyverse
  • node.js 将 http 响应写入流

    我正在通过 http 获取一些二进制数据 我的代码如下所示 var writeStream fs createWriteStream fileName request url function err res res socket pipe
  • Gecko(或任何其他布局引擎)如何呈现文档/页面?

    浏览 Gecko 的文档来了解它如何呈现网页有点困难 我正在对主要浏览器上的项目进行一些性能分析 以了解如何提高响应时间 我知道那里有优化技术 但我并不真正理解它们的基础 我相信如果我知道浏览器引擎如何做它们的事情 这个问题就会得到解决 我
  • 如何在角度应用程序中对 router.navigate 进行单元测试 [重复]

    这个问题在这里已经有答案了 我正在为角度应用程序运行单元测试 我想对导航在角度应用程序中是否正常工作进行单元测试 if this customer length 0 this router navigate nocustomer 以及这个的
  • Laravel 4.1:如何对雄辩的渴望关系进行分页?

    存在关于旧的 L3 急切加载分页的问题 而不是使用 eloquent 但我想使用雄辩来获得与分页的热切加载关系 主要型号 Topic与有一对多关系Posts 所以那个Topic有很多Posts 我用这个函数获取所有数据 public fun
  • 在 Objective-C 中,什么实用程序在注释中使用 @brief 标签?

    我刚刚开始使用 Objective C 编程 发现了一些示例注释 如下所示 brief The UIImageView we use to display the image generated from the imageBuffer 目
  • MATLAB 向量化:从向量元素填充结构体字段

    我有一个结构向量 每个结构都有一个字段x s1 x 1 s2 x 2 s3 x 3 S s1 s2 s3 我想设置字段x中所有结构的S从给定向量X 即我想对以下循环进行矢量化 X 97 98 99 for i 1 length S S i
  • 是否有关于设置 Mamp Pro 以便本地网络用户可以查看/编辑站点的明确指南?

    我一直在研究如何设置 LAN Mamp Pro 服务器 以便本地用户可以编辑 查看站点 但似乎有很多混乱 至少根据我阅读的原因 我很困惑 具体问题 将 Apache Mysql 作为 www mysql 运行 当我将用户切换到 www my
  • 反转或反向迭代 unordered_map

    我正在尝试以相反的顺序打印 unordered map 的内容 但是 它没有 rbegin 或 rend 所以你不能使用reverse iterator unordered map 的反转应该如何完成 编辑 来自评论 我希望键按照插入的顺序
  • Shadow dom ::part 元素的样式子元素

    我有一个 Web 组件 可以在 Shadow dom 中呈现以下内容
  • 在完成命令按钮操作时调用 javascript

    命令按钮操作完成后如何调用 JavaScript 函数 我正在使用 JSF 1 0 只需让 JSF 有条件地呈现所需的脚本即可 E g
  • Chrome 中 SVG 线性渐变的舍入误差?

    我最近在 Chrome 渲染 SVG 线性渐变时发现了一些问题 看看下面这个 SVG
  • MongoDB 自签名 SSL 连接:SSL 对等证书验证失败

    我已遵循本指南使用 PyMongo 的自签名 SSL 连接 作者 Wan Bachtiar https stackoverflow com questions 35790287 self signed ssl connection usin