Comodo 電子メール証明書 (S/MIME)

S/MIMEによる電子メールの電子署名と暗号化の補足記事。

comodo 電子メール証明書 1
Comodoの無料電子メール証明書の発行ページであるFree Email Certificateから[GET NOW]で進んだ先のページは現在はChromeブラウザでは正常に使えない。求められている環境で利用できないブラウザでページを開くとピンク色のボックスが表示されてそこに対応方法が書いてあるのだが、現在の(最新の)Chromeブラウザではそこに書かれていることができない。Firefoxなどを使うのが無難。
つまり上の画像のようにピンクのボックスが表示されたら証明書を発行するための適切な設定になっていないかまたは使用できないブラウザなのでピンクのボックスが表示されない状態にする。

以下、電子メール証明書が発行されてそれをインストール済みとする。(証明書のインストールは以前の記事を参照

comodo 電子メール証明書 2
上の画像はメールアプリのThunderbirdの例。メイン画面の左にあるツリーから対応したい電子メールのアドレスを右クリックして「設定」⇢「セキュリティ」を辿る。
「セキュリティ」の画面の一番下に[証明書を管理]ボタンがあるのでそれをクリック。
「証明書マネージャ」画面の左上の[あなたの証明書]タブを選択。(最初から選択済の筈)
インストールした電子メール証明書をリストから選択。
左下の[表示]をクリック。

comodo 電子メール証明書 3
「証明書ビューア」が開くので左上の「一般」タブを選択。(最初から選択済の筈)
おそらく最近であればタブの下に「発行者が不明であるため、この証明書の有効性を検証できませんでした。」が表示されているかと。
その発行者とは画面中央近くの「発行者」の「一般名称(CN)」にある「COMODO RSA Client Authentication and Secure Email CA」のこと。

comodo 電子メール証明書 4
「証明書マネージャ」に戻り、[認証局証明書]タブを開く。
中央のリストを少し下にスクロールしてComodo CA Limitedの証明書リストを表示する。
おそらく上で見た「COMODO RSA Client Authentication and Secure Email CA」が存在しない筈。(存在するならこの記事には用は無い筈なので読み飛ばす)
リスト下の[インポート]を押す。
ファイル選択画面が表示される。

 COMODO RSA Client Authentication and Secure Email CA
証明書ファイルをダウンロードしてそれを先に表示されているファイル選択画面で指定する。

comodo 電子メール証明書 5
インポートの設定で「この認証局によるメールユーザーの識別を信頼する」にチェックする。
右下の[OK]をクリック。

comodo 電子メール証明書 6
認証局のリストに「COMODO RSA Client Authentication and Secure Email CA」が追加されたことを確認。

comodo 電子メール証明書 7
もう一度「証明書マネージャ」画面の[あなたの証明書]タブに戻りComodoから発行された電子メール証明書を[表示]する。
今度は「この証明書は以下の用途に使用する証明書であると検証されました」という表示になっている筈。

comodo 電子メール証明書 8
この電子メール証明書で電子署名したメールを送ってみて、そのメールを受けた側で確認。
「メッセージは署名されています メッセージに有効なデジタル署名が含まれています。」が出ていればOK.

証明書のチェーンが「COMODO RSA Certification Authority」(ルート証明書)⇢「COMODO RSA Client Authentication and Secure Email CA」(中間)⇢「's COMODO CA Limited ID」(電子メール証明書)という繋がりなのだが、中間の証明書がシステム内に無いと電子メール証明書が孤立してしまい所謂オレオレ証明書状態になるのでメールにデジタル署名をさせて貰えない。

Comodoの無料電子メール証明書は有効期間が1年と比較的実用的な長さのものなのでありがたいんだけどちょっとだけ面倒。
そもそも何で Certificate Storeに COMODO RSA Client Authentication and Secure Email CA が入ってないんだろ 雷鳥。

WindowsでもUnboundで広告ブロック

unbound

広告ブロックを行いたいと思ったときにブラウザであればその手のプラグインを使うというのがあるけどあまり自由度がないし、ブラウザ以外には効果がない。好き勝手やりたいならDNSサーバを使うのが簡単だけどWindowsはどうするの?となるとやはりこちらもUnboundあたりが比較的簡単かなと。そこで、WindowsにUnboundをインストールして広告ブロックを行ってみた。
一応、今回使用したのはWindows 10 Home 64bit Insider Preview Build16237.rs_prerelease.とUnbound 1.6.4

Unboundのインストール

Windows版unboundのインストール・設定 1
Unboundの公式サイトからWindows用のインストーラーをダウンロードする。基本64ビット版をダウンロードでOK.(特別な理由があって32ビット版Windowsを使ってるなら32ビット版をダウンロード)

Windows版unboundのインストール・設定 2
ダウンロードしたファイルを実行。
[Next]をクリック。

Windows版unboundのインストール・設定 3
License Agreementを読んで同意できるなら[I Agree]をクリック。

Windows版unboundのインストール・設定 4
[Next]をクリック。

Windows版unboundのインストール・設定 5
[Next]をクリック。

Windows版unboundのインストール・設定 6
[Install]をクリック。

Windows版unboundのインストール・設定 7
[Finish]をクリック。
インストール完了。

Windows版unboundのインストール・設定 8
インストール先を特に変更していなければUnboundはC:\Program Files\Unboundにインストールされた筈だが、このフォルダはユーザーが普通にファイルを変更できないのでフォルダ内の設定ファイルを変更できない。
そこでフォルダのセキュリティを変更する。(Unboundが正常に動くようになったら戻してね)
エクスプローラーでC:\Program Files\Unboundのフォルダを右クリック。[プロパティ]を開く。

Windows版unboundのインストール・設定 9
「Unboundのプロパティ」画面の上部にある[セキュリティ]タグを選択。
中段右側にある[編集]をクリック。

Windows版unboundのインストール・設定 10
上段のグループ名/ユーザー名のリストからUsers(hoge\Users)を選択。
下段のアクセス許可の「変更」行の「許可」にチェックを付ける。[OK]をクリック。

Unboundの設定

C:\Program Files\Unbound\service.confがメインの設定ファイルになる。変更には改行コードを正しく認識できるエディタを使う。Windowsに付いてる「メモ帳」はダメ。

C:\Program Files\Unbound\service.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server:
    verbosity: 0        #ログを取らない

    interface: ::1      #IPv6
    interface: ::0      #IPv6
    interface:127.0.0.1 #IPv4
    interface: 0.0.0.0  #IPv4

    access-control: 0.0.0.0/0 refuse         #IPv4 WANから使わせない
    access-control: ::0/0 refuse             #IPv6 WANから使わせない
    access-control: 127.0.0.0/8 allow        #IPv4 自身は許可
    access-control: ::1 allow                #IPv6 自身は許可
    access-control: 192.168.0.0/24 allow     #IPv4 LANは許可 (自分のLANアドレスに書き換える)
    access-control: fdc0:1:1:0::/64 allow    #IPv6 LANは許可 (自分のLANアドレスに書き換える)

    #INCLUDE FILES
    include: "C:\Program Files\Unbound\local_zone_ipv6.conf" #IPv6+IPv4用  IPv4のみの環境ならこの行は削除 (下の行と排他)
    include: "C:\Program Files\Unbound\local_zone.conf"      #IPv4だけの環境用 IPv6ありの環境ならこの行は削除 (上の行と排他)

    include: "C:\Program Files\Unbound\local_data_ipv6.conf" #IPv4のみの環境ならこの行は削除
    include: "C:\Program Files\Unbound\local_data.conf"      #この行は消さない

    include: "C:\Program Files\Unbound\local_data_malware_ipv6.conf"  #IPv4のみの環境ならこの行は削除
    include: "C:\Program Files\Unbound\local_data_malware.conf"       #この行は消さない

forward-zone:
    name: "."
    forward-addr: 2001:4860:4860::8888   # IPv6 Google public DNS#1 or your ISP's DNS (1st)
    forward-addr: 2001:4860:4860::8844   # IPv6 Google public DNS#2 or your ISP's DNS (2nd)
    forward-addr: 8.8.8.8                # IPv4 Google public DNS#1 or your ISP's DNS (1st) 
    forward-addr: 8.8.4.4                # IPv4 Google public DNS#2 or your ISP's DNS (2nd)

server: auto-trust-anchor-file: "C:\Program Files\Unbound\root.key"

インクルードファイルの部分の5つのファイルは悪いインターネット 広告除去用HOSTSファイルから取得する。広告ブロック用とマルウエアブロック用。

forward-zoneは上のインクルードしたホストリストにひっかからなかったホストを問い合わせる先になるのでプロバイダのDNSサーバやパブリックDNSサーバを指定する。
なお、IPv4専用のネットワーク環境であるならAAAAレコード(IPv6アドレス)を返答してこないDNSの方が無難なのでプロバイダが提供しているDNSがAAAAフィルタ付きDNSサーバであればそれを利用する方が良いかと。上の例ではGoogleのパブリックDNSを記載しているけどこれはAAAAレコードを返すので使わないべき。

ゾーンファイルは1つのドメインにアホみたいに大量のホストが存在してそれらをブロックするのにホスト単位でリスト化するのが無駄なのでドメイン単位でブロックするためのリスト。

最後の33行目は1行目からのServer:セクションと同じ。別セクションの後に追記するような場合はこんな書き方。あまり褒められないかも。上の例だとforward-zoneセクションの前あたりに行頭の「Server:」を除いて置いてやった方が同じセクションの設定が飛び飛びになるより良いかも。

これでWindowsを再起動したらUnboundがキャッシュサーバとして動く筈。もしくはコマンドプロンプトやPowershellからunbound-control.exeを操作する。起動だけならエクスプローラーからunbound.exeをダブルクリックでも。

Unboundフォルダ内の各exeファイル(の幾つか)を実行すると、ファイアウォールの画面が表示される筈なので全部許可する。(これ忘れると通信できないので動かないように見える)

リゾルバの変更

DNSサーバが準備できてもそれを使う設定をしないと当然使われない。家庭用のLAN環境であればルーターなどのDHCPサーバのDNSサーバの指定項目にunboundを設置したWindows PCのアドレスを書いてやればDHCP配下の端末はUnboundを使うようになってくれる。
端末ごとに手動設定するのであれば、UNIX系であれば/etc/resolv.confにUnboundを設置したWindows PCのアドレスを書く。
ここまでは迷う部分は無い筈。

問題はWindowsの場合。Unboundを設置したWindows PCも忘れずに変えないと。

Windows版unboundのインストール・設定 11
「ネットワーク接続」から使用中のネットワークアダプタを右クリックして[プロパティ]をクリック。
上の例では無線LANの方を選んでいる。

Windows版unboundのインストール・設定 12
「ネットワーク」タグが選択されていることを確認して「インターネットプロトコルバージョン4 (TCP/IPv4)」を選択して[プロパティ]をクリック。

Windows版unboundのインストール・設定 13
「次のDNSサーバーのアドレスを使う」にを付ける。
「優先DNSサーバー」に 127.0.0.1 を指定する。[OK]をクリック。
LAN内の他のホストでは127.0.0.1ではなくUnboundをインストールしたホストのIPアドレスを指定。

Windows版unboundのインストール・設定 14
「ネットワーク」タグが選択されていることを確認して「インターネットプロトコルバージョン6 (TCP/IPv6)」を選択して[プロパティ]をクリック。

Windows版unboundのインストール・設定 15
「次のDNSサーバーのアドレスを使う」にを付ける。
「優先DNSサーバー」に ::1 を指定する。[OK]をクリック。
LAN内の他のホストでは ::1 ではなくUnboundをインストールしたホストのIPv6アドレスを指定。
なお、IPv4専用環境ではこれは不要。

本来ならこれで終わりの筈。
だけど、これだと不具合が発生する場合があるみたい。設定した無線LAN,有線LANが使用不能になるなど。なんか、DHCP環境でDNSだけ手動指定でなるっぽい。
そこで、PC起動時はDNSはDHCPから振られたものを使用し、起動後にDNSを変更するバッチファイルを作成。

C:\Program Files\Unbound\change_dns.bat
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@echo off

netsh interface ipv6 set dns name="Wi-Fi" source=dhcp register=non validate=no
netsh interface ipv4 set dns name="Wi-Fi" source=dhcp register=non validate=no

rem netsh interface ipv6 set dns name="イーサネット" source=dhcp register=non validate=no
rem netsh interface ipv4 set dns name="イーサネット" source=dhcp register=non validate=no


timeout 30 /nobreak

netsh interface ipv6 set dns name="Wi-Fi" source=static addr="::1" register=non validate=no
netsh interface ipv4 set dns name="Wi-Fi" source=static addr="127.0.0.1" register=non validate=no

rem netsh interface ipv6 set dns name="イーサネット" source=static addr="::1" register=non validate=no
rem netsh interface ipv4 set dns name="イーサネット" source=static addr="127.0.0.1" register=non validate=no

exit

行頭に rem が付いているのはコメント。だから上の例では有線LANはコメントになっているので実行されない。

上で作成したバッチファイルがWindows起動時に実行されるようにタスクを登録する。で、最近のWindowsのタスク スケジューラはUI操作でタスクを登録してもなかなか思い通りに実行されない代物なのでタスクをコマンドで作成する。(コマンドでタスクを作成すると何故か正常に動くことが多い)

コマンドプロンプトを管理者権限で起動。
これはスタートボタンを右クリックで表示されるリストにコマンドプロンプト(管理者)があればそれ。Windows10の最新環境だとスタートボタンを左クリックして「Windows システムツール」内にある「コマンドプロンプト」を右クリックして「その他」⇢「管理者として実行」

schtasks /create /tn DNS変更 /tr "C:\Program Files\Unbound\change_dns.bat" /sc onstart /rl highest /F

Windows版unboundのインストール・設定 16
作成したタスクが登録されていることを確認する。
スタートボタンを右クリックで「コントロールパネル」から「タスク スケジューラ」を起動。またはWindows10の最新環境ならスタートボタンを左クリックで「Windows 管理ツール」から「タスク スケジューラ」を起動。
左列の「タスク スケジューラ ライブラリ」を選択。中央列上段のリストに「DNS変更」タスクが登録されていることを確認。

Windowsを再起動してログインし、30秒以上待ってからPowerShellまたはコマンドプロンプトを開き、 ipconfig /all を実行する。
「DNSサーバー」の項目を探し ::1 と 127.0.0.1 の2つが表示されていることを確認する。
nslookup www.google.com を実行する。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\foobar> nslookup www.google.com
サーバー:  localhost
Address:  ::1

権限のない回答:
名前:    www.google.com
Addresses:  2404:6800:400a:806::2004
          172.217.27.164

PS C:\Users\foobar>

こんな感じにIPv6, IPv4ともにアドレスが正しく入っていればOK.
上の例はUnboundを動かしているWindows PCで実行したので「サーバー」がlocalhostになっている。

広告(迷惑)ホストの確認も行う。nslookup baidu.com を実行。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\foobar> nslookup baidu.com
サーバー:  localhost
Address:  ::1

権限のない回答:
名前:    baidu.com
Addresses:  ::
          0.0.0.0

PS C:\Users\foobar>

IPv6では :: に、IPv4では 0.0.0.0 になればOK.

関連記事:

Up