perl search::elasticsearch不适用于具有自签名证书的启用ssl的节点

l0oc07j2  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(463)

我将perl Package 器用于elasticsearch:“search::elasticsearch”我创建了一个对象,如下所示:

use Search::Elasticsearch;
my $e = Search::Elasticsearch->new( nodes => "192.168.0.66:9200", debug => 1);

它工作得很好,我可以使用这个对象查询elasticsearch节点。然后我尝试连接到使用自签名证书启用ssl的elasticsearch节点。我使用以下命令:

use Search::Elasticsearch;
my $e = Search::Elasticsearch->new( nodes => "192.168.0.66:9200", use_https => 1, userinfo => "testuser:testpwd", debug => 1);

但它不起作用。
如果我使用curl查询elasticsearch,我将使用以下命令:

curl https://testuser:testpwd@192.168.0.67:9200

这也不行。当我将-k开关与curl一起使用时:

curl https://testuser:testpwd@192.168.0.67:9200 -k

那就行了。我从elasticsearch节点得到响应。
现在我想使用相同的过程使用perl模块:search::elasticsearch查询相同的启用ssl的elasticsearch节点。正确的语法是什么?如何以及在何处定义'-k'开关?

lc8prwob

lc8prwob1#

使用 -k 是同义词 --insecure 所以curl不会验证证书。那么问题是,在允许不安全连接的情况下,通过加密的ssl通道进行查询有多有用?
这就违背了使用ssl的初衷,对吧?
如果您拥有对证书进行签名的ca(您应该这样做),那么您应该将其与 --cacert curl 开关

curl --cacert /path/to/cacert.pem https://testuser:testpwd@192.168.0.67:9200

或者使用perl,您还可以在 ssl_options ```
use Search::Elasticsearch;
use IO::Socket::SSL;

my $es = Search::Elasticsearch->new(
nodes => [
"192.168.0.66:9200"
],
userinfo => "testuser:testpwd",
debug => 1,
ssl_options => {
SSL_verify_mode => SSL_VERIFY_PEER,
SSL_ca_file => '/path/to/cacert.pem',
SSL_verifycn_scheme => 'http',
}
);

相关问题