0

首先,我知道 TLSv1.0 非常旧,不应该使用,但我需要连接到一些不支持任何其他 atm 的非常旧的本地硬件

#import ssl
from OpenSSL import SSL

try:
    import urllib3.contrib.pyopenssl
    urllib3.contrib.pyopenssl.inject_into_urllib3()
except ImportError:
    pass

import requests sys, os, select, socket

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
from requests.packages.urllib3.contrib import py

CIPHERS = (
    'ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:
    ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA:'
)

class TlsAdapter(HTTPAdapter):

    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = SSL.Context(SSL.TLSv1_METHOD)
        self.poolmanager = PoolManager(*pool_args,
                                       ssl_context=ctx,
                                       **pool_kwargs)

session = requests.Session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2)
session.mount("https://", adapter)

data = { "key":"value"}
try:
    r = session.post("https://192.168.1.1", data)
    print(r)
except Exception as exception:
    print(exception)

我尝试了几种方法。上面的代码大部分是从过去发布的类似问题中提取的,但是 python3 ssl 不再支持 TLSv1,因此它会引发不受支持的协议错误。我添加了“import urllib3.contrib.pyopenssl”来尝试强制它使用 pyOpenSSL,而不是按照这个 urllib3 文档。此代码的当前错误是
load_verify_locations() takes from 2 to 3 positional arguments but 4 were given
我知道这是来自 urllib3 上下文的验证部分,我需要修复 pyOpenSSL 的上下文,但我一直被困在这里试图修复上下文。

4

1 回答 1

0

在“https://www.ssllabs.com/”中分析了有问题的网站,模拟器没有使用python进行测试。我没有成功使用python。但是,使用 jdk 1.8 ,我能够在“https://www.youtube.com/watch?v=xSejtYOh4C0”中提到的安全文件中评论该行,并且能够解决该问题。

服务器更喜欢这些密码套件。这些受支持的密码是否在 urllib3 中?

TLS_RSA_WITH_RC4_128_MD5 (0x4) 不安全 128 TLS_RSA_WITH_RC4_128_SHA (0x5) 不安全 128 TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa) 弱

现在我遇到了以下错误:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='{}', port={}): 最大重试次数超出 url: /xxx.htm (由 ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file或目录')))

于 2022-02-18T21:01:46.943 回答