証明書を使わないSSLの話

実はSSLでも証明書を使わない方式はあるよ、という話と、古いシステムを引っ張りだして試してみた話。
13

まずは今回の話のきっかけから

angel (as ㌵㌤の猫) @angel_p_57

話を戻して、そもそもなんでこんなことを試したかと言うと、こういう tweet を見て、そう言えば証明書(サーバ認証)なしのSSL方式あったなあ、試してみよっか、的な。 ※ここでは RSA になってるけど、まあ認証なしなら ADH だと思う。 twitter.com/taku_ito_dev/s…

2022-04-05 22:08:08
ITO Taku @taku_ito_dev

クライアントが pre master secret を共有するときはサーバ証明書についてるサーバの公開鍵で暗号化して相手方に送るわけやけど、そもそもサーバ証明書が送られてこない場合どうするの、と思ったら、ServerKeyExchange でテンポラリな RSA 鍵を送って、それで暗号化するのね。おもしろい。

2022-04-02 02:58:31

ADH というのは、後でも出てくるけど Anonymous DH、これは証明書を使った認証なしに、DH鍵交換で暗号化・MACだけ行う方式である。

で、ADHの使えそうな候補を見つけていたのだけど…

angel (as ㌵㌤の猫) @angel_p_57

いやー…。折角証明書なしのSSL ( ADH ) をサポートしてそうなブラウザ見つけたのに…。 pic.twitter.com/iaXtfTKcYd

2022-04-05 01:41:50
拡大
angel (as ㌵㌤の猫) @angel_p_57

で、ADH なサーバと、暗号方式も同意したのに、ブラウザがこけてしまう。これ、ADH 接続の動作試験してなかったんじゃなかろうか。残念。 pic.twitter.com/FlitKKCDbF

2022-04-05 01:44:39
拡大
angel (as ㌵㌤の猫) @angel_p_57

そしてその後 ADH サポートはバグとして無効化されてしまう。南無南無。 ※むしろ「なんでサポートしてたんだ」と言うべきかもしれないけど bugs.kde.org/show_bug.cgi?i…

2022-04-05 01:57:42

結局はうまく動かず諦めようかなと思っていたのだけども。

angel (as ㌵㌤の猫) @angel_p_57

あまりに残念なので、つい出来心でパッチを作ってしまった。 twitter.com/angel_p_57/sta…

2022-04-05 21:51:19
angel (as ㌵㌤の猫) @angel_p_57

実際に ADH なサーバと通信させるとこんな感じ。 pic.twitter.com/Vi3vCKzCG7

2022-04-05 21:53:06
拡大
angel (as ㌵㌤の猫) @angel_p_57

CipherSuite に ADH と出ているし、Au=None となっている。証明書なし、つまりサーバ認証なしのSSL ( SSLv3 ) 通信なのである。

2022-04-05 21:54:21
angel (as ㌵㌤の猫) @angel_p_57

なんで私はわざわざ古のソフトをデバッグしてパッチ作ってるんだろうと思わなくもないけど、まあうまく行ったからよし! で。

2022-04-05 21:55:20
angel (as ㌵㌤の猫) @angel_p_57

なお、通信データをダンプしてwiresharkで見てみるとこんな感じ。普通のSSL/TLSだとあるはずの ServerCertificate もないし、CipherSuite が DH_anon ( ADH ) にちゃんとなっている。 pic.twitter.com/AgEM27OOqe

2022-04-05 21:58:49
拡大

念のためだけど、ServerCertificate というのは、SSL/TLS でサーバ証明書を送ってくる時のメッセージである。
基本的にサーバ証明書は SSL/TLSに必要なので、これが無いということはほぼないはずなのだ。

angel (as ㌵㌤の猫) @angel_p_57

ということで、パッチあてたらADHできたんだから、このブラウザは ADH サポートで良いよね、と言いたいところなんだけど…。 バグの内容が ADH のことを全く考慮してなかったからなのが明らか過ぎてちょっと。まあやっぱり、ADH が使えるブラウザなんてなかったんやな、と。

2022-04-05 22:00:17
angel (as ㌵㌤の猫) @angel_p_57

なお、今回のシステムは RedHat Linux 7.1 + KDE 2.1.1、ブラウザはKDE付属 ( というかファイラー兼ブラウザコンポーネント ) の Konqueror である。 pic.twitter.com/qWwM0GlNBh

2022-04-05 22:01:47
拡大
angel (as ㌵㌤の猫) @angel_p_57

RedHat 7 といっても、最近の RHEL ( RedHat Enterprise Linux ) ではない。その前身のフリーで配布していた頃の RedHat ( しかもまだ64bit対応前 ) であり、実に 2001年のものだ。

2022-04-05 22:03:32
angel (as ㌵㌤の猫) @angel_p_57

この RedHat 7 には Netscape4.7 も付属しているけど、こちらはそもそも ADH が使えない。同系列の Mozilla も同様。 そして、もう1バージョン、RedHat 9/KDE 3 でも Konqueror を試したけど、バグは残ったままだった。 なので ADH の使えるブラウザなさそうね、と。 ※WindowsのIEは分からないけど

2022-04-05 22:05:35
angel (as ㌵㌤の猫) @angel_p_57

で、なぜわざわざ古いOSを引っ張り出してきたかと言うと、ADH は ( 当然というか ) ある時点から非推奨になってるので、使えるとしたらそれなりに古いシステムでないとダメだろうと。そういう判断のためである。 twitter.com/angel_p_57/sta…

2022-04-05 22:10:42
angel (as ㌵㌤の猫) @angel_p_57

なお、ADH というか「認証なし」が非推奨なのは残当ともいうべきところであり、むしろ最初から「なんでこの方式作ったの?」レベルではある。その理由は過去のこの記事を見れば分かると思う。 qiita.com/angel_p_57/ite…

2022-04-05 22:13:14
angel (as ㌵㌤の猫) @angel_p_57

まあ、たまに古いシステム触ってみるのも楽しいかも。色々変わってるけど、基本的な操作感覚はそのままだったのも意外だった。

2022-04-05 22:14:16