Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Загрузка сертификата с помощью openssl


Автор: JanryMayers 16.1.2016, 12:43
Добрый день!

Есть сервер. Есть клиент, платформа ios. Необходимо идентификацировать пользователя, который залогинился через game center, на сервере используя механизм описанный https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/#//apple_ref/occ/instm/GKLocalPlayer/generateIdentityVerificationSignatureWithCompletionHandler:.

С процессом проверки подписи я разобрался. С процессом загрузки сертификата(файла) по имени и получением публичного ключа, тоже.
Вопрос как получить публичный ключ из сертификата, если он представленн в виде строки считанной из файла.

Код

class function TAuthorizationCommands.ReadPublicKey(const ACertificate: String): pEVP_PKEY;
var
  Keyfile: pBIO;
  X509: pX509;
  LResult: Int32;
  LRSA: TArray<Char>;
begin
  LRSA := ACertificate.ToCharArray;

  KeyFile := BIO_new(BIO_s_mem());
  LResult := BIO_puts(KeyFile, @LRSA[0]);
  X509 := d2i_X509_bio(KeyFile, nil);
  Result := X509_get_pubkey(X509);
end;


d2i_X509_bio все время возвращает nil.

Автор: libcpp 16.1.2016, 13:36
А сертификат у тебя в каком формате, PEM или DER ?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Zagruzka-sertifikata-s-pomoshchyu-openssl-id569a111eae2015ad7c8b4568#findElement_E7045_569a1d1eae2015ca7bf989f1_0

Автор: JanryMayers 16.1.2016, 13:55
DER пример файла можно глянуть тут https://static.gc.apple.com/public-key/gc-prod-2.cer

Автор: JanryMayers 18.1.2016, 16:57
Разобрался, вот такой вариант работает.

Код

class function TAuthorizationCommands.ReadPublicKey(const ACertificate: TBytes): pEVP_PKEY;
var
  Keyfile: pBIO;
  X509: pX509;
begin
  Keyfile := BIO_new_mem_buf(@ACertificate[0], Length(ACertificate));
  X509 := d2i_X509_bio(KeyFile, nil);
  Result := X509_get_pubkey(X509);
end;


Использовать string нельзя, при конвертации происходит потеря данных.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)