--- title: Gauche で HTTPS 接続を行う author: kazu634 date: 2010-12-23 url: /2010/12/23/_1643/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5399;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche ---
Gauche 0.9.1 (2010.12.11リリース)から HTTPS 接続が行えるようになりました。今回、 HTTPS 接続を行う必要性に迫られたので、 Gauche で HTTPS 接続を試みてみました。
なお、unix限定とありますが、Mac (Snow Leopard) でも動作したことを付け加えておきます。
リリース時の説明には次のように記載されています:
rfc.httpモジュールがhttpsコネクションをサポートします (今のところunix限定)。 コネクション自体は外部プログラム(stunnel) に依存します。
Gauche の Info にはこんな説明が:
Currently Gauche relies on an external program `stunnel' (either version 3 or 4) to handle secure connections. So when you request a secure connection, Gauche looks for `stunnel' program in `PATH'. On some systems a newer version of it is called `stunnel4', and Gauche looks for it, too. If you want to add certificates, for example, you have to adjust `stunnel' settings. A plan is to provide the means of secure connections as long as `stunnel', including native SSL support, and the higher-level library automatically choose whatever is available and best. Use the following procedure to check if you can use secure connections: -- Function: http-secure-connection-available? Returns `#t' if running Gauche can use secure connection, `#f' otherwise.
手っ取り早く言えば、
不勉強で、stunnelを知らなかったので、調べてみました:
Stunnel は、フリーなマルチプラットフォーム対応のプログラムであり、汎用TLS/SSLトンネリングサービスを提供する。
Stunnel は、TLSやSSLにネイティブで対応していないクライアントサーバシステムに安全な暗号化されたコネクションを提供するのに利用できる。各種オペレーティングシステム上で動作し、ほとんどのUnix系OSとWindowsでも動作する。TLSまたはSSLプロトコルの実装にはOpenSSLやSSLeayなどのライブラリが別途必要である。
Stunnel はSSLコネクションにX.509公開鍵証明書を使った公開鍵暗号を使っている。クライアントもオプションとして証明書で認証できる。
HTTPS 接続を行うためのコネクションを提供するプログラムのようです。知らなかった。
Macでパッケージ管理に Homebrew を用いているので、Homebrew で stunnel を導入してみました。 MacPorts を使っている人は MacPorts に読み替えてください。
kazu634@kazu634% brew search stunnel ~/working/tmp_lisp/foursquare [448] stunnel kazu634@kazu634% brew install stunnel ~/working/tmp_lisp/foursquare [449] ==> Downloading http://www.stunnel.org/download/stunnel/src/stunnel-4.33.tar.gz ######################################################################## 100.0% ==> Downloading patches ==> Patching patching file tools/stunnel.cnf ==> ./configure --disable-dependency-tracking --disable-libwrap --prefix=/usr/local/Cellar/stunnel/4.33 --sysconfdir=/usr/local/etc ==> make install ==> Caveats A bogus SSL server certificate has been installed to: /usr/local/etc/stunnel/stunnel.pem This certificate will be used by default unless a config file says otherwise! In your stunnel configuration, specify a SSL certificate with the "cert =" option for each service. ==> Summary /usr/local/Cellar/stunnel/4.33: 33 files, 492K, built in 16 seconds kazu634@kazu634% which stunnel ~/working/tmp_lisp/foursquare [450] /usr/local/bin/stunnel
この時点で使えるか、試してみました:
gosh> (http-secure-connection-available?) #t
なんか使える雰囲気です。そこで、 Foursquare の API にアクセスしてみることにしました。基本的には、 http-get に secureキーワードを指定し、 #t にします。こんな感じ:
gosh> (receive (status header body) (http-get "api.foursquare.com" (string-append "/v2/users/self/checkins?oauth_token=" "私の oauth_token ") :secure #t) ;;; ~~~~~~~~~~~ (print status)) 200 #<undef>
ステータスコード 200 はアクセス成功という意味なので、アクセスできています!やった!