なひです。 http://pc2.2ch.net/test/read.cgi/tech/1063028224/608 より | Cygwin+http-access2でHTTPSのコンテンツを読みたいと思い、 | 簡単なテストをやってみたのですがうまくいきません http-access2のSSLは安全側に倒してあるので、かなりめんどくさいです。 | #!/usr/bin/env ruby | require "http-access2" | print HTTPAccess2::Client.new.get( "https://www.rsa.com/" ).body.content このコードでは、HTTPAccess2::Clientは、誰を信じろとも指定されなかった ため、誰も信じません。というわけで、www.rsa.com(本体はwww.rsasecurity.com)の SSLサーバーが返す証明書も信じず、結果的につながりません。 というわけで、HTTPAccess2::Clientに、誰を信じるか教えないといけません。 具体的には、信じる第三者の証明書(群)を指定する必要があります。 http://rrr.jin.gr.jp/dav/NaHi/rsa/wincertstore-rsasecurity.png に、https://www.rsasecurity.comにアクセスしたときに、IEで 表示することができる証明書階層を表示した画面のキャプチャを 置きました。また、ruby/1.8に付属しているsample/openssl/cert_store.rbで 同じ表示をさせたものを、 http://rrr.jin.gr.jp/dav/NaHi/rsa/rsasecurity.png に置きました。www.rsasecurity.comのサーバー証明書は、これらの画面で 示されている階層の一番下にあるため、その上にある4つのノードに対応する 証明書を取ってきて、HTTPAccess2::Clientに教えてやる必要があります。 証明書の取得は、IEなどからファイルに書き出すこともできるのですが、 面倒だと思いますので、この4つの証明書をまとめたものを http://rrr.jin.gr.jp/dav/NaHi/rsa/rsa-all.pem に置いておきました。これを適当に手元に置いて、 h = HTTPClient.new h.ssl_config.set_trust_ca('rsa-all.pem') h.ssl_config.verify_depth = 4 print h.get_content('https://www.rsasecurity.com') などとすると、アクセスできます。 # 上でverify_depthを指定しているのは、現在のhttp-access2が、深さ3の # 階層までしか許さないように設定されてしまっているからです。 # これは明らかに浅すぎますので、次のリリースでOpenSSLのデフォルトに # 任せるよう、変更します。 信じるべき第三者認証機関は他にもいろいろあり、たとえばVeriSign関係の 証明書をまとめてみた http://rrr.jin.gr.jp/dav/NaHi/rsa/verisign-all.pem を使うと、https://www.amazon.comにアクセスできるはずです。 以下余談です。SSL(というか、その下位にあるPKI)において、どの第三者 認証機関を信じるか、というのは大変重要です。いくら暗号化して通信 しても、相手はクレジットカード情報目当てに別人に成りすましている 悪者かもしれません。相手が信じられなければ、暗号化通信はまったく無意味です。 通常使われているブラウザが何も気にせずにSSLできるのは、あなたが信じる べきである(とブラウザメーカーが思っている)証明書が、デフォルトで インストールされているからです。あなた(のブラウザ)が誰を信じていることに なっているか、時々チェックしてみるのもいいかもしれません。