无法使用Python 2.7.18连接到NBD服务器
我正在尝试使用python 2.7.18连接到NBD服务器。我的代码在centOS服务器(可能是较旧的python/ssl库)上运行时能够连接,但由于迁移到Ubuntu 20.04,当我尝试协商TLS连接时,出现以下错误:无法使用Python 2.7.18连接到NBD服务器,python,python-2.7,Python,Python 2.7,我正在尝试使用python 2.7.18连接到NBD服务器。我的代码在centOS服务器(可能是较旧的python/ssl库)上运行时能够连接,但由于迁移到Ubuntu 20.04,当我尝试协商TLS连接时,出现以下错误: File "/usr/lib/python2.7/ssl.py", line 369, in wrap_socket _context=self) File "/usr/lib/python2.7/ssl.py", line 599,
File "/usr/lib/python2.7/ssl.py", line 369, in wrap_socket
_context=self)
File "/usr/lib/python2.7/ssl.py", line 599, in __init__
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 828, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727)
在我看来,要么是由于这两个设备无法协商合适的密码导致我无法连接,要么是python/python SSL库中发生了禁止自签名证书的更改
我在网上阅读了一些解决方案(错误有点模糊),然后指出了ssl的用法。_创建_未经验证的_上下文分配,我已经尝试过(如下面的代码所示),但这似乎不起作用,这让我相信不是这样,或者我可能没有将其正确应用到我的代码中
我的代码(下面的“修复”当前不起作用)如下:
def _upgrade_socket_to_TLS(self):
thesocket = self._s
# Forcing the client to use TLSv1_2
ssl._create_default_https_context = ssl._create_unverified_context
context = ssl.create_default_context()
ssl._create_default_https_context = ssl._create_unverified_context
context.load_verify_locations(cafile=self.ca_cert)
self._s = context.wrap_socket(thesocket, server_side=False,
do_handshake_on_connect=True,
server_hostname=self.tls_hostname)
我可以确认证书路径是正确的,并且在升级到Ubuntu20.04之前,这段代码(未验证的上下文位除外)工作正常
值得注意的是,ubuntu服务器运行的是openssl 1.1.1F,而我连接的服务器运行的是1.0.2k-fips
- 对于我来说,确定这是一个连接问题(与密码相关)还是由于SSL验证引起的最好方法是什么
- 如果这是由于SSL验证,我假设我在错误地应用下面的上下文
context = ssl._create_unverified_context()
self._s = context.wrap_socket(thesocket, server_side=False,
do_handshake_on_connect=True,
server_hostname=self.tls_hostname)
由于我在网络中的连接是完全内部的,所以我假设这是合适的,但是我想考虑安全选项。我仍然不知道为什么主机名验证会导致问题