我有以下python代码:
import hvac
import os
client = hvac.Client(url='https://vault.domain.com:8200', token='s.XXXXXXXXXXXXXXXXXXX')
client.is_authenticated()
它不起作用-我得到了例外:
Traceback (most recent call last):
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='vault.domain.com', port=8200): Max retries exceeded with url: /v1/auth/token/lookup-self (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))
令牌是正确的,因为我可以用它进行vault登录。我可以telnet到https://vault.domain.com:8200没问题。
版本:
Python 3.6.9
hvac (0.10.5)
有什么想法吗?
如果我将verify=False
添加到客户端,它将给出
InsecureRequestWarning: Unverified HTTPS request is being made to host 'vault.domain.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning,
True
消息certificate verify failed
并不意味着客户端没有经过身份验证,它意味着您的客户端无法验证服务器的真实性,因为您没有向它提供任何CA证书捆绑包来检查服务器的证书。
来自hvac
文档:
verify(Union[bool,str](–布尔值指示在向Vault发送请求时是否应执行TLS验证,或者指向CA捆绑包的字符串用于验证。
因此,您应该执行verify="/path/to/ca_certs.pem"
而不是verify=False
。
当您执行verify=False
时,True
意味着客户端经过了正确的身份验证,因此您应该能够以这种方式与Vault交互,但不验证服务器的证书意味着您容易受到DNS欺骗&MITM攻击。