我使用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文件工作得很好......
我该怎么做才能做到这一点?
显然,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一样使用它
在尝试从'.cer'创建here对象时,我发现了这个错误:
OpenSSL::X509::Certificate
我检查过该文件实际上是OpenSSL::X509::CertificateError (not enough data)
,它是二进制格式。在这种情况下,我们应该通过File.binread读取文件内容。
要检查文件是PEM还是DER编码?我们可以使用以下代码:
DER-encoded certificate
这是一种纯粹的红宝石方式,没有任何shell交互。