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 )

私の証明書はAdobeXリーダーを使用して生成されたもので、自己署名証明書です。PDFドキュメントに署名することは正常に機能しています...

これを機能させるにはどうすればよいですか?

4

2 に答える 2

4

どうやら OpenSSL には .cer ファイルから直接読み取る際に問題があり、キーには private_key のみを使用する必要があり、pfx には privatekey と証明書の両方があります。

そこで、openSsl をローカルにインストールし、最初に次のコマンドで .cer 証明書を .pem に変換しました。

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

次に、pfxファイルから秘密鍵を抽出しました(このサイトに基づいています):

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

pfx pwd があることを確認し、秘密鍵を抽出するときにパスフレーズを選択してください。

最終的なコードは次のとおりです。

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

そして出来上がり:-)、証明書と秘密鍵の両方をメモリに正常にマップし、答えのように使用できますここ

于 2012-08-29T13:02:25.810 に答える