我们的秘密服务器 (Vault) 在 Docker 容器外返回一个有效的 SSL 证书链,但在从 Docker 容器内部连接时不返回任何证书。
Vault 连接在 Docker 之外没有问题,但在容器内返回以下内容:
requests.exceptions.SSLError: HTTPSConnectionPool(host='api.vault.secrets.ourwebsite.net', port=443): Max retries exceeded with url: /v1/auth/cert/login (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))
我已验证相同的公共证书、私钥和 CA 文件正在容器内外使用。
在 Docker 之外,
openssl s_client -showcerts -connect api.vault.secrets.ourwebsite.net:443
返回一个有效的证书链。在 Docker 内部,我收到相同命令的以下内容,服务器响应时没有证书:
140474014459792:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1677705485
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
我相信 Docker 内部正在发生某种网络魔法/开销,其想法来自 https://stackoverflow.com/a/37974584。我不确定这是否与 iptables、我们的 VPN 或其他来源有关。
我希望连接在同一台机器上的 Docker 内部和外部都能正常工作。