如何通过python从智能卡读取证书?

2024-04-20 04:44:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个智能卡(实际上是USB令牌),上面写着一些证书和密钥。现在我需要在Windows上使用python检索这个证书。如何实现?在

我看过pyscard包,但它似乎太低级了,而且可能不是最简单的方法。但如果你知道这个低层次的答案,我们将感激你的帮助。
似乎是来自pywin32(win32crypt)的CryptAcquireContext函数允许我使用智能卡的私钥进行加密,但我无法获得证书本身。在

你有什么建议吗?在


Tags: 方法函数答案windows密钥建议usb证书
1条回答
网友
1楼 · 发布于 2024-04-20 04:44:54

但我自己找到了答案。希望它能帮助某人:
通常智能卡制造商提供一个实现PKCS#11标准的库(.so.dll) 有几种解决方案可用于通过此库与智能卡通信。例如:pkcs11-tool(CLI接口)、PyKCS11(python包装器)。在

下面是一个使用PyKCS11实现的示例:

from asn1crypto import x509
from PyKCS11 import *

pkcs11 = PyKCS11Lib()
pkcs11.load('<MANUFACTURER_LIBRARY_PATH>')
# get slot value via pkcs11.getSlotList(tokenPresent=False). Usually it's 0
session = pkcs11.openSession(slot, CKF_SERIAL_SESSION | CKF_RW_SESSION)
session.login('<SMART_CARD_PIN_CODE>')
result = []
certs = session.findObjects([(CKA_CLASS, CKO_CERTIFICATE)])
for cert in certs:
    cka_value, cka_id = session.getAttributeValue(cert, [CKA_VALUE, CKA_ID])
    cert_der = bytes(cka_value)
    cert = x509.Certificate.load(cert_der)
    result.append(cert)
print(result)

这样我就可以在Linux和Windows上列出智能卡上的证书

相关问题 更多 >