因此,在用户需要为Scrapy安装的许多软件包中,我认为我遇到了pyOpenSSL问题.
当我尝试创建一个教程Scrapy项目时,我得到以下输出:
Traceback (most recent call last):
File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python27\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 168, in <module>
execute()
File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 122, in execute
cmds = _get_commands_dict(settings, inproject)
File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 46, in _get_comma
nds_dict
cmds = _get_commands_from_module('scrapy.commands', inproject)
File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 29, in _get_comma
nds_from_module
for cmd in _iter_command_classes(module):
File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 20, in _iter_comm
and_classes
for module in walk_modules(module_name):
File "C:\Python27\lib\site-packages\scrapy\utils\misc.py", line …
Run Code Online (Sandbox Code Playgroud) 使用PyCrypto我能够为RSA密钥生成公共和私有PEM序列化,但在PyCrypto中,DSA类没有exportKey()方法.
尝试使用PyOpenSSL我能够为RSA和DSA密钥生成私有PEM序列化,但PyOpenSSL中没有crypto.dump_publickey方法.
我正在寻找如何为RSA和DSA密钥生成PEM序列化的建议.
非常感谢!
PS:同时我已经更改了PyOpenSSL代码,也为crypto API导出了dump_privatekey方法.PyOpenSSL错误和补丁可以在以下网址找到:https://bugs.launchpad.net/pyopenssl/+bug/780089
我已经在使用Twisted.conch所以我通过使用PyCrypto手动生成DSA/RSA密钥然后使用此密钥初始化twisted.conch.ssh.key.Key来解决此问题.Conch的Key类为字符串序列化提供了toString方法.
我想通过套接字将证书从"证书颁发机构"发送到节点.我有一个使用此示例创建的证书 https://skippylovesmalorie.wordpress.com/2010/02/12/how-to-generate-a-self-signed-certificate-using-pyopenssl/ 如何将其转换为. pem文件,所以我可以通过套接字将其作为字符串发送,然后在另一端将其转换回.pem并使用get_certificate从中提取此证书. Python:使用pyOpenSSL.crypto读取pkcs12证书 它可能是一种hacky方式,但我想为自己简化它.(或不)
我正在复活这个问题没有回答的问题 如何将PyOpenSSL对象转换为PEM编码的字符串?
我相信自从这个问题以来,pyOpenSSL已经开始支持签名验证(截至pyOpenSSL 0.11).
我正在开发一个由其他人使用M2Crypto启动的项目.由于需要使用SWIG,因此在Heroku等平台上包含M2Crypto非常痛苦.因此,我试图消除对M2Crypto的依赖,并替换为易于通过Pip安装的pyOpenSSL,并且不需要自定义构建包以及更多与SWIG相关的事情.
我遇到的问题是替换一些代码:
key = cert.get_pubkey() # Cert is an M2Crypto X509 object
key = key.get_rsa()
ret = key.verify(hashed, self.sig)
if ret != 1:
# Cert invalid ... etc.
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想通过pyOpenSSL实现相同的功能,但我觉得我可能有错误的结束 - 我尝试过使用:
crypto.verify(cert, self.sig, hashed, 'sha1')
Run Code Online (Sandbox Code Playgroud)
但这失败了 -
[('rsa routines', 'RSA_verify', 'bad signature')]
Run Code Online (Sandbox Code Playgroud)
我无法确定它是否失败,因为签名实际上是错误的,或者因为我提供的crypto.verify值实际上并不是它应该用于的!
我一直在玩的原始代码在这里需要相当多的工作来整理,但是在整个重构之前尝试一步一步地替换功能.任何指针将非常感谢!pyOpenSSL是否有能力在这里取代M2Crypto功能,我是否正确地采用它?
这就是我创建证书的方式
from OpenSSL import crypto
cert = crypto.X509()
cert.get_subject().C = countryName
cert.get_subject().ST = stateOrProvinceName
...
Run Code Online (Sandbox Code Playgroud)
这一代是什么样子.
现在,如何从普通文件向后使用PyOpenSSL从证书中提取这些值?
所以这就是我的想法
def certext(certstr):
p1 = Popen(['printf', certstr], stdout=PIPE)
p2 = Popen(['openssl', 'x509', '-text'], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()
output = p2.communicate()[0]
return output
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Pythons OpenSSL库获取X.509证书的序列号.
如果我像这样加载我的证书:
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, cert)
Run Code Online (Sandbox Code Playgroud)
然后打印序列号,如下所示:
print x509.get_serial_number()
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
5.283978953499081e+37
Run Code Online (Sandbox Code Playgroud)
如果我将它转换为十六进制,如下所示:
'{0:x}'.format(int(5.283978953499081e+37))
Run Code Online (Sandbox Code Playgroud)
它返回:
27c092c344a6c2000000000000000000
Run Code Online (Sandbox Code Playgroud)
但是,从命令行使用OpenSSL打印证书序列号会返回此信息.
27:c0:92:c3:44:a6:c2:35:29:8f:d9:a2:fb:16:f9:b7
Run Code Online (Sandbox Code Playgroud)
为什么序列号的一半被转换为零?
我有fiddle.py
4行
import requests
url = "https://randomuser.me/api/"
locations = requests.get(url,verify=False).json()
print locations
Run Code Online (Sandbox Code Playgroud)
当我跑的时候,我一直在努力
requests.exceptions.SSLError:[SSL:SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3警报握手失败(_ssl.c:590)
试试#1
组 verify=False
运行代码,相同错误.
试试#2
跑 sudo pip install --upgrade requests
运行代码,相同错误.
试试#3
跑
sudo pip install --upgrade pip
和
sudo pip install requests[security]
运行代码Diff Error.
requests.exceptions.SSLError :("坏握手:错误([('SSL例程','SSL23_GET_SERVER_HELLO','sslv3警报握手失败')],)",)
Python 2.7.10
OpenSSL 0.9.8zh 14 Jan 2016
Mac OS X 10.11.6
Run Code Online (Sandbox Code Playgroud)
如何进行调试?
我现在正在接受任何建议.
任何提示/建议/帮助将非常感谢!
我正在尝试使用gspread python模块来阅读谷歌电子表格.但是我从ssl得到了一些错误.我试图调查这个,但无法使它工作.gspread模块在内部使用python请求,似乎是使用python的ssl包.代码(我已经写过)和堆栈跟踪在下面提供了env详细信息.
ENV:
码:
import gspread
from oauth2client.client import SignedJwtAssertionCredentials
scope = ['https://spreadsheets.google.com/feeds']
credentials = SignedJwtAssertionCredentials(user_email, private_key, scope)
google_client = gspread.authorize(credentials)
worksheet = google_client.open_by_url(<worksheet_url>).get_worksheet(1)
list_of_rows = worksheet.get_all_values()
print list_of_rows
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
File "<console>", line 1, in <module>
File "/home/nikhil/.venv/nikhil/src/gspread/gspread/models.py", line 344, in get_all_values
cells = self._fetch_cells()
File "/home/nikhil/.venv/nikhil/src/gspread/gspread/models.py", line 231, in _fetch_cells
feed = self.client.get_cells_feed(self)
File "/home/nikhil/.venv/nikhil/src/gspread/gspread/client.py", line 186, in get_cells_feed
r = self.session.get(url)
File "/home/nikhil/.venv/nikhil/src/gspread/gspread/httpsession.py", line 76, in get
return self.request('GET', url, **kwargs) …
Run Code Online (Sandbox Code Playgroud) 我有两个证书,一个root.crt
和一个client.crt
签署的证书root.key
.
我想在终端上使用openssl 验证client.crt
确实已经签名了root.key
,我喜欢这样:
$ openssl verify -CAfile root.crt client.crt
> client.crt: OK
Run Code Online (Sandbox Code Playgroud)
但是当使用pyOpenSSL时,遵循文档和这篇博文,我尝试过这样的事情:
client_cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, file('client.crt').read())
root_cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, file('root.crt').read())
store = OpenSSL.crypto.X509Store()
store.add_cert(root_cert)
ctx = OpenSSL.crypto.X509StoreContext(store, client_cert)
ctx.verify_certificate()
Run Code Online (Sandbox Code Playgroud)
但后来我得到了这个错误:
X509StoreContextError:[2,1,'无法获得颁发者证书']
那我错过了什么?
我试图找到一种从给定证书获取 SAN 列表的方法,但是,我在 pyOpenSSL 文档中找不到任何内容。
关于如何从证书中提取此数据的任何想法?