OpenSSLの0.9.8hがリリースされたのでビルドしてみました。Windows CE版をビルドするには以下のパッチをあてる必要があります。
diff -ur openssl-0.9.8h.orig/crypto/o_str.c openssl-0.9.8h/crypto/o_str.c --- openssl-0.9.8h.orig/crypto/o_str.c 2008-03-29 22:22:49.000000000 +0900 +++ openssl-0.9.8h/crypto/o_str.c 2008-05-31 20:24:48.474540000 +0900 @@ -60,7 +60,7 @@ #include <e_os.h> #include "o_str.h" -#if !defined(OPENSSL_IMPLEMENTS_strncasecmp) && !defined(OPENSSL_SYSNAME_WIN32) +#if !defined(OPENSSL_IMPLEMENTS_strncasecmp) && !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) # include <strings.h> #endif
本文と直接関係が無くて恐縮です。取引先メンバーがS/MIMEの証明書を更新したため、アドレス帳を一新しました。具体的には、古いアドレス帳を捨てて、メニューの「ツール->送信者をアドレス帳に追加」で古い証明書を持つアドレスと新しい証明書を持つアドレスを登録しました。自分のアドレスもアドレス帳に入っており、自分もこれまでに一度証明書を更新しているため、2つのアドレスがアドレス帳に登録されています。一方、アカウントの設定では、古い証明書をサブアカウントに適用しています。一連のアドレス帳更新作業後に自分宛に送信すると、古い証明書で暗号をかけてしまう症状が出ています。自分の証明書(ca.pem,key.pem)はいじっていません。サブアカウントを削除しても症状が改善されません。なにか調べるべきところがあれば、ご教示ください。なお、Windowsの証明書ストアは参照していません。
二つほど良くわからないことがあります。一つ目は、自分に送信するとというのは、Edit2のセキュリティの設定で自分宛に暗号化するように設定した場合ということでしょうか?それとも、ここの設定はオフで、自分宛に普通に送った場合でしょうか?<br><br>もうひとつは、自分のアドレスが二つアドレス帳に登録されているということですが、この二つのアドレスは異なるアドレスでしょうか?それとも同一のアドレスで証明書が二つということでしょうか?
(1)「自分用に暗号化する」は使用していません。To:に明示的に自分のアドレスを入れています。(2)アドレス帳に登録しているアドレスは同一のものです。entryは別にして有効期限の異なる2つの証明書を紐付けしています。
追伸です。「自分用に暗号化する」を使用してTo:自分とすると、正規の(最新の)証明書でエンコードされました。それから、最初のツッコミに書いた「ca.pem」は「cert.pem」の誤りです。
さらに追伸です。↑の『「自分用に暗号化する」を使用してTo:自分とすると、正規の(最新の)証明書でエンコードされました。』ですが、新旧2つの証明書のどちらでもデコードできています。これはこれで助かります。
宛先に入力されたアドレスがアドレス帳から複数見つかった場合には、最初に見つかった方が使われます。このとき証明書の検証をしないので、期限が切れていても使われてしまいます。アドレス帳に取り込んだ時点で検証しているので使うときには検証していませんが、したほうが良いかもしれませんね。<br><br>自分用に暗号化する場合には、cert.pemで指定した証明書が使われます。
↑の「最初に見つかった方が使われます。」ですが、To:などの宛先フィールドでは、部分的に入力するとアドレス帳をインクリメンタルサーチしてくれる入力支援機能がありますよね。そのときに複数の該当アドレス帳エントリが表示されるのでひとつを選択しますが、このときに選んだエントリが採用されるのではなく、そのエントリと同じアドレスの中で、最初に見つかったものが選択されるのですね?
分かりにくいかもしれないので、↑の質問を換言します。<br><br>アドレス帳には具体的に以下のように(この順序で)入れています。<br> エピ1 <epi@aaa.com> →古い証明書に紐付け<br> エピ2 <epi@aaa.com> →新しい証明書に紐付け<br>To:に「epi]と入力すると、両方が候補として表示されるので、エピ2を選択しています(To:フィールドにも「エピ2 <epi@aaa.com>」と表示されます)。しかし、実際に暗号化に使われるのは、アドレス帳で最初に出現する「エピ1 <epi@aaa.com>」のほうになるのですね?
その通りです。入力された時点でアドレス帳との直接の関係がなくなって単なるテキストになりますので、証明書を探すときにはメールアドレスからアドレス帳を引きなおして証明書を見つけます。
以前の(捨てた)アドレス帳のほうは、1人に1つのエントリを作成して、複数のアドレスを登録していました。新しく登録した情報は、上の行に格納するようにQMAIL3は動作していました。<br><br> <entry><br> <name>エピ</name><br> <addresses><br> <address certificate="新しい証明書">epi@aaa.com</address><br> <address certificate="古い証明書">epi@aaa.com</address><br> </addresses><br> </entry><br><br>今回は、1つのアドレスで1つのエントリを作成したので、後から登録したアドレスがファイルの後ろに追加されたので、最初のような状況に陥ったのですね。