Использование компонентов Indy для проверки учетных данных смарт-карты

Есть ли в компонентах Indy какие-либо функциональные возможности для проверки учетных данных смарт-карты (CAC)? Я предполагаю, что это должно использоваться в сочетании с InitializeSecurityContext,

Я использую его в Сиэтле C ++ Builder, но даже примеры Delphi приветствуются.

Вот что я понял до сих пор:

  1. Открытое хранилище сертификатов системы (CertOpenSystemStore) и позвольте
    пользователь выбирает сертификат (CryptUIDlgSelectCertificateFromStore).
  2. Получить учетную ручку (AcquireCredentialsHandle).
  3. Подключитесь к моему серверу используя TIdTCPClient а также TIdSSLIOHandlerSocketOpenSSL используя безопасный порт 443.
  4. вызов InitializeSecurityContext который возвращается SEC_I_CONTINUE_NEEDED.

После этого я не уверен, что следует отправлять на сервер и что ожидать взамен. Также в какой момент система должна запросить у пользователя PIN-код?

Спасибо

4

Решение

Когда вы получаете SEC_I_CONTINUE_NEEDEDвы должны передать данные выходного токена на сервер, дождаться ответного токена и затем передать его обратно InitializeSecurityContext(), Теперь то, как вы на самом деле передаете данные назад и вперед, зависит от конкретного протокола, который вы используете для связи с сервером.

Например, в TIdHTTPИнди имеет TIdSSPINTLMAuthentication класс для обработки аутентификации NTLM с использованием того же API, который вы используете. Он инициализирует пакет безопасности NTML, а затем использует InitializeSecurityContext() для получения буфера байтов, содержащего данные токена NTLM, который затем кодируется в base64 и помещается в HTTP Authorization: NTML ... заголовок запроса. Когда ответ возвращается, если у него есть HTTP WWW-Authenticate: NTLM ... заголовок, предлагающий данные маркера ответа, данные декодируются в base64, и полученные байты возвращаются обратно в InitializeSecurityContext(),

Итак, вам нужно выяснить, какой протокол связи вы используете для связи с вашим сервером, и как этот протокол ожидает, что вы будете передавать байты токена туда и обратно. Это выходит за рамки возможностей Инди. Он предоставляет вам средства для передачи и получения байтов, но вы должны предоставить и прочитать их по мере необходимости.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]