Взаимная аутентификация клиента с PKCS#11
Я пытаюсь создать приложение для браузера, которое будет обращаться к серверу, который требует TLS Mutual Client Authentication. Приложение должно иметь возможность предоставлять клиентский сертификат и ключ через интерфейс PKCS#11.
Изучив различные статьи о взаимной связи для Android, я считаю, что требование PKCS#11 исключает использование цепочки ключей Android / добавление сертификатов в хранилище ключей по умолчанию на Android (поскольку к закрытому ключу нельзя получить прямой доступ).
У меня работает интерфейс PKCS#11, поэтому я могу использовать закрытый ключ для подписи данных.
Есть ли способ перехватить вызовы для Android, чтобы подписать данные ключом, чтобы я мог вместо этого использовать интерфейс PKCS#11? В настоящее время кажется, что мой единственный вариант - реализовать собственный стек TLS для достижения этой цели.
1 ответ
Это зависит:) На какую платформу (ы) вы нацеливаетесь? В Jelly Bean есть некоторая поддержка аппаратных устройств в хранилище ключей, поэтому вы можете написать модуль keymaster, который использует ваш PKCS#11. Это, однако, является компонентом ОС, поэтому он потребует реализации вашего собственного ПЗУ. Вы также можете разработать своего собственного провайдера JCE, который поддерживается модулем PKCS#11. Затем в браузере убедитесь, что механизм SSL использует вашего провайдера при выполнении аутентификации клиента.