RubyでSSLはややっこしい
所用にて、RubyでHTTPSの通信を行う必要があったので書いてみました。
mechanize使わなくても、HTTPと同じような感じでいけるかと思ったら、そうはいかなかったのでメモ。
ちなみに、所用の件については後日書きます。
先ずはコードをば
require 'net/https' https = Net::HTTP.new('ドメイン',443) https.use_ssl = true #SSLを有効に https.ca_file = './syoumeisyo.cer' #証明書をセット https.verify_mode = OpenSSL::SSL::VERIFY_PEER #認証モードをセット https.verify_depth = 5 #証明書チェーンの深さをセット https.start { |access| respons = access.post('アクセスパス','パラメータなどなど') 色々処理 }
こんな感じです。
ここで問題なのが、証明書を用意しないといけない事ですね。
アクセスしたいサイトの証明書を用意する必要があります。
基本的にはルート証明書を用意すればいい気がします。
そうすれば、同じルート証明書の発行機関なら使い回しがきくので。
同じファイルに複数の証明書が入れられるとの事ですが、試していないのでわかりません。
証明書チェーンの深さは、サイトから渡される証明書からどの位さかのぼるかという事です。
ルート証明書を用意した場合、この値があまり少ないと認証失敗します。
この証明書の取得方法は簡単で、アクセスしたいサイトをIEで表示して、鍵マークをクリックし証明書の表示をクリックします。
次に、証明書のパスのタブを開き、ツリーの一番上に表示されているアイコンをクリックし、証明書の表示をクリックします。
開いたウインドウの詳細の中のファイルにコピーをクリックしウイザードに従います。
エクスポート形式は、Base64 encoded X.509(.CER)を選択してエクスポートした物を使います。
そういえば、最初にHTTPを扱った時にドメインじゃなくて、FQDN入れて困ったのを思い出した日でした。