Как установить сеанс TLS в Python, используя PKCS11 - PullRequest
4 голосов
/ 15 октября 2019

Я пытаюсь установить канал TLS между клиентом и веб-сервером, которые находятся под моим контролем. И клиент, и сервер аутентифицируют себя, используя сертификаты, которые я создал по частной схеме PKI. Клиентский ключ и сертификат хранятся на USB-ключе типа HSM. Python является основным языком приложения.

Я могу выполнить все необходимые операции шифрования для моего проекта с использованием пакета python-pkcs11, такого как шифрование AES, подпись HMAC, подпись RSA и т. Д. Однако я не смог найти способ «связать»”Pkcs11 в любую библиотеку TLS. Я имею в виду «Pythonic» способ вызова функции, которая обрабатывает слой pkcs11 и устанавливает канал TLS. Запросы не поддерживает pkcs11. libcurl имеет поддержку pkcs11, но она не реализована в pycurl и pyopenssl.

Я могу сделать это с помощью CLI-инструмента openssl, используя API-интерфейс двигателя:

openssl s_client -engine pkcs11 -verify 2 -CAfile path/to/CA.pem -keyform engine -key "pkcs11:...;object=rsa;type=private" -cert path/to/client-cert.pem -connect localhost:8443

Пример того, что я ищу:

do_tls_with_pkcs(key=’pkcs11:URL’, cert=’cert.pem’, verify=’CA-cert.pem’)

Насколько я мог искать, такой библиотеки еще не существует. Теперь я ищу обходной путь.

Я прочитал, что если openssl, libp11 и python скомпилированы таким образом, можно абстрагировать все это, поэтому простые запросы запросов будут проходить через HSM,прозрачно для кода приложения. Хотя я не смог найти материала о том, как это сделать.

...