Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl与Mongodb的SSL连接问题_Mongodb_Perl_Ssl - Fatal编程技术网

使用Perl与Mongodb的SSL连接问题

使用Perl与Mongodb的SSL连接问题,mongodb,perl,ssl,Mongodb,Perl,Ssl,我试图在Perl脚本中使用SSL连接Mongodb服务器,但连接失败 源代码: 错误 NPP_EXEC:运行Perl NPP_保存:C:\Users\royabhix\Desktop\perl_program\MysqlDataBaseConnection.pl CD:C:\Users\royabhix\Desktop\perl\u程序 当前目录:C:\Users\royabhix\Desktop\perl\u程序 C:\perl64\bin\perl MysqlDataBaseConnecti

我试图在Perl脚本中使用SSL连接Mongodb服务器,但连接失败

源代码: 错误 NPP_EXEC:运行Perl NPP_保存:C:\Users\royabhix\Desktop\perl_program\MysqlDataBaseConnection.pl CD:C:\Users\royabhix\Desktop\perl\u程序 当前目录:C:\Users\royabhix\Desktop\perl\u程序 C:\perl64\bin\perl MysqlDataBaseConnection.pl 进程已启动PID=11400>>> MongoDB::UsageError:eval 595第291行的MongoDB-X509凭证中的字段密码无效。 MongoDB::_凭证::newunde,机制,MongoDB-X509,机制属性,HASH0x5935f10,用户名,user123,密码。。。在C:/Perl64/site/lib/MongoDB/MongoClient.pm第1181行调用 MongoDB::MongoClient::_build__credentialMongoDB::MongoClient=HASH0x594db50在eval 450第21行调用 MongoDB::MongoClient::credentialMongoDB::MongoClient=HASH0x594db50在C:/Perl64/site/lib/MongoDB/MongoClient.pm第1149行调用 MongoDB::MongoClient::_build_uTopologyMongoDB::MongoClient=HASH0x594db50在eval 446第21行调用 MongoDB::MongoClient::topologyMongoDB::MongoClient=HASH0x594db50在C:/Perl64/site/lib/MongoDB/MongoClient.pm第1291行调用 MongoDB::MongoClient::BUILDMongoDB::MongoClient=HASH0x594db50,在eval590第1014行调用HASH0x62e87f8 MongoDB::MongoClient::newundef,主机,mongodb://username1:password123\@ip地址:端口号,1…,ssl,哈希0xA5DC68,身份验证机制,MONGODB-X509,用户名。。。在MysqlDataBaseConnection.pl第4行调用
您的错误消息来自以下行:

如果研究上面的代码,您会发现它取决于:

'MONGODB-X509' => {
    password             => sub { ! length },
    source               => sub { $_ eq '$external' },
    mechanism_properties => sub { !keys %$_ },
},
这意味着当您使用MONGODB-X509身份验证方案时,不应该提供密码,因为如果密码存在,sub{!length}将触发并生成错误

我猜密码是从您的URL中的主机参数中获取的,因此请尝试使用以下选项:

host => 'mongodb://username@ip_address1:port_number, ip_address2:port_number,ip_address3:port_number/myDB?ssl=true&replicaSet=mongo123'
如果使用证书,用户名本身实际上可能不相关

上的手册页给出了以下示例:

my $mc = MongoDB::MongoClient->new(
    host => "mongodb://sslmongo.example.com/",
    ssl => {
        SSL_ca_file   => "certs/ca.pem",
        SSL_cert_file => "certs/client.pem",
    },
    auth_mechanism => "MONGODB-X509",
    username       => "CN=XXXXXXXXXXX,OU=XXXXXXXX,O=XXXXXXX,ST=XXXXXXXXXX,C=XX"
);

顺便说一句,确切地说,这不是一个比SSL更好的TLS名称问题,而是一个与使用X.509证书进行身份验证相关的问题。

编辑问题,使代码的格式稍微好一点。如果没有SSL Mongodb+perl,请使用Mongodb;使用数据::转储程序qwDumper;我的$client=MongoDB::MongoClient->newhost=>localhost',port=>27017;my$db=$client->get_数据库'mydb';my$messages_coll=$db->get_collection'customers';my$messages=$messages\u coll->find;而我的$p=$messages->next{print Dumper$p;}O/p$VAR1={'password'=>'intel123','username'=>'royabhix','u id'=>祝福{'value'=>'5b3b96ea7517d164f102d614','MongoDB::OID'};是否尝试从“主机中的URL”属性中删除用户名和密码?也不需要在您的问题中混淆它们,它们以明文形式出现在错误消息转储中。。。因此,您现在至少需要更改这个密码y2sK……在这种情况下,您最好还需要在运行MongoDB模块时提供MongoDB模块的版本号以及perl。根据版本的不同,情况可能会发生变化……即使从主机URL中删除密码,我也会遇到相同的错误。@AbhijitRoy密码必须来自某个地方,库会看到它。你确定你打给MongoDB::MongoClient->new的电话吗?不,我不确定。我对这个地区很陌生。那么,你能给我一个完整的演示吗?如果有任何方法可以在没有身份验证的情况下执行代码,这将对我非常有帮助。@AbhijitRoy我已经从手册页添加了这个示例。请注意,URL没有任何用户名或密码。首先尝试一个简单的例子,只使用一个名称或IP,然后当它工作时,根据需要使其更加复杂。您必须同时处理许多事情,不确定主机中的URL是否有效,所以请从一个简单的URL开始
'MONGODB-X509' => {
    password             => sub { ! length },
    source               => sub { $_ eq '$external' },
    mechanism_properties => sub { !keys %$_ },
},
host => 'mongodb://username@ip_address1:port_number, ip_address2:port_number,ip_address3:port_number/myDB?ssl=true&replicaSet=mongo123'
my $mc = MongoDB::MongoClient->new(
    host => "mongodb://sslmongo.example.com/",
    ssl => {
        SSL_ca_file   => "certs/ca.pem",
        SSL_cert_file => "certs/client.pem",
    },
    auth_mechanism => "MONGODB-X509",
    username       => "CN=XXXXXXXXXXX,OU=XXXXXXXX,O=XXXXXXX,ST=XXXXXXXXXX,C=XX"
);