ここうさぎ、https対応作業中

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] https 対応作業、苦戦中。
[キーワード] OpenSSL,https,proxy

« 今週のお買い物 (2004.11.14~11.20) | トップページ | ぴちぴちピッチ お楽しみ袋 »

2004.11.21

ここうさぎ、https対応作業中

OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―

OpenSSL を使えば、簡単に https 対応できると思ったら、そうでもないことが判明。いま、苦戦中です。

proxy を通さない場合は、サンプルプログラムの通りにやればいいんだろうけど、proxy 経由の https はサンプルが見つからないし。「OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―」という本が参考になるかな、と思ってアマゾンで買ってみたんだけど、私の知りたい情報が全く載ってません。orz

絶対、私以外にも OpenSSL で https クライアントを作ろうとしている人、作った人はいるはずなので、どこかでノウハウが公開されていてもよさそう。こういうとき、ソースコード検索エンジンがあれば、簡単に見つかるのかもしれません。

perl だと Net::SSLeay を使えば、たった数行で書けるようなのに。最悪、Net::SSLeay の該当部分を C に移植することになりそう。


私はOpenSSLの使い方が知りたくてこの本を購入したのですが、残念ながら、OpenSSLについては、それほど詳しくはありません。サンプルコードはOpenSSLとCによる物と、PureTLSとJAVAによるものが載っていますが、どちらも触り程度です。OpenSSLを利用してSSLを利用するためには、この本を片手にネットを調べまわる事になりそうです。

マスタリングTCP/IP SSL/TLS編

マスタリングTCP/IP SSL/TLS編

「OpenSSL―暗号・PKI・SSL/TLSライブラリの詳細―」の中でしきりに読むことを推奨している「マスタリングTCP/IP SSL/TLS編」も、あまり参考になりそうにない感じ。


ファイアウォールの内側から外側へアクセスするプログラムで OpenSSL を使ったものとして「stone」という例がありますが、ソースを見ても、私のやりたいことの参考になりそうなところは見つからず。探し方が悪いだけかもしれませんが。

投稿者: tsupo 2004.11.21 午前 10:34 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


BlogPet」カテゴリ内の最近の記事

Blogクライアント」カテゴリ内の最近の記事

ここうさぎ(cocousagi)」カテゴリ内の最近の記事

プログラミング」カテゴリ内の最近の記事

品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/6737/2021558

この記事へのトラックバック一覧です: ここうさぎ、https対応作業中:

» OpenSSL本 de ガックシ from びんよりぶろぐ
ここうさぎさんが購入されたOpenSSL本、私も買ったのですが、 個人的にはかなりガッカリしました。 ASN.1構造を扱うあたりとか、ハッシュ、公開鍵暗号... 続きを読む

受信: 2004.11.27 午後 10:06

コメント


http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=2895
をどうぞ。

「マスタリングTCP/IP SSL/TLS編」の
 9.16 プロキシ
 9.23 プロキシの CONNECT
でも触れられています。

投稿者: 68user (2004.11.21 午後 02:47)


こんにちは、BlogWrite担当です。
以下の文章が参考になるかと思いました。

http://www.cisnet.or.jp/home/tsuneoka/cgitech/3.html

個人的には、上記にあるように、WindowsAPI(WinINET)を利用しています。ですから、HTTPでもHTTPSでも基本的に意識せずに利用できています。

投稿者: BlogWrite担当 (2004.11.22 午前 01:51)


68userさん
わざわざコメントありがとうございます。68userさんのソースを参考にさせてもらっています。今回教えていただいた部分は、Internet Explorer がどういうパケットを投げているのかを解析している過程でわかった(Net::SSLeay のソースも結局、同じことをやってました)んですが、SSL_connect() がどうしてもエラー(SSL_ERROR_SSL といういちばん原因のわかりにくいエラー)になってしまうので、ひょっとすると、OpenSSL の関数の中に proxy モード で connect するようなものはないかと探していたところでした。

結局、BlogWrite担当者さんに提示していただいたWebページに載っているプログラム例の中の

const char *seed = "DHJSHD2HSDopHSFewqAJKAJKytFrJKAFuKytJAFJKAS4DFJ";
RAND_seed(seed, strlen(seed));
SSLeay_add_ssl_algorithms();

の3行が抜けていたのが SSL_connect() がうまくいかない原因っぽいです。

とりあえず、光が見えてきました。ありがとうございます。


BlogWrite担当さん
「ここうさぎ」は Windows 以外でも動くように書いているので(まだ、Windows 用以外の make 環境を作ってませんが)、wininet は使わない方針です。wininet を使えば、割りと簡単に書けそうですね。機会があったら使ってみます。wininet は ftp クライアントを書くのに使ったことはあるんですが、それっきりになってます。

投稿者: tsupo (2004.11.22 午前 04:03)


SSL_connect() がうまくいかなかった(もしくは、うまくいったように見えつつ、その後 OpenSSLライブラリ内でクラッシュする)のは、『PRNG は「最低でもこれだけのサイズの種が必要」という量があり (OpenSSL 0.9.7c では 32 バイト)、それを下回っているとやはりエラーとなってしまう』のが原因のようでした。「種」を必要十分なものにすることで、うまく動くようになりました。

投稿者: tsupo (2004.11.24 午後 02:49)


ちなみに
> const char *seed = "DHJSHD2HSDopHSFewqAJKAJKytFrJKAFuKytJAFJKAS4DFJ";
> RAND_seed(seed, strlen(seed));
だと、3回に1回しかうまく動きませんでした(3回中、2回はクラッシュする)。

結局、

unsigned short rand_ret;

RAND_poll();
while ( RAND_status() == 0 ) {
rand_ret = (unsigned short)(rand() % 65536);
RAND_seed( rand_ret, sizeof ( rand_ret ) );
}

で解決しました。

投稿者: tsupo (2004.11.24 午後 02:53)


依然として、SSL_connect() がうまくいくときといかないときがあります。ググってみると、結構、はまっている人が多いみたい。

どういうエラーかというと

3332:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s23_clnt.c:475:

というエラーが出ます。Windows のソケット特有の問題だとかいう説もあるようですが、真相は不明。

投稿者: tsupo (2004.11.24 午後 11:33)


あと ERR_print_errors_fp() ですが、Visual C++ のデバッグビルドで使うと落ちますね。リリースビルドだと問題なく動くんですが。(OpenSSL.org で配布してる Win32 用バイナリパッケージの場合)

投稿者: tsupo (2004.11.24 午後 11:35)


参考になると思います。

http://www21.ocn.ne.jp/~k-west/SSLandTLS/draft-luotonen-ssl-tunneling-03-Ja.txt

投稿者: sheepman (2004.11.29 午前 11:18)

コメントを書く




※イタズラ防止のため、メールアドレスを入力しないと投稿できません。

次からのコメント入力の手間を省くために、名前やメールアドレスをcookieに記憶しますか?


URL を入力すると、その URL にリンクがはられます。
なお、メールアドレスは公開されません。ご安心ください。


ワード

ニッセン

fujisan.co.jp

楽天市場