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



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

我看了pyscard软件包,但似乎太低了,可能不是最简单的方法。但是,如果您知道低级答案,那么您的帮助将不胜感激。
似乎来自PYWIN32(Win32Crypt)的CryptAcquireContext函数允许我使用智能卡中的私钥进行加密目的,但我无法获得证书本身。

您有任何建议吗?

我自己找到了答案。希望它能帮助某人:
通常,智能卡制造商提供库(.so.dll)实施PKCS#11标准。
您可以使用多种解决方案通过此库与智能卡进行通信。例如:PKCS11-Tool(CLI接口),Pykcs11(Python包装器)。

这是一个示例

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上的智能卡上列出证书

相关内容

  • 没有找到相关文章

最新更新