今まで避けて通ってきた【rubyでSSL】ですが、やはり避けては通れないようなので、この際調べてやってみようと思うのです。
とりあえずぐぐってはみたものの、「RubyでSSLはややっこしい」とか恐ろしいことが書かれてるし、「そういえば以前このページ見てやっぱそこまでSSLしなくてもいっか」とか言ってやめたことを思い出して、くじけそうになります。
でもソースは短いし、証明書ごにょごにょってところを何とかクリアすればいけそうなのでもう少しがんばります。
「証明書を用意しないといけない」と先ほどのページに書いてあるのですが、以前も「アクセスしたいサイトの証明書を用意する」ってところに引っかかったわけです。「SSLアクセスが必要なプログラムを書く度に、そこの証明書を取得してたら面倒だし、プログラムに汎用性がない」って思うのです。
ここはやっぱり「基本的にはルート証明書を用意すればいい気がします。」って言う言葉に希望を託して、IEでルート証明書一覧を見てみたものの、いっぱいありすぎて萎えた・・・。
もう今回だけのSSLでもいいです。
で、証明書ゲットのやり方にしたがってやってみます。
IEでアクセスしたいSSLのページを開きます。
右下の鍵マークをダブルクリックして、「証明書のパス」タブを見ると
というような証明書の階層が表示されました。このサイトの場合は3階層になってて、一番上がルート証明書のようです。てことは、今回はCyberTrustのルート証明書があればいいんじゃね?ってことで以下手順です。
できた.cerファイルをrubyプログラムと同じフォルダに入れ、サンプルプログラムを実行してみます。
結果・・・「おー、なんか表示されたー!!」
全然避けなくて良いくらい簡単でした。
とりあえずぐぐってはみたものの、「RubyでSSLはややっこしい」とか恐ろしいことが書かれてるし、「そういえば以前このページ見てやっぱそこまでSSLしなくてもいっか」とか言ってやめたことを思い出して、くじけそうになります。
でもソースは短いし、証明書ごにょごにょってところを何とかクリアすればいけそうなのでもう少しがんばります。
「証明書を用意しないといけない」と先ほどのページに書いてあるのですが、以前も「アクセスしたいサイトの証明書を用意する」ってところに引っかかったわけです。「SSLアクセスが必要なプログラムを書く度に、そこの証明書を取得してたら面倒だし、プログラムに汎用性がない」って思うのです。
ここはやっぱり「基本的にはルート証明書を用意すればいい気がします。」って言う言葉に希望を託して、IEでルート証明書一覧を見てみたものの、いっぱいありすぎて萎えた・・・。
もう今回だけのSSLでもいいです。
で、証明書ゲットのやり方にしたがってやってみます。
IEでアクセスしたいSSLのページを開きます。
右下の鍵マークをダブルクリックして、「証明書のパス」タブを見ると
GTE CyberTrust Global Root └Cybertrust Japan Public CA └(通信したい相手のドメイン名)
というような証明書の階層が表示されました。このサイトの場合は3階層になってて、一番上がルート証明書のようです。てことは、今回はCyberTrustのルート証明書があればいいんじゃね?ってことで以下手順です。
- ルート証明書の「GTE CyberTrust Global Root」をクリックして「証明書の表示」ボタンをクリック
- ルートの証明書のダイアログが出るので「詳細」タブをクリックして「ファイルにコピー」ボタンをクリック
- 証明書のエクスポートウィザードが表示されるので「次へ」
- エクスポートファイルの形式でBase 64 encoded X.509 (.CER)を選択し、次へ
- ファイル名を指定し、保存
できた.cerファイルをrubyプログラムと同じフォルダに入れ、サンプルプログラムを実行してみます。
require 'net/https'
https = Net::HTTP.new('sslurl.com',443)
https.use_ssl = true
https.ca_file = 'CyberTrust.cer'
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.start { |w|
res = w.get('/login.php')
print response.body
}
結果・・・「おー、なんか表示されたー!!」
全然避けなくて良いくらい簡単でした。
コメントする