Я общаюсь с API, который имеет следующие направления:
Шаги 1 и 4 просты, но я понятия не имею о 2 или «экспортной» части 3. Я пробовал гуглить в течение некоторого времени, и я не уверен, с чего именно начать.
Кто-нибудь укажет мне правильное направление, как «экспортировать» сертификат с «набором ключей компьютера»?
Вот что у меня есть до сих пор
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;
}
К сожалению, это буквально единственная документация, которую я могу найти в их более чем 100-страничном PDF-файле и на всем их сайте. Я смогу отправить им электронное письмо завтра, поэтому завтра я спрошу конкретно о включенном закрытом ключе. Это будет использоваться при отправке запросов API на платформу обработки платежей с сервера, не совместимого с PCI, для аутентификации с помощью их API. Им требуются учетные данные + белый список IP-адресов + x509 в заголовке для правильной аутентификации.
Где взять сертификат и в каком формате? Для процесса аутентификации должно быть что-то вроде «создать пару ключей, сохранить закрытый ключ закрытым, загрузить CSR и получить окончательный сертификат, подписанный ими» (сертификат на этом этапе содержит только открытый ключ, иногда позже сертификат и его закрытый ключ, зашифрованные паролем, записываются в формат p12). Внедряют ли они какой-то пользовательский механизм сертификата SSL-клиента?
@Vasfed они прислали мне один файл cert.pfx, в котором есть двоичные данные, а также пароль
@Vasfed Я добавил код PHP и .NET (это были единственные образцы кода, которые у них были)





Пытаться
pkcs = OpenSSL::PKCS12.new(File.read('cert.pfx'), 'password')
str = Base64.urlsafe_encode64(pkcs.certificate.to_der)
Наверное еще и str.gsub(/=+$/, '') обрезать набивку
Это не работает (выдает неверную ошибку сертификата), но я думаю, что это что-то с их стороны, потому что ваш ответ дает вывод, который в точности похож на строку decoded64, которую я сказал им дать мне из их среды разработки. когда я decoded64 я получаю точный двоичный вывод, как вы указали выше ... я думаю, что у них нет сертификата, «включенного» для моей учетной записи или что-то в этом роде. Спасибо за вашу помощь, я пока отмечаю успех
@Tallboy также попробуйте с strict_encode64 и без / с отступами (=s в конце для некоторых входных данных), они могут использовать сравнение строк вместо base64.
Должен ли быть включен закрытый ключ? (направления напоминают PKCS12, с экспортом в двоичный DER и кодировкой Base64) Пожалуйста, предоставьте более подробную информацию о том, как этот API будет использовать сертификат