2024-04-20 04:44:54 发布
网友
我有一个智能卡(实际上是USB令牌),上面写着一些证书和密钥。现在我需要在Windows上使用python检索这个证书。如何实现?在
我看过pyscard包,但它似乎太低级了,而且可能不是最简单的方法。但如果你知道这个低层次的答案,我们将感激你的帮助。 似乎是来自pywin32(win32crypt)的CryptAcquireContext函数允许我使用智能卡的私钥进行加密,但我无法获得证书本身。在
pyscard
CryptAcquireContext
你有什么建议吗?在
但我自己找到了答案。希望它能帮助某人: 通常智能卡制造商提供一个实现PKCS#11标准的库(.so或.dll) 有几种解决方案可用于通过此库与智能卡通信。例如:pkcs11-tool(CLI接口)、PyKCS11(python包装器)。在
.so
.dll
下面是一个使用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上列出智能卡上的证书
但我自己找到了答案。希望它能帮助某人:
通常智能卡制造商提供一个实现PKCS#11标准的库(
.so
或.dll
) 有几种解决方案可用于通过此库与智能卡通信。例如:pkcs11-tool(CLI接口)、PyKCS11(python包装器)。在下面是一个使用PyKCS11实现的示例:
这样我就可以在Linux和Windows上列出智能卡上的证书
相关问题 更多 >
编程相关推荐