前回のエントリでは、「
GnuTLSの使い方(第1回)」として、GnuTLSを使って、HTTPSでWebサーバに接続してHTMLを取得しようとしましたが、handshakeに失敗して通信できませんでした。
失敗の原因がどうもよく分かりません。APIの使い方の問題ではなさそうなものの、サーバの環境によるものか、GnuTLSを使う上で何か忘れているものがあるのか。
そこで、いったんGnuTLSの代わりに、OpenSSLを試してみることにしました。
「OpenSSL sample」で検索すると、
An Introduction to OpenSSL Programming(Part I)[PDF]
というちょうどいいドキュメントがひっかかるので、これを参考にします。
このドキュメントにはサンプルコードが用意されており、まずはこのサンプルを動かしてみます。
http://www.rtfm.com/openssl-examples/
まず、OpenSSLをインストールします。
手元の環境はMaxOS Xなので、MacPortを使います。
$ port install OpenSSL
次に、サンプルをビルドします。
$ ./configure --with-openssl=/opt/local/
$ make
MacPortを使ってOpenSSLをインストールしたため、そのインストール場所を--with-opensslオプションによって指定しています。
問題なくビルドができれば、SSLを通してウェブサーバからHTMLを取得してみます。
$ ./wclient -h twitter.com -p 443 -i
今度は、GnuTLSを使った場合と違い、すんなりとHTMLを取得できました。
GnuTLSを使ったときにhandshakeに失敗するのはなぜだろう?
とはいえ、これでSSL通信をする方法はわかったので、もともとのきっかけだった、HaskellからのSMTP over SSL/TLSを実装できそうです。
■関連するエントリ
GnuTLSの使い方(第1回)
--