本稿では、メールの暗号化環境を構築することを目的に、以下をレポートします。
- 無料のデジタル証明書を取得する。
- Windows7のメーラーであるThunderbirdと、Androidのメールアプリに証明書を設定する。
- 実際に署名付きメールと暗号化メールを送受信してみる。
某国の諜報機関の暗躍、大手ベンダーによる無料メールサービスの覗き見、はたまた社内恋愛メールを情報セキュリティ部門に覗き見られる恐怖など、メールの暗号化は時代の要請です。
はじめに
前回の「iOSのメールアプリで添付ファイルが暗号化されない件」書きましたように、某ニュースサイトのミスリーディング(いや私の勝手な勘違い)により、「iPhoneってデフォルトでS/MIMEなの?Appleさんは無料で証明書をくれるの?」と早合点してしまいました。
そして、「Appleさんが無料で発行してくれるなら、Microsoftさんももしかしたら?」と一足飛びに期待しました。Google先生が教えてくれたページもそこそこに、以下の様なキャプチャを見て・・・
「やっぱり!」ということで、早速トライしてみました。(続く)
前提条件
本稿はITやセキュリティの知識がある方を読者に想定しています。情報処理技術者試験を受験されるくらいの。(それがIパスなのか基礎なのか、はたまたアドミニストレーターなのかはわかりません。)
用語の説明は書きませんので、ご不明の点はGoogle先生にお聞き下さい。m(_ _)m
また以降の画面は、以下の環境のものです。
- PCのOS : Windows 7
- PCのブラウザ : Google Chrome 34.0.1847.131 m
- PCのメーラー : Thunderbird 24.5.0
- スマホのOS : Android 4.2.2
- スマホのメーラー : Eメール 4.0.1
冒頭の書き出しはMicrosoftさんより証明書を取得する雰囲気ですが、以降に書きますように一般的な認証局からの取得です。ですので、他の環境(OS X、iOS、あるいはUNIXクローン)でも同様に証明書を習得して利用可能です。しかし設定がわかりにくいかもしれません。(上の環境でもそうでした。)
またOutlook 2013でも設定してみましたが、私は成功していません。Outlookで発生した不具合は本稿の最後に示しますが、成功していない設定方法は書けませんので、もしOutlookをご利用の場合は他サイトをご参照下さい。
証明書の取得
冒頭からの続きとして次の節の様なことがありましたが、本筋ではありませんのでスキップしてくださってかまいません。^^;
冒頭からの続き
実験用にMicrosoftアカウントから@outlook.jpのメールアドレスを取得したり(昔とった@live.comのアドレスはなくなっているし)、Outlook2013をはじめて立ちあげたり、@outlook.jpのアドレスならOutlookは自動設定だろうと思ったら自動で設定してくれなかったり(2回ほど失敗して、m.hotmail.comをやっと提案)、苦労しました。
Outlook2013で「ファイル>オプション>セキュリティセンター>セキュリティセンターの設定>電子メールの設定」と辿ると前記の画面に到達します。そして「デジタルIDの取得」ボタンをクリックすると、ブラウザが起動し「デジタル ID」というページに転送されます。
どうやら証明書の発行サービスへの案内のようで、Microsoftさんが証明書を発行してくれるわけではなさそうです。
このページの中段に「Comodo To learn more and download the Free Email Certificate」とありますので、この後ろのリンクをクリックします。
ちなみにこのページの一番下の、「Office Store」へのリンク先は「この Web ページは利用できません」でした。orz。
Comodo社のフォーム
以上により、Comodo社の「Free Secure Email Certificate」というページに辿り着きます。(Microsoftさんの紹介なので信用することにします。)
このページにある「Sign up Now!」というイメージをクリックすると、登録フォームに進みます。
後はフォームの内容を埋めて送信すると、入力したメールアドレスにメールが届く仕組みです。
「Subscriber Agreement」を見ると、「登録は無料だけど、更新手数料は有料かもしれませんよ」という記述があるので、そういうビジネスモデル(あるいは将来移行)なのかもしれません。
証明書のダウンロード
comodogroup.comより届く、「Your certificate is ready for collection!」というタイトルのHTMLメールのなかの「Click & Install Comodo Email Certificate」というボタンをクリックすると、ブラウザが立ち上がり、証明書のダウンロードがはじまります。
ここでFireFoxの場合、ダウンロードは出来ますが、「証明書の発行要求時に作成された秘密鍵がないため、この個人証明書をインストールできませんでした。」というメッセージが表示されてしまいました。
Google Chromeでは上のような画面になり、証明書のダウンロードが成功しました。
IEでは試していませんが、デフォルトのブラウザで証明書のダウンロード/インストールが失敗するようでしたら、デフォルト以外の、Chrome等のブラウザを起動します。そしてメールのダウンロードボタンの下の、「Note」以下に記載のURLをブラウザに入力し、メールに記載のパスワードを入力することで、ダウンロードのページにリダイレクトされます。
以上により、証明書がWindowsにインストールされました。
証明書のエクスポート
Outlookなどの、Windowsにインストールされた証明書を参照できるメーラーの場合は、本章の作業は必要ありませんのでスキップしてください。
Thunderbirdの場合は、OSから証明書をエクスポートする必要があります。またスマホ(Android)のメーラーに証明書を設定するためにもエクスポートします。
Chromeの場合
Chromeの場合は、先の画面の状態で、画面上部の「クライアント証明書を保存しました。」の右にある「表示」ボタンをクリックします。すると、「証明書」ダイアログが表示されます。
「詳細」タブを選択し、「ファイルにコピー」ボタンをクリックします。すると「証明書のエクスポートウィザード」が開きます。
後はウィザードに従ってエクスポートするだけですが、以下の選択をします。
- 「秘密鍵のエクスポート」にて、「秘密鍵をエクスポート」を選択する。
- 「エクスポート ファイルの形式」にて、Personal Information Exchange – PKCS#12」を選択(それ以外できない)する。
- 同画面で、「証明のパスにある証明書を可能であればすべて含む」「すべての拡張プロパティをエクスポートする」をチェックする。
さらにパスワードやファイル名を指定して、拡張子が.pfxのファイルがエクスポートできます。
Chrome以外の場合
Chrome以外の場合や、Chromeでもタブを閉じてしまった場合は、以下のように証明書をエクスポート出来ます。
Windows7では「C:\Windows\System32」にある、「certmgr.msc」を起動します。(スタートメニューの一番下に「certmgr.msc」を入力。)
左ツリーより「個人>証明書」を開くと、先ほどダウンロード/インストールした証明書のメールアドレスがありますので、それをダブルクリックします。
すると前節に示した「証明書」ダイアログが表示されるので、前節と同様に証明書をエクスポートします。
Thunderbirdでの設定とメールの送信
本章では、Thunderbirdでの証明書の設定と、メール送信時の操作をレポートします。
証明書のインポート
起動後画面の左ツリーより、設定するアカウントをクリックします。そして「このアカウントの設定を表示する」をクリックし、「アカウント設定」ダイアログを開きます。
左ツリーメニューより、対象アカウントの「セキュリティ」をクリックし、右ペインにある「証明書を表示」ボタンをクリックします。すると「証明書マネージャ」ダイアログが開きます。
「あなたの証明書」タブが選択された状態で「インポート」ボタンをクリックすると、ファイル指定のダイアログが開きますので、先ほどエクスポートした証明書のpfxファイルを指定します。
するとパスワードを聞かれますので、証明書をエクスポートするときに指定したパスワードを入力すると、中央のリストに読み込んだ証明書が表示されます。
以上でインポートは終了です。「OK」をクリックしてダイアログを閉じます。
証明書の選択
「アカウント設定」ダイアログに戻ります。
「デジタル署名」のセクションにある「選択」ボタンをクリックします。すると「証明書の選択」ダイアログが開きます。
「証明書」に、インポートした証明書を設定します。
最初は証明書が一つしかないので選択する必要はありませんが、複数ある場合は右の「▼」より開くプルダウンより選択します。シリアル番号表示でわかりにくいのですが、「選択した証明書の詳細」の先頭、「発行対象:E=」以降にメールアドレスが表示されていますので、そこで目的の証明書が選択されていることを確認します。
「OK」をクリックしてダイアログを閉じます。
暗号化に同じ証明書を使うか聞かれますので、「はい」を選択します。
すると「アカウント設定」ダイアログの「デジタル署名」「暗号化」の二つのテキストボックスに、選択した証明書のシリアルが表示されています。
デフォルトの動作の設定
ここで以下のようにチェックします。
- 「メッセージにデジタル署名する」にチェック
- 「暗号化しない」にチェック
「暗号化しない」にチェックする理由は、現状はほとんど(S/MIMEに対応している)暗号化する相手がいないからです。そうでない場合は「暗号化する」にチェックしてもかまいません。いずれにせよ、メール送信時に選択可能です。
「OK」をクリックしてダイアログを閉じます。以上でThunderbirdの設定は終了です。
メールの送信
メールの送信の際に、ツールバーにある「セキュリティ」の右の「▼」をクリックして表示されるプルダウンより、メールに署名をするかどうか、メールを暗号化するかどうかを選択できます。
デジタル署名は、メーリングリストなどで添付ファイルを許可していない相手には弾かれてしまいます。そのような場合は「デジタル署名する」のチェックを外します。
メールの暗号化は、相手の署名付きメールを受信していないと送信できません。ですので、事前に通信相手にそれを送信しておいてもらう必要があります。(相手の公開鍵で暗号化するようです。)
またメールを暗号化したとしても「件名」(Subject)は暗号化されませんので、件名に機密情報を書くのはやめましょう。
AndroidのEメールの設定と送信
本章では、Androidのメーラー「Eメール」での、証明書の設定と送信時の操作をレポートします。
一つのメーラーで証明書を設定した後は、同じアカウントを扱うすべてのメーラーに同じ証明書を設定しないと、相手が送ってきた暗号化メールが読めなかったり、デジタル署名の辻褄が合わなくなってしまったりすることが考えられます。
証明書ファイルをスマホに移す
まずエクスポートしたpfxファイルをスマホに移すのですが、これが大変でした。「SDカードに見つかりません」と表示されてしまいます。
私が成功したのは、SDカードのルートにpfxファイルを置き、それをスマホにセットした状態です。(SDカードのルート以外はダメでした。)
内蔵ストレージに置いたり、Comodo社からのメールにあるURLから証明書をダウンロードしたりする方法では、OSにはインストールされる様子ですが、私のメーラーではそれを選択できませんでした。
ということで面倒なのですが、上記SDカードをスマホにセットした状態からスタートします。
証明書の設定
Eメールを起動します。
下部の「|」ボタンをタップし、メニューより「設定」をタップします。
設定するアカウントをタップします。
「セキュリティ」のセクションにある、「証明書を選択」をタップします。
「証明書を選択」ダイアログで「インストール」ボタンをタップします。
「証明書を抽出」ダイアログが開きますので、「証明書名」にメールアドレスを、その下にエクスポートしたときのパスワードを入力します。(ここでも最初、「証明書名って何?」と思いました。)
「OK」をタップします。
インポートした証明書が選択されていることを確認して、「許可」をタップします。
以上で証明書の設定は終了です。
デフォルトの動作の設定
設定画面に戻ると、「デジタル署名」以下のオプションが設定可能になっています。
ここで、「デジタル署名」をチェックし、「暗号化」はチェックしないことにします。理由はThunderbirdのときと同様です。
以上で設定は終了ですのでをタップして通常画面に戻ります。
メールの送信
メールの作成画面にて、上のように「署名」と「暗号化」を指定することが出来ます。メールを送信するときの注意事項もThunderbirdのときと同様です。
以上でスマホでもPCと同様にメール署名・暗号化ができるようになりました。
受信テスト
ここでメールの受信テストをしてみたいと思います。
署名付きメール
署名付きメールを受信すると、Thunderbirdでは上のように、右側にが表示されています。
AndroidのEメールではが表示されています。
署名付きメールのソース
署名付き(暗号化なし)メールは以下のようです。
(前略) Subject: =?ISO-2022-JP?B?GyRCN0hCUyVGJTklSBsoQg==?= Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary="------------ms050101020301070807080107" --------------ms050101020301070807080107 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: quoted-printable (中略) --------------ms050101020301070807080107 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature (後略)
MIME Typeが「multipart/signed」になっており、最後のパートにMIME Type「application/pkcs7-signature」として署名が添付されています。
暗号化メール
暗号化したメールをThunderbirdでみると、上のように右端にが表示されています。
AndroidのEメールではが表示されています。
暗号化メールのソース
暗号化メールのソースも見てみます。
(前略) Subject: =?ISO-2022-JP?B?GyRCPXBMPiRIMEU5ZjI9JE4lRiU5JUgbKEI=?= Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7m" Content-Description: S/MIME Encrypted Message (後略)
このようにMIME Typeが「application/pkcs7-mime」になっています。またSubjectは通常と同様です。
これにより、件名は暗号化されない理由と、メーラーがS/MIMEに対応していない場合は「smime.p7mが添付されているだけの何も書いていないメール」になってしまう理由が理解出来ました。
Outlookの場合
冒頭に書きましたように、OutlookではS/MIMEによる署名、暗号化メールが完全に成功していません。これはOutlook自体の欠陥によるものか、もしかしたら送信サーバーによるのかもしれません。
私はOutlookを日常使っていません(今回の実験ではじめて立ちあげた)ので原因追求はしませんが、現象のみ記しておこうと思います。
ちなみにバージョンは、「15.0.4605.1000」です。
署名のエラー
まずは署名のエラーです。
Outlookから署名付きで送信したメールをThunderbirdで受信した時の画面ですが、署名を表すアイコンがと何か変です。
クリックしてみると、以下の様なダイアログが表示されます。
Outlookはエクスポート/インポートせず、Windowsにインストールされた証明書を直接参照したのに、変ですねえ。
暗号化できない場合がある
Outlookでは、暗号化して送信する設定で、相手の署名付きメールを受信していなかったりしたときにメールを送信しようとすると、以下の様な警告がなされます。
実験初日はこれが相手の署名付きメールを受信しているにも関わらず表示され、暗号化メールが送信できませんでした。この記事を書くにあたって再実験したところ、通常に暗号化メールが送信でき、現象は再現できません。(もしかしたらOutlookあるいはWindowsの再起動によって、ご機嫌が良くなったのかもしれません。)
非暗号化メッセージで送信したときのエラー
実験初日に前節の現象が起き、そこで「非暗号化メッセージを送信」をクリックして暗号化しないメールを送信したときの現象です。但しこの現象もその後再現していません。
Outlookより、警告を経て送信した非暗号化メールをThunderbirdで受信した時の画面です。
メッセージのソースを見てみると以下のようでした。
(前略) Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m" X-OriginalArrivalTime: 07 May 2014 08:50:33.0204 (UTC) FILETIME=[6810B340:01CF69D1] ------=_NextPart_000_00E0_01CF6A1C.D5ECACC0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit (後略)
正しいMIME Typeは「multipart/signed」なのですが、暗号化されている場合のMIME Type「application/pkcs7-mime」になっています。それでThunderbirdは暗号解除しようとするのですが、本文はmultipartなのでうまく行きません。
以上、Outlookで発生した現象でした。
課題
以上のように私のメールアドレスはS/MIMEに対応し、暗号化メールの送受信が可能になりました。その他著名なメーラーもS/MIMEに対応しているようです。
しかし以下の様な課題も見えてきました。
証明書の発行機関
今回はComodo社の証明書を無料で取得しましたが、前述の通り、更新時には手数料が発生するかもしれません。その場合、私は更新しないでしょう。(そもそも機密文書は扱っていません。)
メールアドレスの証明くらいはどなたかが無料サービスでして欲しいのですが、その場合は契約者の個人情報を取得しているMicrosoftさん(あるいはAppleさん)か、携帯電話のキャリアが適当なのではないかと、勝手に思っています。
設定の複雑さ
今回レポートしたように、証明書の設定は複雑です。これでは、普通のユーザーはやってくれません。機密情報を扱う企業や組織の場合も、情報システム部門のサポートは大変そうです。(特にOutlookと連動するExchangeを導入していたら…。)
暗号化メールが社会インフラになるには、アプリ開発者の努力ももう少しだけ必要そうです。
Microsoftさん頑張って
Microsoftさんの場合、「Microsoftアカウントの取得」から、「デジタルIDの取得」を経て、OutlookでS/MIME対応メールが送信できるまでが、一気通貫で簡単に出来て欲しいです。しかし現状は、Microsoftアカウントで取得したメールアドレス(@outlook.jp)が簡単に設定できなかったり、証明書を設定してメールを送信すると謎の現象が起きたりして、「なんだかなあ」という感じです。
G-mailの場合
AndroidのG-mailアプリには、それらしき設定はありませんでした。IMAP等でやりとりするメーラー(Eメールなど)に移行すればG-mailでも対応可能と思います。
とは言え、WEBメールにてメール内容に関連する広告を掲示するビジネスモデルのGoogleさんにとっては、WEBメールを使わなかったり、メール内容を暗号化したりする設定を推奨することはできないのかもしれませんね。
(そういえば@outlook.jpもWEBメールでした。Outlookの設定がうまくいかないのもそのためか?)
まとめ
無料のe-mail用証明書を取得し、メーラー(Windows7のThunderbird、およびAndroid4.2のEメール)に設定して署名付きメール、暗号化メールが送受信できるようになりました。
現在のところ、各ベンダーのメーラーはS/MIMEに対応しているようです。しかしセキュアな暗号化メールが一般化するには、もう少し各関係者の努力と時間が必要なようです。
産業情報など企業の情報セキュリティが重要視されていたり、某国の諜報機関が情報収集していたり、はたまた大手ベンダーが自社で無料提供しているメールサービスから情報収集していたり、(ユーザーはそれが気持ち悪かったり)します。
そのようなことが気になる方にとっては少しの努力で暗号化メールが実現できますので、試してみては如何でしょうか?
社内恋愛メールも、情報セキュリティ部門に覗き見られることはありませんよ!
(あ、今の時代は直接ケータイ・スマホに送って、仕事中でもプライベートメールを確認したりするんだっけ?)