Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何将TLS1.0与Python 3.8结合使用?_Python 3.x_Ssl_Openssl_Jira_Urllib3 - Fatal编程技术网

Python 3.x 如何将TLS1.0与Python 3.8结合使用?

Python 3.x 如何将TLS1.0与Python 3.8结合使用?,python-3.x,ssl,openssl,jira,urllib3,Python 3.x,Ssl,Openssl,Jira,Urllib3,我有一个使用Jira模块与Jira连接的代码。 不幸的是,Jira服务器只支持SSLv3和TLS1 我知道它们是旧协议,主机将在今年年底前接受新协议。 但在这之前,我需要使用TLS1在Jira上连接python代码 $ openssl s_client -help 2>&1 > /dev/null | egrep "\-(ssl|tls)[^a-z]" -ssl_config val Use specified configuration file

我有一个使用
Jira
模块与Jira连接的代码。
不幸的是,Jira服务器只支持
SSLv3
TLS1

我知道它们是旧协议,主机将在今年年底前接受新协议。
但在这之前,我需要使用
TLS1
在Jira上连接python代码

$ openssl s_client -help 2>&1  > /dev/null | egrep "\-(ssl|tls)[^a-z]"
 -ssl_config val            Use specified configuration file
 -tls1                      Just use TLSv1
 -tls1_1                    Just use TLSv1.1
 -tls1_2                    Just use TLSv1.2
 -tls1_3                    Just use TLSv1.3
 -ssl_client_engine val     Specify engine to be used for client certificate operations
对于Python3.6,它工作得很好,但是对于Python3.8,它不工作,它向我显示了下面的错误消息

Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from jira import JIRA
>>> import urllib3
>>> urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
>>> 
>>> options = {"server": "https://jira.mycompany.com/", "verify": False}
>>> jira = JIRA(options, auth=("user", "pass"))
WARNING:root:HTTPSConnectionPool(host='jira.mycompany.com', port=443): Max retries exceeded with url: /rest/auth/1/session (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)'))) while doing POST https://jira.mycompany.com/rest/auth/1/session [{'data': '{"username": "user", "password": "pass"}', 'headers': {'User-Agent': 'python-requests/2.23.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json,*.*;q=0.9', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache', 'Content-Type': 'application/json', 'X-Atlassian-Token': 'no-check'}}]
WARNING:root:Got ConnectionError [HTTPSConnectionPool(host='jira.mycompany.com', port=443): Max retries exceeded with url: /rest/auth/1/session (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)')))] errno:None on POST https://jira.mycompany.com/rest/auth/1/session
{'response': None, 'request': <PreparedRequest [POST]>}\{'response': None, 'request': <PreparedRequest [POST]>}
WARNING:root:Got recoverable error from POST https://jira.mycompany.com/rest/auth/1/session, will retry [1/3] in 7.597192960254091s. Err: HTTPSConnectionPool(host='jira.mycompany.com', port=443): Max retries exceeded with url: /rest/auth/1/session (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)')))
仅使用
请求
可以得到相同的结果

python3 -c "import requests; requests.get('https://jira.mycompany.com/')"
Traceback (most recent call last):
  File "/home/lazize/repos/myproj/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "/home/lazize/repos/myproj/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 381, in _make_request
    self._validate_conn(conn)
  File "/home/lazize/repos/myproj/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 976, in _validate_conn
    conn.connect()
  File "/home/lazize/repos/myproj/venv/lib/python3.8/site-packages/urllib3/connection.py", line 361, in connect
    self.sock = ssl_wrap_socket(
  File "/home/lazize/repos/myproj/venv/lib/python3.8/site-packages/urllib3/util/ssl_.py", line 377, in ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  File "/usr/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/lib/python3.8/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/usr/lib/python3.8/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)

如何将Python 3.8与TLS1一起使用?

我解决了安装下面的Python软件包的问题。
通过这种方式,它安装了
pyOpenSSL

让我引用文件:

如果使用
secure
extra安装urllib3,则需要所有必需的软件包 将安装用于证书验证的

如果我理解正确的话,Python通过模块
SSL
自带了自己的
SSL
实现

以这种方式安装
urllib3
将迫使Python通过
pyOpenSSL
使用
OpenSSL
实现

通过这种方式,它安装了
pyOpenSSL

让我引用文件:

如果使用
secure
extra安装urllib3,则需要所有必需的软件包 将安装用于证书验证的

如果我理解正确的话,Python通过模块
SSL
自带了自己的
SSL
实现

以这种方式安装
urllib3
将迫使Python通过
pyOpenSSL

使用
OpenSSL
实现,Python 3.8通常支持TLS 1.0,因此这里可能存在其他错误(但我们无法复制它)。另外,
openssl s_client
提供的命令行选项没有说明Python版本支持的TLS协议。最好利用时间尝试升级Jira实例,以停止依赖几十年前的协议,这些协议现在已在各地被淘汰。特别是因为您可能需要做的任何更改都可能成为全局性的,从而影响系统的整体安全性,这是不好的。我相信这不是你想读的,但从长远来看,这确实更有意义。现在,世界至少应该在TLS1.2上运行(1.3当然更好,但至少我们有理由认为它太新了;SSLv3、TLS1.0和1.1都很旧,而且已经损坏得很危险),Python 3.8通常支持TLS1.0,所以这里可能还有其他错误(但我们无法复制它)。另外,
openssl s_client
提供的命令行选项没有说明Python版本支持的TLS协议。最好利用时间尝试升级Jira实例,以停止依赖几十年前的协议,这些协议现在已在各地被淘汰。特别是因为您可能需要做的任何更改都可能成为全局性的,从而影响系统的整体安全性,这是不好的。我相信这不是你想读的,但从长远来看,这确实更有意义。世界现在至少应该在TLS 1.2上运行(1.3当然更好,但至少我们有理由认为它太新了;SSLv3、TLS1.0和1.1都是旧的、危险的)
pip install urllib3[secure]