Я пытаюсь установить канал 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,прозрачно для кода приложения. Хотя я не смог найти материала о том, как это сделать.