、私は(:openssl x509 command参照):あなたはopenssl x509
コマンドを使用してPEMに変換することができ、証明書がDER形式であることを仮定している。その後
openssl x509 -inform DER -outform PEM -in certfile.cer -out certfile.pem
、あなたが指示することができますRubyのOpenSSLライブラリは次のようなものとのSSL接続を認証するために信頼されたルート証明書を使用するには:
require 'socket'
require 'openssl'
tcp_sock = TCPSocket.new("my.host.tld", 443)
ctx = OpenSSL::SSL::SSLContext.new
ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER|OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
#You may need to specify the absolute path to the file
ctx.ca_file = "certfile.pem"
ssl_sock = OpenSSL::SSL::SSLSocket.new(tcp_sock, ctx)
ssl_sock.sync_close = true
ssl_sock.connect
begin
ssl_sock.post_connection_check('my.host.tld')
rescue
puts "Certificate host did not match expected hostname"
end
はその後、あなたが読んで、他のRubyのIOオブジェクトと同じようssl_sock
に書き込むことができるはずです。あなたがssl_sock
を作成する前に
ctx.cert = OpenSSL::X509::Certificate.new(File.read("my_cert.pem"))
ctx.key = OpenSSL::PKey::RSA.new(File.read("my_key.rsa"))
:あなたは、サーバーがユーザーを認証できるようにするために使用するクライアント証明書を与えられている場合は、とのSSLコンテキストを設定することができます。
を最後に、アドバイスの最後のピースを、あなたはRESTfulなAPIにアクセスしている場合、あなたはrest-clientのような宝石を使用して検討する必要があります:OpenSSLライブラリも(OpenSSL::PKey moduleを参照)DSAなどのRSA以外のキータイプをサポートHTTP/S接続のすべてを直接処理するのではなく、そのようなライブラリが適切かどうかは、使用しているサービスによって異なります。
あなたがリンクしているmathish.comの記事は、実際にはjRubyとは関係ありません。私がデモしたコードは、ActiveMQメッセージブローカーと話をしなければなりませんでした。これはJavaベースで、JavaのSSL証明書の規則を使用しています。このコードのコメントの大部分は、JavaのSSL証明書をキーストアから抜き出す方法と、OpenSSLが認識するフォーマットに思い出させるためのものでした。 –
.cerファイルをテキストエディタで開くと、 '----- BEGIN CERTIFICATE -----'などで始まるのでしょうか? –
ちょっと@ian、それを明確にしてくれてありがとう。彼らは '----- BEGIN CERTIFICATE -----'で始まらない。いいえ。それをテキストエディタで開きます。内容が何らかの方法で暗号化されているように見えます(ASCIIシンボルやスペースなどの無作為な束、見やすい文字はありません)。 – jkale