OpenSSL没有足够的数据

问题描述 投票:2回答:2

我使用Adobe X生成了一个自签名证书,并导出了一个pfx文件(用于我的私钥)和一个.cer文件(用于证书)。

然后我尝试收集证书以及密钥,但由于某种原因,OpenSSL正在提供错误

OpenSSL::X509::CertificateError: not enough data

这是我的代码

require 'openssl'

CERTFILE = "test.cer"
RSAKEYFILE = "test.pfx"

# Open certificate files

cert = OpenSSL::X509::Certificate.new(File.read CERTFILE)
key = OpenSSL::PKey::RSA.new(File.read RSAKEYFILE )

我的证书是使用Adobe X阅读器生成的,是一个自签名证书。签署pdf文件工作得很好......

我该怎么做才能做到这一点?

ruby openssl digital-signature x509
2个回答
4
投票

显然,OpenSSL在直接从.cer文件中读取时存在一些问题,对于密钥,我们应该只使用private_key,而pfx同时具有privatekey和cert。

所以,我在本地安装了openSsl,并使用以下命令首先将converted我的.cer证书安装到.pem:

C:\OpenSSL-Win32\bin>openssl x509 -inform der -in "c:\mydir\test.cer" -out "C:\mydir\certificate.pem"

然后从pfx文件中提取我的私钥(基于this站点):

C:\OpenSSL-Win32\bin>openssl pkcs12 -in "c:\mydir\test.pfx" -nocerts -out "c:\mydir\test_pk.pem"

只需确保您拥有pfx密码并在提取私钥时选择密码。

这是最终的代码:

require 'openssl'

CERTFILE = "certificate.pem"
RSAKEYFILE = "test_pk.pem"
passphrase = "your chosen passphrase for the private key"
key4pem=File.read RSAKEYFILE

# Open certificate files

cert = OpenSSL::X509::Certificate.new(File.read CERTFILE)
key = OpenSSL::PKey::RSA.new key4pem, passphrase

和voilá:-),我们已经成功地将我们的证书和私钥映射到内存中,并且可以像回答qazxsw poi一样使用它


2
投票

在尝试从'.cer'创建here对象时,我发现了这个错误:

OpenSSL::X509::Certificate

我检查过该文件实际上是OpenSSL::X509::CertificateError (not enough data) ,它是二进制格式。在这种情况下,我们应该通过File.binread读取文件内容。

要检查文件是PEM还是DER编码?我们可以使用以下代码:

DER-encoded certificate

这是一种纯粹的红宝石方式,没有任何shell交互。

© www.soinside.com 2019 - 2024. All rights reserved.