"Export" Ruby 中的 x509 证书

"Export" x509 certificate in Ruby

我正在与具有以下指示的 API 通信:

  1. 将颁发的 x509 证书安装到客户端服务器上。
  2. 使用提供的密码和默认机器密钥集将 x509 证书导出到内存中。
  3. Base64 对 x509 证书的导出字节进行编码。
  4. 将“X509Certificate”添加为 HTTP header 并将其值设置为步骤 3 的结果。

第 1 步和第 4 步很简单,但我对第 2 步或第 3 步的 'export' 部分一无所知。我已经尝试使用谷歌搜索一段时间了,但我不确定究竟从哪里开始.

有人能为我指明如何 "export" 带有 "machine key set" 的证书的正确方向吗?

这是我目前的情况

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;
}

尝试

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

可能还 str.gsub(/=+$/, '') 切断填充