2005年10月27日(木) [長年日記]
- 昨日は体調不良で休んだ。年だねえ。
■ [security] SSLの暗号化通信開始までの流れ
SSLについてちょっとメモ。IPAのサイトにある7.1 TLS (SSL)が参考になる。
以下、おれの理解。
- クライアントからサーバへ、使用したい暗号アルゴリズムのリストなどを送信。
- サーバからクライアントへ、使用する暗号アルゴリズムなどを返信。
- アルゴリズムは、鍵交換用(RSAなど)、暗号化用(RC4、DESなど)、ハッシュ用(MD5、SHA-1)の3種類を決定する。
- サーバからクライアントへ、サーバの証明書を送信。証明書内にサーバの公開鍵も含まれている。
- クライアントはサーバから送られた証明書を検査。
- クライアントからサーバへ、セッション鍵の元情報(プリマスタシークレット)を送信。プリマスタシークレットはサーバの公開鍵を使い暗号化して送信する。プリマスタシークレットは乱数なのかな。
- クライアント、サーバ共、プリマスタシークレットからマスタシークレットを生成し、更にマスタシークレットからセッション鍵、MAC鍵、初期ベクトルを生成する。
- 以降は、双方で生成した共通のセッション鍵を使って暗号化を行い通信する。
■ [security] stunnelが使う暗号アルゴリズム
で、stunnelがどんな暗号アルゴリズムを使うのかを知りたい。
アルゴリズムは設定ファイルのオプションの「ciphers」で指定するようだ。指定しなかった場合の値は、stunnelをversionオプションを指定して実行すると分かるみたい。
$ /usr/sbin/stunnel -version stunnel 4.05 on i386-redhat-linux-gnu PTHREAD+LIBWRAP with OpenSSL 0.9.7a Feb 19 2003 ... ciphers = ALL:!ADH:+RC4:@STRENGTH ...
「ALL:!ADH:+RC4:@STRENGTH」の意味が分からないけど、stunnelはopensslを利用しているようなのでopensslのオプションを調べれば分かりそう。
■ [security] opensslでのciphersの指定
UNIXの部屋にある説明を元に「ALL:!ADH:+RC4:@STRENGTH」を解釈すると、「全ての暗号スイートから ADH が関係するものを除き、RC4の優先度を下げてから暗号強度順にソートする」という意味か?
$ openssl ciphers 'ALL:!ADH:+RC4:@STRENGTH'
を実行したら「DHE-RSA-AES256-SHA」が先頭に出力された。「man ciphers」によるとこれは「TLS_DHE_RSA_WITH_AES_256_CBC_SHA」という意味らしい。これはRFC 2246などを見ると鍵交換アルゴリズムが「鍵長無制限のEphemeral DH with RSA signatures」、暗号化アルゴリズムが「鍵長256ビットのAES」、ハッシュアルゴリズムがSHAということかな。手元のopensslはこれを優先して使おうとするはず。
opensslをクライアントとして起動してサーバに接続すると色々情報が出力されるようなので、試してみた。
$ openssl s_client -connect ホスト名:ポート番号 -cipher 'ALL:!ADH:+RC4:@STRENGTH' -state ... Server public key is 1024 bit SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA ...
となった。AES256-SHAというのはTLS_RSA_WITH_AES_256_CBC_SHAのことのようなので、鍵交換アルゴリズムは「鍵長無制限のRSA」になり、サーバの公開鍵の鍵長は1024ビットだったということだろう。
■ [security] SSL関連のリンク
上に挙げた以外に参考になるサイトをメモ。
- Secure Sockets Layer (SSL) (Apache2のマニュアル)
- 不正アクセスを防止するSSL/TLS (@IT) 詳しいが細かすぎてすぐには理解できない
- SSL関連情報のページ (ねこだま) 内容は古い
■ やること
- 蛍光灯を捨てる
1399円払う- 請求書
- 見積書
- 家賃