【发布时间】:2022-12-18 11:06:55
【问题描述】:
在 Windows 服务器上,我试图获取存储证书的私钥。
在服务器上,我有:
- 存储在“我的本地计算机”中的证书,从可导出的 PXF 文件安装。
- 蟒蛇 3.7.0
- 密码学pip包版本37.0.2
- 视窗服务器 2019
问题:
我的脚本无法从加载的 PEM 中反序列化关键数据。
注意:我可以成功地将原始证书 PFX 文件用于其创建目的(向 Azure 进行身份验证)
代码00.py:
import ssl
from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes,serialization
expected_thumbprint = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
def hex_string_readable(bytes):
return ["{:02X}".format(x) for x in bytes]
for c in ssl.enum_certificates("MY"):
data = c[0]
pem_data = ssl.DER_cert_to_PEM_cert(data).encode()
cert_details = x509.load_pem_x509_certificate(pem_data, default_backend())
fingerprint = hex_string_readable(cert_details.fingerprint(hashes.SHA1()))
fingerprint_string = ''.join(fingerprint)
print(fingerprint_string)
if fingerprint_string == expected_thumbprint:
print("Certificate found!")
private_key = serialization.load_pem_private_key(pem_data, None, backend=default_backend())
break
结果:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Certificate found!
Traceback (most recent call last):
File ".\code00.py", line 22, in <module>
private_key = serialization.load_pem_private_key(pem_data, None, backend=default_backend())
File "C:\temp\.venv\lib\site-packages\cryptography\hazmat\primitives\serialization\base.py", line 22, in load_pem_private_key
return ossl.load_pem_private_key(data, password)
File "C:\temp\.venv\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 904, in load_pem_private_key
password,
File "C:\temp\.venv\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1168, in _load_key
self._handle_key_loading_error()
File "C:\temp\.venv\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 1193, in _handle_key_loading_error
"Could not deserialize key data. The data may be in an "
ValueError: Could not deserialize key data. The data may be in an incorrect format or it may be encrypted with an unsupported algorithm.
有什么我做错了或有其他方法可以实现这个目标吗?
提前致谢。
【问题讨论】:
-
您从
pem_data加载证书,然后尝试加载与私钥相同的数据。大概你想在那里加载一些不同的字节? -
这是一个很大的可能性。但是
data或pem_data与serialization.load_pem_private_key一起工作。我的猜测是我错误地使用了 ssl 和密码库,但我找不到如何使用。
标签: python windows certificate