2016-06-07 110 views
0

我正在使用elasticsearch 2.3.1和python 2.7。我试图创建一个简单的实例,并测试作为Elasticsearch:安装屏蔽时无法使用python进行连接

esInstance = Elasticsearch(['https://'+shield_uname+":"+shield_pass+"@"+server+":"+port]) 

print esInstance.info() 

,但我得到

elasticsearch.exceptions.SSLError: ConnectionError(EOF occurred in violation of protocol (_ssl.c:590)) caused by: SSLError(EOF occurred in violation of protocol (_ssl.c:590)) 

我到底做错了什么?当我尝试时出现同样的错误

requests.get("https://"+shield_uname+":"+shield_pass+"@"+server+":"+port, verify=False) 

我该如何解决这个问题?

回答

1

我认为你最好只是passing the fields as arguments,因为你已经将它们作为单独的变量。

这是“最充分”的版本的认证。例如,您的变量插入:

# SSL client authentication using client_cert and client_key 

es = Elasticsearch(
    [server], 
    http_auth=(shield_uname, shield_pass), 
    port=port, 
    use_ssl=True, 
    verify_certs=True, 
    ca_certs='/path/to/cacert.pem', 
    client_cert='/path/to/client_cert.pem', 
    client_key='/path/to/client_key.pem', 
) 

注意的参数port都处理SSL后。如果你真的在使用证书,那么你需要确定你已经告诉Python他们。如果您使用的是标准证书,则可以使用certifi,如上面的链接所示。

+0

谢谢,但我没有任何证书或钥匙在我身边。我可以用use_ssl = False来使用http_auth吗? – AbtPst

+0

是的,你可以使用'http_auth'而不使用SSL,但这确实意味着你的用户名/密码会以纯文本的形式通过你的网络(可以测试,但不能用于生产!)。这相当于使用'http',但要这样做,您可以在'port'设置为删除SSL使用/设置后删除所有内容。 – pickypg

+0

完美!这是我现在需要做的。谢谢 – AbtPst