我正在尝试使用SSL从Python连接到Elasticsearch节点。
我使用的是基本代码:
from elasticsearch import Elasticsearch
from ssl import create_default_context
context = create_default_context(cafile="path/to/cafile.pem")
es = Elasticsearch("https://elasticsearch.url:port", ssl_context=context, http_auth=('elastic','yourpassword'))
From:https://github.com/elastic/elasticsearch-py
我需要提供cafile.pem
和http_auth
参数。在运行Python的服务器上,已经设置了SSL连接,所以我可以对Elasticsearch进行基本查询。它是使用~/.ssh
目录中的密钥设置的:id_rsa
、id_rsa.pub
。
所以,现在我想知道我是否应该提供id_rsa.pub
密钥来代替path/to/cafile.pem
,如果是的话,那么我需要更改~/.ssh
文件夹的权限,从安全的Angular 来看,这似乎不是一个好主意。
那么,我不确定.pub
是否与.pem
相同,是否需要先转换它?那么,http_auth
是否应该被省略,因为当我从终端进行简单查询时,我不使用任何密码?
我应该如何根据最佳实践在Python中使用SSL设置对ES的访问?
我尝试了两个.pub
,并从中生成了pem
:https://serverfault.com/questions/706336/how-to-get-a-pem-file-from-ssh-key-pair
但两者都未能在context.load_verify_locations(cafile, capath, cadata)
中使用unknown error
进行create_default_context
。
3条答案
按热度按时间db2dz4w81#
对我的特殊情况的答案原来很简单。我在这里找到了:
https://elasticsearch-py.readthedocs.io/en/master/
只要在里面指定
https
url
,它就可以立即工作了。laik7k3q2#
Elasticsearch Docker镜像和Python2.7。已将ssl证书文件复制到项目的根目录。确保它是可读的,所有权和组所有权将允许读取访问。将pass和login设置为常量。
aor9mmx13#
对于自签名证书,使用:
说明:
verify_certs=False
禁止底层Python SSL模块验证自签名证书,但正确地将其发送到上游服务器。对于非自签名证书,请尝试开启verify_certs=True
。AsyncElasticsearch
,但是如果你需要同步Elasticsearch
版本,它应该直接兼容,因为所有的参数都是一样的。参见:https://elasticsearch-py.readthedocs.io/en/v8.8.1/async.html#getting-started-with-async)所以,现在我想知道我是否应该提供id_rsa.pub密钥来代替路径/to/cafile.pem,如果是的话,那么我需要更改~/.ssh文件夹的权限,从安全的Angular 来看这似乎不是一个好主意。
这些SSH密钥很可能与Elasticsearch无关,但允许您与运行Elasticsearch的服务器进行连接和身份验证。