尝试与用户的 PIN(智能卡)建立会话时出错

Posted

技术标签:

【中文标题】尝试与用户的 PIN(智能卡)建立会话时出错【英文标题】:Error while trying to establish session with user's PIN (smartcard) 【发布时间】:2017-12-27 20:56:34 【问题描述】:

我正在使用 python-pkcs11 访问我拥有的智能卡。 现在,我正在尝试创建一个会话,以便我可以从卡中检索公钥。这是我正在测试的代码:

path = (...)
os.environ["PKCS11 MODULE"] = path
lib = pkcs11.lib(os.environ['PKCS11 MODULE'])

password = bytes("1234","utf-8")
print(password)

with token.open(user_pin=password) as session:
    print(session) 

一切看起来都不错,直到达到“user_pin=password”。我收到一个错误:

Traceback (most recent call last):
    File "acess.py", line 46, in <module>
    with token.open(user_pin=password) as session:
    File "pkcs11/_pkcs11.pyx", line 227, in pkcs11._pkcs11.Token.open
    AttributeError: 'bytes' object has no attribute 'encode'

在文档中,据说 user_password 必须以字节为单位,这就是我正在做的事情。有人可以帮帮我吗?

编辑:

当我测试这三种情况中的任何一种时,我仍然会收到错误:

with token.open(user_pin='1234') as session:
    print(session)

with token.open(user_pin=b"1234") as session:
    print(session)

with token.open(user_pin="1234") as session:
    print(session)

错误:

Traceback (most recent call last):
      File "acess.py", line 59, in <module>
        with token.open(user_pin="1234") as session:
      File "pkcs11/_pkcs11.pyx", line 239, in pkcs11._pkcs11.Token.open
      File "pkcs11/_errors.pyx", line 88, in pkcs11._pkcs11.assertRV
        pkcs11.exceptions.UserPinNotInitialized

【问题讨论】:

我真的不知道,但我在快速浏览文档时看到的示例似乎使用字符串...您是否尝试过不将 "1234" 转换为字节(只需执行 @ 987654327@) ? 是的,我试过了。请看一下我对这个问题所做的编辑 我坚持:我不知道 Python 中的 PKCS11,但 UserPinNotInitialized 似乎指向...未初始化的东西?你见过这个:python-pkcs11.readthedocs.io/en/latest/api.html#pkcs11.lib 吗?它似乎在初始化...什么东西? 是的,我已经阅读了整个文档。我真的不知道我错过了什么。无论如何,谢谢你的帮助 卡,尤其是 PIN 码是否可以被其他应用程序使用?否则,PIN 可能仍处于需要由用户定义的状态。 【参考方案1】:

你错过了这条线:

token = lib.get_token(token_label='你的令牌标签')

以 token.open(user_pin="1234") 作为会话: 打印(会话

【讨论】:

以上是关于尝试与用户的 PIN(智能卡)建立会话时出错的主要内容,如果未能解决你的问题,请参考以下文章

PKCS#11 智能卡令牌的最大尝试次数

在 C# 中清除智能令牌的 Pin 缓存

尝试从智能按钮创建订阅时出错

访问网站数据的 Windows 智能卡身份验证

无法使用 APDU 命令验证智能卡 PIN

CAC 智能卡重新认证