«Экспорт» сертификат x509 в рубине - PullRequest
2 голосов
/ 27 мая 2019

Я общаюсь с API, который имеет следующие направления:

  1. Установите выданный сертификат x509 на клиентский сервер.
  2. Экспортируйте сертификат x509, используя предоставленный пароль иНабор ключей машины по умолчанию.
  3. Base64 кодирует экспортированные байты сертификата x509.
  4. Добавьте «X509Certificate» в качестве заголовка HTTP и установите его значение в результате шага 3.

Шаг 1 и 4 прост, но я понятия не имею о 2 или о части «экспорта» из 3. Я пробовал поискать в Google в течение некоторого времени, и я не уверен, с чего конкретно начать..

Может ли кто-нибудь указать мне правильное направление, как «экспортировать» сертификат с «набором ключей компьютера»?

Вот что у меня есть

raw_data = File.read('cert.pfx')
pkcs = OpenSSL::PKCS12.new(raw_data, 'password')
cert = OpenSSL::X509::Certificate.new(pkcs.certificate.to_pem)

Вот эквивалентный код .NET:

public string GetBase64Cert(string certificateThumbprint)
 {
 using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
 {
 store.Open(OpenFlags.ReadOnly);
 var foundCertificates = store.Certificates.Find(X509FindType.FindByThumbprint, certificateThumbprint, false);
 if (foundCertificates.Count != 1)
 {
 return null;
 }
 var certByteArray = foundCertificates[0].Export(X509ContentType.Cert);
 store.Close();
 return Convert.ToBase64String(certByteArray);
 }
}

И эквивалентный код PHP:

public function setx509($x509file) {
  $cert = openssl_x509_parse($x509file);
  $base64cert = base64_encode($cert);
  return $base64cert;
}

1 Ответ

1 голос
/ 30 мая 2019

Попробуйте

pkcs = OpenSSL::PKCS12.new(File.read('cert.pfx'), 'password')
str = Base64.urlsafe_encode64(pkcs.certificate.to_der)

Возможно также str.gsub(/=+$/, '') чтобы отрезать отступ

...