#delphi #ssl #smartcard #pki #pkcs#11
#delphi #ssl #смарт-карта #pki #pkcs #11
Вопрос:
Я пытаюсь получить доступ к определенному API, и мне была предоставлена смарт-карта, содержащая сертификат, который я должен использовать для установления SSL-соединения с указанным API. Я пытаюсь сделать это с помощью приложения Delphi.
Ниже приведена информация о сертификате:
Сертификат, используемый для установления безопасного соединения, хранится на смарт-карте, и к нему можно получить доступ из апплета PKI с помощью API PKSC # 11. Сертификат загружается в структуру слотов / токенов в апплете PKI. После извлечения сертификата из смарт-карты (в формате DER) его можно использовать в качестве стандартного сертификата X.509 для протоколов TLS / SSL и HTTPS.
Я могу извлечь сертификат (через инструмент pkcs11CertificateStorage из SecureBlackbox), но у меня возникают проблемы с его использованием для SSL-соединения с Delphi.
Вот упрощенная версия того, что я делаю, чтобы прикрепить сертификат к запросу (с использованием компонента ipWorks REST):
var
CertStorage: TsbxCertificateStorage;
ipwREST1: TipwREST;
// ...
CertStorage.Open('pkcs11://user:' Pin '@/' StorageFilename '?slot=0' RO);
ipwREST1.SSLCertEncodedB := CertStorage.Certificates[0].Bytes;
ipwREST1.Get('https://...');
Ошибка, которую я получаю от компонента REST:
273: Не удалось получить учетные данные безопасности: ошибка 0x8009030E
Что привело меня к объяснению ошибки разработчиком компонента:
При использовании сертификата для проверки подлинности клиента убедитесь, что закрытые ключи сертификата доступны. Сертификат в хранилище сертификатов Windows должен содержать соответствующие закрытые ключи и быть помечен как экспортируемый.
и я не уверен, как это интерпретировать.
Я пытался сохранить сертификат в файле, используя OpenSSL для преобразования в PEM и прикрепляя его другими способами, но безуспешно. Я чувствую, что мне чего-то не хватает в моем подходе. Любая помощь будет оценена, спасибо.
Комментарии:
1. Выполните пошаговый подход: если вы можете сохранить его в файле DER, может ли OpenSSL затем интерпретировать его, т.Е.
openssl x509 -inform der -in CERTIFICATE.der -text -noout
? Посмотрите формат PEM и DER и определите, в какой момент происходит сбой. И: может существовать более одного слота для карт. Ваш пример кода бессмыслен без объявлений типов / переменных.2. @AmigoJack спасибо. Вы правы насчет типов переменных, я это сейчас отредактировал. OpenSSL может интерпретировать его с помощью предоставленной вами команды, и я уже пытался преобразовать его в PEM, Включая всю цепочку сертификатов и т. Д., Но безрезультатно. Прямо сейчас все, на что я смотрел, указывает на что-то с закрытым ключом сертификата, но именно здесь мне не хватает знаний об этом, и я не могу найти много информации об этом в другом месте в Интернете.