哪个pem文件让我用ssl验证您的身份?
现在,我的Centos 7服务器似乎没有将您列入受信任CA列表
/etc/pki/ca-Trust/SOURCE/README.md表示:
目录/etc/pki/ca-Trust/source/包含CA证书和
PEM文件格式的信任设置。此处找到的信任设置将为
具有高优先级的解释-高于
/usr/share/pki/ca-Trust-source/。
=============================================================================
快速帮助:将简单PEM或DER文件格式的证书添加到
系统上受信任的CA列表:
将其复制到
/etc/pki/ca-Trust/源/锚点/
子目录,然后运行
更新-CA-信任
指挥部。
如果您的证书是扩展的Begin Trusted文件格式,
然后将其放入主的源/目录中。
=============================================================================
有关其他信息,请参阅更新-ca-Trust(8)手册页。
默认情况下,CentOS中应包含IdenTrust根证书。尝试将sslCA指向/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt.
另一件事:在客户机代码中设置sslKey和sslCert。这些参数用于客户端证书身份验证;它们与验证到服务器的SSL连接无关。您还提到您正在使用MongoDB的用户名和密码。我不熟悉MongoDB,但您通常对客户端使用基于密码的身份验证或基于证书的身份验证,而不是两者兼而有之。您可能还必须在服务器端进行配置才能使其工作(至少在MySQL等应用程序中是这样工作的)。TL;DR:您可能希望在客户端代码中去掉sslKey和sslCert。我不知道这是否有帮助,但是,这是服务器到服务器,而不是客户端到服务器,pfg:
尝试将sslCA指向/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
现在,错误已从
MongoError:无法获取颁发者证书
至
MongoError:无法获取本地颁发者证书,同时MongoDB文档指定:
司机应验证服务器证书并提供有效证书
如果将服务器配置为执行证书验证,则需要通过驱动程序传递证书并验证检索到的证书。
您通常对客户端使用基于密码的身份验证或基于证书的身份验证,而不是两者兼而有之
需要说明的是,USER:PASSWORD供MongoDB内部使用(与SSLauth无关)。它是由数据库管理员概述的mongo用户。此用户在Site1.com上的My mongod.log中对数据库的一部分具有特定读/写权限
2016.05-08T14:59:20.747+0200I网络[初始化和侦听]正在等待端口27017上的连接
48133-05-08T15:07:26.818+0200I网络[初始化和监听]已接受Site2.com:02001(1连接现已开通)
26.828-05-08T15:07:26.828+0200E网络[连接1]SSL端证书验证失败:证书不受信任
48133(0个连接现已开通),我猜站点1试图通过openssl验证站点2的pem文件,但我不知道如何在终端测试,所以我尝试验证站点1‘S自己的pem文件以各种组合(用棍子敲打),我可以看到我也得到了
答:无法获得颁发者证书
B:无法获取本地颁发者证书
顺便说一句:我按照mongdb文档的建议连接了文件:
Cat Prikey.pem cert.pem>/etc/letsENCRYPT/live/site1.com/mongod.pem
和
Cat lets-ENCRYPT-x3-cross-signed.pem isrgrootx1.pem>/etc/letsENCRYPT/MON神-LETSENCRYPT.pem
发生的事情(也许有用):
[根@面板~]#openssl Verify-Verbose-Cafile/etc/letsencrypt/lets-encrypt-x3-cross-signed.pem/ETC/letsENCRYPT/LIVE/SITE1.com/mongod.pem
/etc/letsENCRYPT/live/site1.com/mongod.pem:C=US,O=我们加密,CN=我们加密授权机构X3
%1深度查找时出现错误2:无法获取颁发者证书
..。
[ROOT@panel~]#openssl Verify-Verbose-Cafile/etc/letsENCRYPT/mongoid-letsENCRYPTT.pem/etc/letsENCRYPT/live/site1.com/mongod.pem
/etc/letsENCRYPT/live/site1.com/mongod.pem:C=US,O=我们加密,CN=我们加密授权机构X3
%1深度查找时出现错误2:无法获取颁发者证书
..。
[根@面板~]#openssl Verify-Verbose-Cafile/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt/ETC/letsENCRYPT/LIVE/SITE1.com/mongod.pem
/etc/letsENCRYPT/live/site1.com/mongod.pem:cn=site1.com
0深度查找时出现错误20:无法获取本地颁发者证书
..。
[根@面板~]#openssl Verify-Verbose-Cafile/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt/ETC/letsENCRYPT/LIVE/Site1.com/fullchain.pem
/etc/letsencrypt/live/site1.com/fullchain.pem:CN=Site1.com
0深度查找时出现错误20:无法获取本地颁发者证书
..。
[根@panel~]#openssl Verify-Verbose-Cafile/etc/letscrypt/live/site1.com/mongod.pem/etc/letsENCRYPT/live/site1.com/fullchain.pem
/etc/letsencrypt/live/site1.com/fullchain.pem:CN=Site1.com
0深度查找时出现错误20:无法获取本地颁发者证书
..。
[ROOT@panel~]#openssl Verify-Verbose-Cafile/etc/letsENCRYPT/mongoid-letsENCRYPTT.pem/etc/letsENCRYPT/live/site1.com/mongod.pem
/etc/letsENCRYPT/live/site1.com/mongod.pem:C=US,O=我们加密,CN=我们加密授权机构X3
错误2在1深度查找:无法获取颁发者证书,我有了一个想法(从逻辑上讲我认为我可以修复它),方法是结合letsEncrypt工作人员早先关于使用fullchain.pem而不是cert.pem的建议,但按照MongoDB的要求将文件连接到Prikey.pem
也遵循@pfg使用/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt AS-Cafile的建议
CAT/ETC/letsENCRYPT/LIVE/Site1.com/Prikey.pem/ETC/LIVE/Site1.com/Fullchain.pem>/etc/letsencrypt/live/site1.com/mongodfull.pem
然后测试openssl再次验证站点1‘S自己的问题
[根@面板~]#openssl Verify-Verbose-Cafile/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt/etc/letsencrypt/live/site1.com/mongodfull.pem
/etc/letsencrypt/live/site.com/mongodfull.pem:CN=Site1.com
0深度查找时出现错误20:无法获取本地颁发者证书,更多尝试使用新的pem文件验证自己的pem
OPENSSLVerify-Verbose-Cafile/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt/etc/letsencrypt/live/site1.com/mongodfull.pem
/etc/letsencrypt/live/site1.com/mongodfull.pem:CN=Site1.com
0深度查找时出现错误20:无法获取本地颁发者证书
…
OPENSSLVerify-Verbose-Cafile/etc/letsencrypt/lets-encrypt-x3-cross-signed.pem/etc/letsencrypt/live/site1.com/mongodfull.pem
/etc/letsencrypt/live/site1.com/mongodfull.pem:C=US,O=我们加密,CN=我们加密授权机构X3
%1深度查找时出现错误2:无法获取颁发者证书
…
OPENSSLVerify-Verbose-Cafile/ETC/let加密/isrgrootx1.pem/etc/letsencrypt/live/site1.com/mongodfull.pem
/etc/letsencrypt/live/site1.com/mongodfull.pem:CN=Site1.com
0深度查找时出现错误20:无法获取本地颁发者证书
…
OPENSSLVerify-Verbose-Cafile/ETC/letsENCRYPT/MON神-LETS-ENCRYPT.pem/etc/letsencrypt/live/site1.com/mongodfull.pem
/etc/letsencrypt/live/site1.com/mongodfull.pem:C=US,O=我们加密,CN=我们加密授权机构X3
%1深度查找时出现错误2:无法获取颁发者证书,需要(‘MongoDB’)。MongoClient.Connect(
‘mongodb://benz:xxxx@site1.com:27017/db?ssl=true’
,{服务器:{
SslValify:True
,check ServerIdentity:True
,sslCA:[require(‘fs’).readFileSync(‘/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt’)]
,sslKey:require(‘fs’).readFileSync(‘/etc/letsencrypt/live/site2.com/privkey.pem’)
,sslCert:require(‘fs’).readFileSync(‘/etc/letsencrypt/live/site2.com/mongodfull.pem’)
}}
,函数(e,db){
Console.log(e,db);
数据库关闭();
});
仍然会导致
MongoError:无法获取本地颁发者证书
尽管mongofull.pem同时包含这两种内容
/etc/letsENCRYPT/live/site2.com/Prikey.pem
/etc/letsENCRYPT/live/site2.com/fullchain.pem
和
周氏和尚:和尚/etc/letsencrypt/live/site2.com/mongodfull.pem
Chmod 600/etc/letsencrypt/live/site2.com/mongodfull.pem,Benzmuircroft:
我不知道这是否有帮助,但这是服务器到服务器,而不是客户到服务器
这在TLS中不是一个现有的概念。客户端连接到服务器,即使该客户端本身可能是服务器。
客户端可以使用客户端证书作为身份验证机制,但这基本上是对基于密码的身份验证的替代,并不是绝对必要的。
在本指南的基础上,需要通过各个步骤启用客户端证书身份验证,还需要配置每个用户的证书主体。
我的建议:保持简单-跳过客户端证书,并在使用TLS时尝试使用常规的基于密码的身份验证。这意味着:MongoDB服务器获得一个证书和私钥,而您的客户端至多获得一个CA文件(也可能是ca-bundle.trust.crt)--也就是说,您的客户端代码中没有sslKey或sslCert。
一旦该方法起作用,并且您决定仍然希望使用客户端证书作为身份验证方法(而不是密码),您应该能够遵循该指南。该指南是不完整的,因为它没有说明如何将验证码集成到连接代码中(如下所示)
奔驰:XXXX与SSL无关。它位于连接后对数据库的读/写权限的SSL之后
Required(‘MongoDB’).MongoClient.Connect(
‘mongodb://benz:xxxx@site1.com:27017/db?ssl=true’
,{服务器:{
SslValify:True
,check ServerIdentity:True
,sslCA:[require(‘fs’).readFileSync(‘/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt’)]
}}
,函数(e,db){
Console.log(e,db);
数据库关闭();
});
仍然会导致
MongoError:无法获取本地颁发者证书
为什么我不能成功使用任何OpenSSL验证命令?你能提供你用来在服务器上生成.pem文件的命令--sslPEMKeyFile吗?我现在没有用户
Required(‘MongoDB’).MongoClient.Connect(
‘mongob://site1.com:27017/db?ssl=TRUE’
,{服务器:{
SslValify:True
,check ServerIdentity:True
,sslCA:[require(‘fs’).readFileSync(‘/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt’)]
,sslKey:require(‘fs’).readFileSync(‘/etc/letsencrypt/live/site2.com/privkey.pem’)
,sslCert:require(‘fs’).readFileSync(‘/etc/letsencrypt/live/site2.com/mongodfull.pem’)
}}
,函数(e,db){
Console.log(e,db);
数据库关闭();
});
但即使没有用户,它仍然会导致
MongoError:无法获取本地颁发者证书,pfg:
您能提供用于生成服务器上正在使用的.pem文件的命令--sslPEMKeyFile吗?
CAT/etc/letsencrypt/lets-encrypt-x3-cross-signed.pem/ETC/letsENCRYPT/isrgrootx1.pem>/ETC/letsENCRYPT/mongoid-letsENCRYPT.pem
引用MongoDB 3.2.x SSLwith LetsENCRYPT·GitHub,那是Chain/CA文件。
PEMKeyFile可能应该是cat Prikey.pem cert.pem(来自客户端的原始文件)。
(更长的解释:该指南最初是为X1中间证书编写的,它指向ISRG根证书。当前的中间证书(X3)不指向ISRG根,因此您必须使用IdenTrust(DST X3)根。)
配置服务器后,您可以使用一些OpenSSL代码来验证服务器是否正在发送中间证书,如下所示:
Openssl S_客户端-showcerts-连接站点1.com:mongoport
然后验证输出是否包含以下行:
1 S:/C=US/O=我们加密/CN=我们加密授权X3
I:/O=数字签名信任公司/CN=DST Root CA X3,已确认!
1 S:/C=US/O=我们加密/CN=我们加密授权X3
I:/O=数字签名信任公司/CN=DST根CA X3
我也看到了
可接受的客户端证书CA名称
/C=US/O=让我们加密/CN=让我们加密Authority X3
MongoError:无法获取本地颁发者证书