POP/SMTP over SSLにおけるクライアント証No.22747
TaMaT さん 05/05/06 05:14
 
いつも鶴亀を使わせていただいております、TaMaTと申します。

さて、POP/SMTP over SSLの環境を自宅に構築したのですが、
クライアント証明書の選択ができずに難儀しております。

当方の環境では、
1.社用サーバのクライアント証明書
2.私用自宅サーバのクライアント証明書
3.友人宅サーバのクライアント証明書
と3つのクライアント証明書が組み込まれており、
2.と3.のそれぞれのサーバに対しそれぞれ適切なクライアント証明書を提示したいの
ですが、
どうやら勝手にIEでの表示における一番上のクライアント証明書が使われてしまって
いるような挙動を示してしまい、
クライアント証明書の認証エラーとなってしまいます。

もしクライアント証明書を選択するような機能がすでに実装されているのでしたら申
し訳ありませんが、
もしもまだその機能が無いようでしたら、
たとえばアカウントごとの設定->メールサーバの設定辺りに、
そのアカウントにおいて提示するクライアント証明書の設定機能をつけるなどしてい
ただけますと幸いです。

[ ]
RE:22747 POP/SMTP over SSLにおけるクラNo.22750
秀まるお2 さん 05/05/06 10:28
 
 たぶん、鶴亀メール側でそれなりの実装が必要なんだと思います。具体的に出
ているエラーメッセージの内容だけ教えて欲しいです。(たぶん、関数名とか
エラーコードとかが出てるんじゃないかと思うので)

 ただ、それで鶴亀メール側ですぐ対応できるという訳では無くて、それなりの
テスト環境を構築しないといけないです。ちょっと今すぐは対応できない可能性
が高いですけど。

[ ]
RE:22750 POP/SMTP over SSLにおけるクラNo.22752
TaMaT さん 05/05/06 13:05
 
まず、クライアント証明書がない場合ですが、以下のとおりになります。

------------------------------------------------------------
stunnel-4.10側のログ

pop3s connected from xxx.xxx.xxx.xxx:xxxx
SSL_accept: 140890C7: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICAT
E:peer did not return a certificate


鶴亀メール側のログ
>開始時刻: 2005/05/06 xx:xx:xx
>****受信:xxxxxxxx
>I サーバーを検索中 - xxxxxx
>I 接続中 - xxx.xxx.xxx (port=995)
>I 接続完了
>I SSL初期化中
>E SSLの処理(2)でエラーが発生しました。エラーコード=0x80090326
>終了時刻: 2005/05/06 xx:xx:xx
------------------------------------------------------------
stunnelはクライアント証明書を要求し、それが提示されないとエラーとしているよ
うです。
これ自体は、クライアント証明書がないがゆえのアクセス拒否として妥当に見えます。


次に、そのメールサーバに対して正しいクライアント証明書1枚だけをIEに登録した
状態でアクセスしますと、
以下のとおりになります。
------------------------------------------------------------
stunnel-4.10側のログ

VERIFY OK: depth=1, --CA証明書の検証OK--
VERIFY OK: depth=0, --本来提示するべき有効なクライアント証明書の検証OK--
Connection closed: xxxx bytes sent to SSL, xx bytes sent to socket

鶴亀メール側のログ
>開始時刻: 2005/05/06 xx:xx:xx
>****受信:xxxxxxx
>I サーバーを検索中 - xxxx
>I 接続中 - xxx.xxx.xxx.xxx (port=995)
>I 接続完了
>I SSL初期化中
>I 暗号化開始 (TLS1.0/RC4/128bit)
>R +OK xxxxxxxxxxxxxxx ready <xxxxxxxxxxx@xxxx>
>I 認証作業中(APOP)
>S APOP ****
>R +OK xxxxxxxx has xx message (xxxxx octets).
>I メール一覧を取得中
>S STAT
>R +OK xx xxxxx
>S LIST
>R +OK xx message (xxxxx octets)
>R ...(xxxバイト)
>S UIDL
>R +OK xx message (xxxxx octets)
>R ...(xxxバイト)
>S QUIT
>R +OK Pop Server at xxxx signing off.
>終了時刻: 2005/05/06 xxxx
------------------------------------------------------------
これは見た限り正常動作に見えます。


最後に、そのメールサーバに対して本来提示されるべきクライアント証明書(*1)以外
のクライアント証明書
(IE内での扱いソート順が、(*1)よりも上(前)として扱われる証明書)を組み込んだ場
合、
以下のようになります。
------------------------------------------------------------
stunnel-4.10側のログ

pop3s connected from xxx.xxx.xxx.xxx:4360
VERIFY ERROR: depth=0, error=unable to get local issuer certificate: --友人
宅のクライアント証明書--
SSL_accept: 140890B2: error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICAT
E:no certificate returned

鶴亀メール側のログ
>開始時刻: 2005/05/06 xx:xx:xx
>****受信:xxxxxxxx
>I サーバーを検索中 - xxxxxx
>I 接続中 - xxx.xxx.xxx (port=995)
>I 接続完了
>I SSL初期化中
>E SSLの処理でエラーが発生しました。証明書が信用できないか、またはうまく検証
>できません。
>「アカウント毎の設定・メールサーバー・詳細」の「SSL接続で、証明書を検証しな
>い」をONにすれば続行できるようになります。
>****送信:xxxxxxxx
>I 送信対象無し
------------------------------------------------------------
どうやら、鶴亀メールは友人宅のクライアント証明書を提示しているようで、
自宅サーバに対するクライアント証明書ではないため、検証エラーとなっているよう
に見えます。
なお、ログで触れられている「証明書を検証しない」をONにしても正常動作にはなり
ません
(というか、ONの状態でのログです)。


上記が、たとえば同じサーバや信頼関係で結ばれたCA間にまたがった場合(おそらく
この場合は正常動作しそう?)でも、
一人が複数枚のクライアント証明書を同時に保有し、
それをアカウントごとに使い分ける(提示し分ける)ことは十分ありえることと思いま
すので、
たとえばIEのように「証明書の選択」ダイアログを出してクライアント証明書を選択
させたり、
アカウントごとに提示するクライアント証明書を設定しておいたりする機能が必要だ
と思われます。


[ ]
RE:22752 POP/SMTP over SSLにおけるクラNo.22754
秀まるお2 さん 05/05/06 13:51
 
 ソースコードを見直すなどして、一応それなりに状況が理解出来ました。

 鶴亀メールでは、SSL/TLSの処理の中でクライアント証明書が要求された時に、
Issuer、つまり、相手のサーバーの名前から、そのサーバーが発行した証明書を
おもむろに検索し、最初に見つかった証明書を使って認証しようとするようです。

 つまり、そのサーバーが発行した証明書が複数あった場合はどれが選択される
か分からないってことになるようです。ただ、鶴亀メールが検索する証明書
ストアは"MY"という所でして、つまり、Internet Explorerでの「ツール・
インターネットオプション・コンテンツ・証明書...」の「個人」の所に登録さ
れてる証明書しか検索しないようにはなっているようです。

 普通なら、他人の証明書をこの「個人」の所に入れておく訳じゃないと思うし、
一応、今回のケースでも、その他人の証明書を「ほかの人」の所に移動してやれ
ば解決しそうな気はします。

> たとえばIEのように「証明書の選択」ダイアログを出してクライアント証明書を選択
> させたり、
> アカウントごとに提示するクライアント証明書を設定しておいたりする機能が必要だ
> と思われます。

 たしかにそういう機能か無いとダメな気がします。

 とりあえず、証明書が複数見つかった場合には、アカウント毎の設定での自分
自身のメールアドレスと一致する方を優先させるって作戦がありますけど、それ
で解決したりしませんかね?。あるいは、「アカウント毎の設定・個人情報・詳
細」の「自分用メールアドレスの別名」に一致する証明書があればそれを使うっ
て仕様にしておけば、そこに証明書用のメールアドレスを入れておくことで認証
エラーが回避できるって作戦もありますけど。

[ ]
RE:22754 POP/SMTP over SSLにおけるクラNo.22755
TaMaT さん 05/05/06 15:17
 
>鶴亀メールでは、SSL/TLSの処理の中でクライアント証明書が要求された時に、
>Issuer、つまり、相手のサーバーの名前から、そのサーバーが発行した証明書を
>おもむろに検索し、最初に見つかった証明書を使って認証しようとするようです。
>
>つまり、そのサーバーが発行した証明書が複数あった場合はどれが選択される
>か分からないってことになるようです。

う〜ん、現在問題となっている事象では、上記のような動作はしていないように見え
ますが……。
3枚の証明書はCAも別、管理も別のものなのですが、混ざって提示されているように
見えます。
この辺につきましては、こちらの環境設定誤りもありえますのでこちらでも再度見直
しさせていただきます。


>ただ、鶴亀メールが検索する証明書
>ストアは"MY"という所でして、つまり、Internet Explorerでの「ツール・
>インターネットオプション・コンテンツ・証明書...」の「個人」の所に登録さ
>れてる証明書しか検索しないようにはなっているようです。
>
> 普通なら、他人の証明書をこの「個人」の所に入れておく訳じゃないと思うし、
>一応、今回のケースでも、その他人の証明書を「ほかの人」の所に移動してやれ
>ば解決しそうな気はします。


「ほかの人」ストアは、

>ほかの人 このストアには、ユーザーが署名付きメッセージを交換した
>相手方のユーザーの証明書が格納されます。

とありますとおり、自分に対して発行された証明書を格納する場所ではありません。
今回のように、
「自分に対して」「複数のCAから」「それぞれのクライアント証明書が」発行された
場合、
複数のクライアント証明書が「個人」ストアに入ることは妥当なことと思います。
たとえば一人二役を兼ねている人なら、
同じCAからのクライアント証明書が複数枚(役割ごとに1枚ずつ)ある場合もありえる
でしょう。


>とりあえず、証明書が複数見つかった場合には、アカウント毎の設定での自分
>自身のメールアドレスと一致する方を優先させるって作戦がありますけど、それ
>で解決したりしませんかね?。

保有するクライアント証明書の目的がすべて「電子メールの保護」である場合は
上記対応で問題ないと思いますが、
それ以外の目的の証明書が混ざっている場合、その証明書に記載されたメールアドレ
スは
「単なる連絡先」程度の内容であることがありえると思われます。
この場合、鶴亀メールとして「電子メールの保護」目的で使用するものは、
単純なメールアドレス一致では特定できないでしょう。

前述のとおり、
>Issuer、つまり、相手のサーバーの名前から、そのサーバーが発行した証明書を
>おもむろに検索し、最初に見つかった証明書を使って認証しようとするようです。
の挙動がこちらでは確認できていないのですが、
この挙動を満たし、かつクライアント証明書の目的に「電子メールの保護」が存在し、
かつ指定したメールアドレスと一致するものを使う……とすれば、
CAの運用ポリシーが徹底された環境ではなんとなく動きそうではあります。
この辺は実際やったことがないのであてずっぽう意見です。すみません。


>あるいは、「アカウント毎の設定・個人情報・詳
>細」の「自分用メールアドレスの別名」に一致する証明書があればそれを使うっ
>て仕様にしておけば、そこに証明書用のメールアドレスを入れておくことで認証
>エラーが回避できるって作戦もありますけど。

転送メアドを使っている場合なども考慮した場合、
できれば、アカウントに直接設定された「送り主の情報-メールアドレス」以外の指定が
可能なほうが望ましいですね。


あまり使われない機能ですし、ややこしい問題&セキュリティという煩い機能ですので
すぐに解決していただかなくても、気長に待たせていただきます。
そのうち対応くださいますと幸いです。

[ ]
RE:22755 POP/SMTP over SSLにおけるクラNo.22756
秀まるお2 さん 05/05/06 16:29
 
 僕もよく分かってないのでなんですが…

 SSL/TLSの処理で、クライアント証明書認証が発生した場合には、鶴亀メール
はIssuerListというのを取得して、そのIssuerListにマッチする証明書を"MY"
ストアから検索して、それを使うように出来ているようです。IssuerListっての
は、たぶんですけどメールサーバー側か送ってくる情報だと思います。

 自分で作った処理ながら、この辺の詳細が分かってないという…。どこかの
ソースコードをまねしただけかもしれませんけど。

--------------
 で、肝心の、アカウント毎にクライアント証明書を特定させる仕組みを作るに
しても、「この証明書を使う」ってことをいかにして記憶するかが問題です。僕
が思ったのは、つまり、メールアドレスで証明書を特定する方法ですけど、それ
ではダメなケースもあるってことですかね。メールアドレスで特定できなければ、
シリアルナンバーでも使うしか無いような気がしますけど。

 出来ればこういう、アカウント毎に覚えなければならない追加の情報は増やし
たく無いなぁと思ったりします。で、とりあえず、メールアドレスが一致してる
証明書を優先して使う処理だけ、既に入れてしまいました。とりあえず僕の所で
今ちょっとテスト出来ないので、これで使ってみていただくというのはどうでし
ょ?

[ ]
RE:22756 POP/SMTP over SSLにおけるクラNo.22757
TaMaT さん 05/05/06 20:51
 
> 僕もよく分かってないのでなんですが…
>
> SSL/TLSの処理で、クライアント証明書認証が発生した場合には、鶴亀メール
>はIssuerListというのを取得して、そのIssuerListにマッチする証明書を"MY"
>ストアから検索して、それを使うように出来ているようです。IssuerListっての
>は、たぶんですけどメールサーバー側か送ってくる情報だと思います。
>
> 自分で作った処理ながら、この辺の詳細が分かってないという…。どこかの
>ソースコードをまねしただけかもしれませんけど。
>
>--------------
> で、肝心の、アカウント毎にクライアント証明書を特定させる仕組みを作るに
>しても、「この証明書を使う」ってことをいかにして記憶するかが問題です。僕
>が思ったのは、つまり、メールアドレスで証明書を特定する方法ですけど、それ
>ではダメなケースもあるってことですかね。メールアドレスで特定できなければ、
>シリアルナンバーでも使うしか無いような気がしますけど。
>
> 出来ればこういう、アカウント毎に覚えなければならない追加の情報は増やし
>たく無いなぁと思ったりします。で、とりあえず、メールアドレスが一致してる
>証明書を優先して使う処理だけ、既に入れてしまいました。とりあえず僕の所で
>今ちょっとテスト出来ないので、これで使ってみていただくというのはどうでし
>ょ?

とりあえず興味があったので調べてみた限りでは、
POP/SMTP over SSLとしての対応と、S/MIMEとしての対応では少し違ったアプローチ
が必要なのかな、と感じています。

S/MIMEでは、たとえば以下のURLを参照しますと、
http://www.veltec.co.jp/ipa/rfc2312_index.htm
の、3. 証明書の中の識別名

電子メールの証明のために使用されるべく、いろいろとメーラにも要求があるようで
す。
こちらを前提としますと、今回の対応ポリシーは正しそうに感じます
(というか、もっと厳しくてもよさそう)。

それに対してPOP/SMTP over SSLの場合、そもそも電子メールの証明というよりはク
ライアント認証であり、
その上でPOP/SMTPが流れるわけですから、証明書中のメールアドレスを使った制約or
関連付けはあまり妥当ではないと感じます。

結局、S/MIMEでは今まで述べられているような
メールアドレスによる自動での証明書の選択(というか強制)が可能ですが、
POP/SMTP over SSLにおいてはやっぱりアカウントごとの設定として
「このアカウントでは、このクライアント証明書を提示する」
ような機能が最終的に必要になるのではないでしょうか。


>で、とりあえず、メールアドレスが一致してる
>証明書を優先して使う処理だけ、既に入れてしまいました。とりあえず僕の所で
>今ちょっとテスト出来ないので、これで使ってみていただくというのはどうでし
>ょ?

話が大きくなって申し訳ありません。
資材をいただければこちらで検証した上でご報告いたします。
先にも述べましたとおり気長に待ちますので、御手隙のころにでも対応ください。

[ ]
RE:22757 POP/SMTP over SSLにおけるクラNo.22758
秀まるお2 さん 05/05/06 21:30
 
> POP/SMTP over SSLにおいてはやっぱりアカウントごとの設定として
> 「このアカウントでは、このクライアント証明書を提示する」
> ような機能が最終的に必要になるのではないでしょうか。

 そうなりますか。ただ、証明書の一覧を表示して「どれを使いますか?」みた
いなのは、かなり手間暇かけてやらないと作られない物なので、そこまでするの
もなんだし…。

 とりあえず、どの証明書を使うのか、メールアドレスで指定するってやり方に
します。

[ ]
RE:22758 POP/SMTP over SSLにおけるクラNo.22768
おひ さん 05/05/08 22:29
 
おひと申します.

一段落したようなので今更ですが….

今までクライアント証明書が必須な場面にでくわしたこともありません
し,テスト用証明書を入手する元気もないので単なる妄想です.(^^;

素朴な疑問なのですが,

> どうやら勝手にIEでの表示における一番上のクライアント証明書が使われてしまって
OS の動きとしてこれが普通なんでしょうかね??
複数のクライアント証明書を保有するのは往々にしてあるとだと思いま
すし….
#これは TaMaT さん個人への問いかけではありませんので為念.
 誰へ問いかけているかは….(^^;

既に試しているかと思いますが,その証明書がいかようなものかわかり
ませんがそのルート証明書を「信頼」してもダメなもんなんですかね?

#Netscape だと自分で管理しているのでまともな動きをする?


> stunnel-4.10側のログ
逃げの手として,stunnel 側で証明書を個別に指定し待ち受けポート番
号を変えてバックグラウンドで複数走らせる,とかってできないものな
のでしょうか?


#やっぱりちゃちゃになってしまった….
 A. M$

[ ]
RE:22768 POP/SMTP over SSLにおけるクラNo.22769
おひ さん 05/05/09 03:09
 
おひと申します.

気にしていないと思いますが.

> OS の動きとしてこれが普通なんでしょうかね??

OS と書いたのはちょっと軽率すぎて,
・どこまでが誰の仕事なの?
・OE はどうなんでしょう?
 (以前はクライアント証明書に対応していなかったはず < 自信なし)
・他のアプリから使う場合の I/F が提供されている?
 (ネゴシエーションの段階で認証局の情報等わかるはずなのでそこか
   ら絞り込めるような仕組みとかとか)
といったことを私自身知らないまま,SSL なんで別に目新しいものでも
ないのにこんなもんなのかなぁ,という率直な疑問を略してしまいました.
すいませんでした.m(_ _)m


#ちゃちゃおわり

[ ]
RE:22769 POP/SMTP over SSLにおけるクラNo.22770
秀まるお2 さん 05/05/09 08:04
 
 証明書を探す処理は鶴亀メールの中でやってるので、今回の話は鶴亀メール自
体の、僕のプログラミング上の話ってことになります。

 ただ、実は僕もあまりこの辺に詳しくないし、テスト環境を作るのも大変そう
なので、この機会に修正しつつ、TaMaTさんに確認してもらおうと目論んでいた
りします。

 (一応、レベルダウンする可能性も無いと思うし)

[ ]