■ [Q3] VS2005SP1のランタイムライブラリ
msvcp80.dllが抜けていたので追加しておきました。システムに再頒布可能パッケージをインストールしなくても起動できます。
msvcp80.dllの追加は、以前試したときはだめだった気がするのですが、そのときは何か別の原因でだめだったようです。普通にstlport.5.1.dllをdumpbinしてみたら、msvcp80.dllとリンクされていました。しかし、std::uncaught_exceptionを処理するためだけにmsvcp80.dllをロードしなくてはいけないのはもったいないですね。
インストーラに同梱されるOpenSSLの2つのライブラリなのですが、S/MIMEがデコード出来ないケースが有ります。私は古いバージョン0.9.8dを使っています。
そんな話もありましたね。すっかり忘れていました。<br>0.9.8dと0.9.8eの差分を見てみたところ、PKCS7周りにかなりのエラー処理のコードが追加されていたので、そのどこかに引っかかっているのではないかと思います(今まではエラーが起きてもなんとなく先に進んでいたっぽいです)。<br>具体的に復号できないメールがあると確かめようがあるのですが、適当な鍵を作ってそのようなメールを作成できないでしょうか。
あ!自分もその現象発生しています。やっぱりOpenSSLのバージョン違いが原因なんですね。前は普通に見れてたのに急に見れなくなってたりしたので。
デコードできないものとデコードできるものとの明確な差が無いので、私も原因は掴みかねてます。自分から自分宛に送信したメールは問題ないんです。
ログレベルをERRORにしておくと、復号できないときにシステムログにOpenSSL側のエラーも出力するようにしてあるのですが、何か出ていませんか?
それらしいログは出ていません。もうすこし系統立てて調べてみます。
送信者のメーラや相手が暗号化に使う証明書に対する依存性を調べてみましたが、とくに相関は見られません。<br>本文の内容に依存するとしか思えないのですが、そうすると、原因は闇の中ですねぇ...。
PKCS#7の読み込み自体に失敗したときにログが出ていなかったので、出すようにしました。明日のNightly Build(3.0.1.3959以降)で再度確認してみていただけないでしょうか。<br>また、OpenSSLのコマンドで復号してみるとエラーに関する情報が出るかもしれません。
これまでちゃんと報告していませんでしたが、「デコードできない」というのは、「メッセージウィンドウが真っ白になる」状態を指します。「H」キーでヘッダを表示させると、「Content-Type:」などのヘッダも表示されません。<br><br>Nighty Buildの件は了解しました。明日は外出するので、検証は明後日以降になります。
とすると、復号自体は正常終了しているのにコンテンツが取り出せていないのかもしれません。復号が失敗した場合には、復号前のメッセージを表示するようにしてありますので。
レビジョン3959で試してみましたが、症状は変わりません。<br> ・メッセージウィンドウは空白になる。<br> ・エラーログには何も出力されない。<br>「OpenSSLのコマンドで復号」を試そうと思い、Shining Light ProductionsからダウンロードしてWin32版0.9.8eをインストール後、コマンドをたたいてみましたが、「ライブラリが足りない」などのエラーになってしまい、復号できませんでした。
やはりエラーにはならずに結果だけ取れていないという状況に見えますね。とすると実際に現象が起きるメッセージがないと調べるのは難しそうです。OpenSSLの内部を調べないといけなそうですので。<br>OpenSSLのコマンドが実行できないのは、msvcr70.dllかなにかがないせいではないでしょうか。
「ライブラリが足りない」の件は解決しました(コマンドのtypoでした)。<br>0.9.8eのライブラリを使ってdecrypt出来ないメールをQMAIL3から取り出して、0.9.8eのopenssl smime コマンドでdecryptしたところ、decryptできずに訳の分からないバイナリが出力されます。<br>同じメールを0.9.8dでdecryptしても同様な結果になりました(ただし、出力されるバイナリは異なります)。よく分からない結果です...。<br>QMAIL3で正常にdecryptできるメールでは、このようなことが起こらず、共に正常にdecryptされます。
確かに良く分かりませんね。QMAIL3では、OpenSSLのS/MIMEの機能をそのまま使っているわけではなくて、MIMEの解析は自前でやってPKCS7の処理をOpenSSLでやっているので、そのあたりで動作が異なるのかもしれません。<br>試しに、S/MIMEの処理まわりに、デバッグログを出力するコードを入れてみます。
昨日のNightly Buildで復号した直後の生データをデバッグログに出すようにしました。ログレベルをDEBUGにして見てみていただけないでしょうか。
リビジョン3961で確認しました。<br>decrypt出来ないメールを選択したときの動作は、以下のとおりです。<br> (1) メッセージウィンドウは白いまま。<br> (2) ログには、<br> 「... qscrypto::SMIMEUtilityImpl] Decrypted data.」<br> が出力され、その直後に↑の3つ前の書き込みにある「訳の分からないバイナリ」が出力されます。<br><br>正常なメールの場合は、(2)は出力されません。<br><br>なお、decryptできなくとも、ステータスバーには鍵アイコンが表示されます。
同じ事を0.9.8dでやるとどうなるでしょう?やはり、OpenSSLのコマンドでやったときと同じ別のバイナリが出力されますか?<br>QMAIL3側は、OpenSSLがエラーを返していないので、出力されたバイナリからメッセージを作っているはずです。で、変なコンテンツからメッセージを作っているので表示できていないのだと思います。復号事態はエラーが発生していないので、鍵アイコンも表示されます。
リビジョン3961で、ssleay32.dllとlibeay32.dllを0.9.8dに差し替えて、↑と同じ操作をしたところ、ログには「訳の分からないバイナリ」ではなく、正常にdecryptされた内容が入りました。