opensslで手動メールセキュリティ

私の使っているWeMailというメーラーはSMIMEに対応していないので(正確には有料でオプションはあるみたいだが不明)opensslで手動でサポートしてみる。


■署名&送信

1.メール書く
2.メールの本文部分(ヘッダを除いた部分)をQエンコード(Quoted-printable)する。qprint.exeがすごく便利。
3.本文にContent-TypeとContent-Transfer-Encoding: quoted-printableを追加する
4.opensslで署名する。「openssl smime -sign -in 本文ファイル.txt -out 出力ファイル.txt -signer マイ証明書.pem -inkey マイ暗号鍵.pem -certfile 追加のCA証明書.pem」
5.メールの本文部分を署名されたテキストで置き換える。
6.メール送る


重要:手動でQエンコードしておかないと、メーラーMIMEに従って本文中のシフトJISiso-2022-jpに変換してから送ろうとするので、署名後にメーラーによってメールが「改竄」されてしまい、受信側で改竄警告が表示されてしまう。Qエンコードしておけば本文が全部asciiになるのでメーラーも余計なことをしない。


■受信&照合

WeMailは受信しても自動で署名の照合をしない。(SMIMEサポートしてないんだから当然)
改竄されているかどうかの検証は手動で行う必要がある。


1.「openssl smime -verify -in 受信テキストファイル.txt -out 出力ファイル.txt -CAfile 追加のCA証明書.pem」


出力ファイルに本文が出力される。


■受信&復号

暗号化されている場合は復号しないと読めない。
当然だけどこれも手動でやる。


1.まず復号「openssl smime -decrypt -in 受信テキストファイル.txt -out 復号ファイル.txt -recip マイ証明書.pem -inkey マイ暗号鍵.pem」
2.本文の取り出し「openssl smime -verify -in 復号ファイル.txt -out 出力ファイル.txt -CAfile 追加のCA証明書.pem」



で、まあこれらは当然めんどいのでバッチ化されている。
本当はWeMailから自動で呼び出せればよいのだけど、WeMailには外部コマンドの呼び出し機能がない。残念。


暗号化&送信はめんどいので省略。
というか宛先ごとに別々の証明書で暗号化しなくちゃいけないので事実上むりぽ。宛先が1人なら問題ないんだけど。
このへんはやっぱり手動SMIMEの限界か・・・