![PIP3 在 RHEL 8 上安装失败,SSL 身份验证类型错误](https://linux22.com/image/780333/PIP3%20%E5%9C%A8%20RHEL%208%20%E4%B8%8A%E5%AE%89%E8%A3%85%E5%A4%B1%E8%B4%A5%EF%BC%8CSSL%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E7%B1%BB%E5%9E%8B%E9%94%99%E8%AF%AF.png)
我正在尝试在新创建的 RHEL 8 服务器上使用 PIP 安装软件包,该服务器启用了 FIPS 并运行 openssl 1.1.1k,但出现有关 dh 值错误的错误。
pip3 install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org jupyterlab_widgets ipyleaflet
Collecting jupyterlab_widgets
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)': /simple/jupyterlab-widgets/
Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)': /simple/jupyterlab-widgets/
Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)': /simple/jupyterlab-widgets/
Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)': /simple/jupyterlab-widgets/
Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)': /simple/jupyterlab-widgets/
Could not fetch URL https://pypi.python.org/simple/jupyterlab-widgets/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/jupyterlab-widgets/ (Caused by SSLError(SSLError(1, '[SSL: BAD_AUTHENTICATION_TYPE] bad dh value (_ssl.c:897)'),)) - skipping
有趣的是,如果我将 openssl 版本从 1.1.1k 降级到 1.1.1c,那么它就可以正常工作。
RedHat 列出了一个已知问题:
FIPS 模式下的 OpenSSL 仅接受特定的 DH 参数
在 FIPS 模式下,使用 OpenSSL 的传输安全层 (TLS) 客户端会返回错误的 dh 值错误并中止与使用手动生成参数的服务器的 TLS 连接。这是因为当 OpenSSL 配置为符合 FIPS 140-2 时,它仅适用于符合 NIST SP 800-56A rev3 附录 D 的 DH 参数(RFC 3526 中定义的组 14、15、16、17 和 18 以及 RFC 7919 中定义的组)。此外,使用 OpenSSL 的服务器会忽略所有其他参数,而是选择已知大小相似的参数。要解决此问题,请仅使用符合要求的组。
有没有办法指定 pip3 使用的密码组?