如何使用SSL连接到Elasticsearch?

w6mmgewl  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(3)|浏览(171)

我正在尝试使用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.pemhttp_auth参数。在运行Python的服务器上,已经设置了SSL连接,所以我可以对Elasticsearch进行基本查询。它是使用~/.ssh目录中的密钥设置的:id_rsaid_rsa.pub
所以,现在我想知道我是否应该提供id_rsa.pub密钥来代替path/to/cafile.pem,如果是的话,那么我需要更改~/.ssh文件夹的权限,从安全的Angular 来看,这似乎不是一个好主意。
那么,我不确定.pub是否与.pem相同,是否需要先转换它?那么,http_auth是否应该被省略,因为当我从终端进行简单查询时,我不使用任何密码?
我应该如何根据最佳实践在Python中使用SSL设置对ES的访问?
我尝试了两个.pub,并从中生成了pemhttps://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

db2dz4w8

db2dz4w81#

对我的特殊情况的答案原来很简单。我在这里找到了:
https://elasticsearch-py.readthedocs.io/en/master/

es = Elasticsearch(['https://user:secret@localhost:443'])

只要在里面指定httpsurl,它就可以立即工作了。

laik7k3q

laik7k3q2#

Elasticsearch Docker镜像和Python2.7。已将ssl证书文件复制到项目的根目录。确保它是可读的,所有权和组所有权将允许读取访问。将pass和login设置为常量。

es = Elasticsearch(
    hosts=[
            "https://localhost:9200"
    ],
    http_auth=(USR_LOGIN, USR_PASS),
    use_ssl=True,
    verify_certs=True,
    ca_certs="./http_ca.crt",
)
aor9mmx1

aor9mmx13#

对于自签名证书,使用:

from elastic_transport import NodeConfig
from elasticsearch import AsyncElasticsearch

client = AsyncElasticsearch(
    hosts=[
        NodeConfig(
            scheme= "https",
            host="<host URL>",
            port=443,
            verify_certs=False,
            ca_certs=None,
            ssl_show_warn=False,
        )
    ],
    http_auth=("username", "password"),
    verify_certs=False,
    ca_certs="/path/to/cafile.pem",  # PEM format
    client_cert="/path/to/tls.cert"  # PEM format
    client_key="/path/to/tls.key"    # PEM format
)
client.info()

说明:

  • CA文件和TLS证书/密钥对是根据为Elastic Stack设置基本安全性以及安全的HTTPS流量的指南生成的:https://www.elastic.co/guide/en/elasticsearch/reference/current/security-basic-setup-https.html#security-basic-setup-https。正如评论中提到的,您需要正确生成TLS证书/密钥,然后将其传递到Elasticsearch客户端库
  • 由于此答案适用于自签名证书,因此您还需要传递CA文件(PEM格式)。
  • 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的服务器进行连接和身份验证。

相关问题