相关疑难解决方法(0)

Python请求将证书作为字符串发送

我似乎无法让握手正常工作.

cert = 'path/to/cert_file.pem'
url = 'https://example.com/api'

requests.get(url, cert=cert, verify=True)
Run Code Online (Sandbox Code Playgroud)

当我在本地使用它时,这是很好的,我在物理上有文件.我们在heroku上托管我们的应用程序并使用environvariables.

请求模块似乎不接受证书作为字符串.例如.

$ export CERTIFICATE="long-list-of-characters"

requests.get(url, cert=get_env('CERTIFICATE'), verify=True)
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样的事情:

cert = tempfile.NamedTemporaryFile()
cert.write(CERTIFICATE)
cert.seek(0)
requests.get(url, cert=cert.name, verify=True)
Run Code Online (Sandbox Code Playgroud)

首先,它在本地工作,但不在heroku上工作.无论如何,它不是一个坚实的解决方案.我收到SSL握手错误.

有什么建议?

python heroku python-requests

11
推荐指数
2
解决办法
3067
查看次数

使用ctypes检索本机基类的地址

我希望能够将证书传递给Python的ssl库,而无需临时文件.似乎Python的ssl模块不能这样做.

要解决此问题,我想从本机模块中检索SSL_CTX存储在ssl._ssl._SSLContext类中的基础结构_ssl.使用ctypes然后我可以SSL_CTX_*使用该上下文从libssl 手动调用相应的函数.这里显示如何在C中执行此操作,我将通过ctypes执行相同的操作.

不幸的是,我陷入了我设法挂钩load_verify_locations函数的地步,ssl._ssl._SSLContext但似乎无法获得ssl._ssl._SSLContext结构实例的正确内存地址.load_verify_locations看到的所有函数都是父ssl.SSLContext对象.

我的问题是,如何从ssl.SSLContext对象的实例到本机基类的内存ssl._ssl._SSLContext?如果我愿意,我可以轻松访问其ctx成员.

到目前为止,这是我的代码.关于如何将本机Python模块进行monkeypatch的信用转到Lincoln Clarete的禁果项目

Py_ssize_t = hasattr(ctypes.pythonapi, 'Py_InitModule4_64') and ctypes.c_int64 or ctypes.c_int

class PyObject(ctypes.Structure):
    pass

PyObject._fields_ = [
    ('ob_refcnt', Py_ssize_t),
    ('ob_type', ctypes.POINTER(PyObject)),
]

class SlotsProxy(PyObject):
    _fields_ = [('dict', ctypes.POINTER(PyObject))]

class PySSLContext(ctypes.Structure):
    pass

PySSLContext._fields_ = [
        ('ob_refcnt', Py_ssize_t),
        ('ob_type', ctypes.POINTER(PySSLContext)),
        ('ctx', ctypes.c_void_p),
        ]

name = …
Run Code Online (Sandbox Code Playgroud)

ctypes monkeypatching cpython pyopenssl python-3.x

11
推荐指数
1
解决办法
327
查看次数

从urllib2或httplib访问需要Safenet USB令牌的页面

当我有软件证书时,我确实喜欢这个.

import httplib

CLIENT_CERT_FILE = '/path/to/certificate.pem'  
connection = httplib.HTTPSConnection('url-to-open', cert_file=CLIENT_CERT_FILE)
connection.request('GET', '/')
response = connection.getresponse()
print response.status
data = response.read()
print data
Run Code Online (Sandbox Code Playgroud)

如何使用Safenet USB令牌执行相同的操作?

python

7
推荐指数
1
解决办法
508
查看次数