如何通过python从智能卡读取证书?
How to read certificate from smart card via python?
我有一张智能卡(实际上是 USB 令牌),上面写有一些证书和密钥。现在我需要在 Windows 上使用 python 检索此证书。如何实现?
我查看了 pyscard
包,但它似乎太低级并且可能不是最简单的方法。但是,如果您知道该低级答案,那么您的帮助将不胜感激。
似乎来自 pywin32 (win32crypt) 的 CryptAcquireContext
函数允许我使用智能卡中的私钥进行加密,但我无法获取证书本身。
你有什么建议吗?
虽然我自己找到了答案。希望对某人有所帮助:
通常智能卡制造商提供一个实现 PKCS#11 标准的库(.so
或 .dll
)。
您可以使用多种解决方案通过此库与您的智能卡进行通信。如:pkcs11-tool (CLI interface), PyKCS11 (python wrapper).
这是一个如何使用 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
上列出智能卡上的证书
我有一张智能卡(实际上是 USB 令牌),上面写有一些证书和密钥。现在我需要在 Windows 上使用 python 检索此证书。如何实现?
我查看了 pyscard
包,但它似乎太低级并且可能不是最简单的方法。但是,如果您知道该低级答案,那么您的帮助将不胜感激。
似乎来自 pywin32 (win32crypt) 的 CryptAcquireContext
函数允许我使用智能卡中的私钥进行加密,但我无法获取证书本身。
你有什么建议吗?
虽然我自己找到了答案。希望对某人有所帮助:
通常智能卡制造商提供一个实现 PKCS#11 标准的库(.so
或 .dll
)。
您可以使用多种解决方案通过此库与您的智能卡进行通信。如:pkcs11-tool (CLI interface), PyKCS11 (python wrapper).
这是一个如何使用 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
上列出智能卡上的证书