我尝试使用Python库“requests”与一张智能卡保护的网站进行通信。这意味着在SSL中需要强大的身份验证:您必须提供客户端证书(cert和私钥)。
由于我正在使用智能卡,因此无法读取私钥(仅限模数),这是一种正常的保护措施。我可以使用Python库PyKCS11读取智能卡:只需给出PIN码即可读取所有证书、公钥和私钥模数。
如何混合使用requests和PyKCS11?
如何在智能卡中使用客户端证书进行SSL请求?
编辑 2017/08/04
在我的Mac上:
- brew install openssl
- brew install opensc
- brew install engine_pkcs11
- openssl
- engine dynamic -pre SO_PATH:/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/(my specific Pkcs11 lib).dylib
- Loaded: (pkcs11) pkcs11 engine
- s_client -engine pkcs11 -key '(slot):(id)' -keyform engine -cert 'pem.cer' -connect (host):443 -state -debug
- SSL握手成功
- engine dynamic -pre SO_PATH:/usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/local/lib/(my specific Pkcs11 lib).dylib
现在我的问题是,pyOpenSSL没有API中选择引擎(如pkcs11)的功能。因此我被阻止了。我无法使用Python。