Читать SSL закрытый ключ от смарт-карты с помощью C#
У меня есть смарт-карта с кард-ридером, и я решаю внедрить сертификат клиента в последнем.
Закрытый ключ хранится на карте, а открытый ключ хранится на сервере.
Сценарий приложения выглядит примерно так:
- приложение отправляет фреймы на сервер Linux
- Ответ сервера Linux с номером оперативной памяти
- приложение считывает закрытый ключ (смарт-карта или файл pem), шифрует полученное случайное число и отправляет результат на сервер.
- сервер пытается расшифровать отправленную зашифрованную строку с помощью открытого ключа (файл pem хранится на сервере) =>, если успешный доступ предоставлен, иначе доступ запрещен.
В моем приложении есть режим проверки подлинности сертификата (статический файл.pem), а также используется закрытый ключ (также статический.pem). я использовал openssl-net
такие функции, как FromPrivateKey(string pem, string password)
а также PrivateEncrypt(byte[] msg, RSA.Padding padding)
для чтения закрытого ключа и шифрования данных для отправки на сервер.
Проблема, которая необходима, заключается в том, что у меня нет априорного способа экспортировать свой закрытый ключ в мою смарт-карту, так как мой файл pem.
Поэтому после долгих исследований я понял, что вместо этих функций следует использовать функции типа функции: "ENGINE_load_private_key" с механизмом "pkcs11".
Итак, я видел несколько примеров конфигурации openssl (например, http://openssl.6102.n7.nabble.com/Private-Key-from-Windows-Cert-Store-td20720.html) с pkcs11 (opensc, engine_pkcs11. И т. Д. Беда в том, что эти конфигурации для Linux.
Действительно, мне нужно разработать Windows-приложение WPF для клиентского приложения (написанное на C #), которое может считывать закрытый ключ со смарт-карты или из файла PEM.