Я общаюсь с API, который имеет следующие направления:
- Установите выданный сертификат x509 на клиентский сервер.
- Экспортируйте сертификат x509, используя предоставленный пароль иНабор ключей машины по умолчанию.
- Base64 кодирует экспортированные байты сертификата x509.
- Добавьте «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;
}