2017.5.5

Debian S/MIMEでセキュアなメール環境 [MailServerⅦ]

自己署名クライアント証明書でS/MIMEを試してみる

### First,please visit -----------
Introduction & INDEX コチラから
------------------------------ ###

オフィスにLAN専用のメールサーバーを立てます。
最後の本章Ⅶでは、S/MIMEを試してみます。

クライアント証明書を発行し利用しますが、第Ⅳ章でサーバー証明書を発行した手順にならってプライベート認証局で署名します。したがって、この証明書はオフィスLAN環境に限って信頼されるもので、公では通用しないものです。

S/MIMEによる暗号化を成立させるためには、自分と相手との双方で互いのクライアント証明書を登録していることが条件となります。 設定手順は結構煩雑ですし、正式な証明書は費用がかかります。世間に十分浸透しないのもこのへんが理由でしょう。僕のビジネス用メールではS/MIMEを使っていますが、相手も採用していなければあまり意味をなさない上に、なんか変なマークが付いていると訝しげに問われたりする始末です。 それでも最近では、金融機関などの重要なメール連絡に、S/MIME署名付メールを採用しているケースもよく見られるようになってきました。

S/MIMEは、発信者の身分を証明し、またメール本文や添付ファイルを含めメッセージ内容そのものを暗号化して、安全性を高めるものです。一旦設定さえしてしまえば、ほとんどストレスなくセキュアな受送信を利用できるでしょう。

S/MIME image仕組みのイメージは、ざっくりとこんな感です。

つい最近まで僕は、相手の公開鍵で直接メッセージのS/MIME暗号化が行われると思っていました。
イメージ図も凡そを捉えてその通り示しています。ところが詳しく調べると、実際は次のような暗号メール生成手順を踏むようです。

  1. 共通鍵を生成
  2. 共通鍵でメールを暗号化
  3. 共通鍵を相手の公開鍵で暗号化
  4. 共通鍵を自分の公開鍵で暗号化
  5. 送信
  6. 受信者は自分の秘密鍵で共通鍵を複合
  7. 複合された共通鍵でメッセージを複合

送信するメーセージを送信者も複合できるように、共通鍵は送信・受信者のそれぞれの公開鍵で暗号化されます。このほうが、暗号複合の時間を要さず効率が良いらしいのです。

S/MIMEの仕組みについては、コチラが詳しいようです。
○ IPA情報処理機構 PKI関連技術情報: 7.2 S/MIME

■ INDEX
Postfixで送信[SMTP]サーバー : MailServer-Ⅰ
Dovecotで受信[IMAP]サーバー : MailServer-Ⅱ
Mailユーザー作成登録とクライアント側のメーラー設定: MailServer-Ⅲ
プライベート認証局によるサーバー証明書発行: MailServer-Ⅳ
SMTP/IMAP OverSSL/TLSで暗号化通信: MailServer-Ⅴ
ClamSMTP Mailをリアルタイムウィルススキャン: MailServer-Ⅵ
S/MIMEでセキュアなメール環境: MailServer-Ⅶ

< 環境 >
MAIL_LAN

■ 手順
1. メールサーバーマシンでの操作 クライアント証明書を発行する
2. クライアントでの操作 メーラーで自分の証明書を登録する
3. クライアントでの操作 メーラーで相手の証明書を登録する
3. クライアントでの操作 S/MIME暗号化で送信


[ 1 ] メールサーバーでクライアント証明書を発行する

第Ⅳ章を踏まえてクライアント証明書を発行し、プライベート認証局で署名する。

○ File:openssl.cnfをクライアント用に複製し編集する
[複製]  $ sudo cp /usr/lib/ssl/openssl.cnf /etc/ssl/openssl_client.cnf
[編集]  $ sudo vi /etc/ssl/openssl_client.cnf

## 40行目辺り
[ CA_default ]
#dir  = ./demoCA   # Where everythung is kept
dir   = ./CA       # Where everythung is kept

## 74行目辺り デフォルトの有効証明期間を10年に変更
#default_days = 365
default_days = 3650

## 166行目辺り〜(中略)〜185行目辺り
[ usr_cert ]
## ここはFALSEのまま
basicConstraints=CA:FALSE
# For normal client use this typical
## コメントアウト"#"外す
#nsCertType    = client, email
nsCertType    = client, email

## 330行目辺り
[ tsa_config1 ]
# these are used by the TSA reply generation only.
#dir  = ./demoCA   # TAS root directory
dir   = ./CA       # TAS root directory

○ クライアント証明書を作成する
$ cd /etc/ssl
$ sudo DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/ssl/openssl_client.cnf" \
CATOP=./CA /usr/lib/ssl/misc/CA.sh -newreq

Generating a 2048 bit RSA private key
............+++
................................................................+++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:xxxxxxxx(任意のパスワード: 画面上は表示されない)↵
Verifying - Enter PEM pass phrase:xxxxxxxx(もう一度)↵
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:JP↵
State or Province Name (full name) [Some_State]:Miyagi↵
Locality Name (eg, city) []:Sendai↵
Organization Name (eg, company) []:green-pen↵
Organizational Unit Name (eg, section) []:(任意)↵
Common Name (e.g. server FQDN or YOUR name) []:hanako(ユーザーアカウントを入力)↵
Email Address []:hanako@lan.mail(使用するアドレスを入力)↵

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(空欄で可)↵
An optional company name []:postman(任意)↵
Request is in newreq.pem, private key is in newkey.pem

○ プライベート認証局の署名を入れる
$ cd /etc/ssl
$ sudo SSLEAY_CONFIG="-config /etc/ssl/openssl_client.cnf" \
CATOP=./CA /usr/lib/ssl/misc/CA.sh -sign

Using configuration from /etc/ssl/openssl-client.cnf
Enter pass phrase for ./CA/private/cakey.pem:*******(CA証明書発行時のパスワード)↵
Check that the request matches the signature
Signature ok
Certificate Details:
  Serial Number:
    aa:XX:Xx:xx:XX:xx:XX:f7
  Validity
    Not Before: Apr 20 05:15:00 2017 GMT
    Not After : Apr 19 05:15:00 2027 GMT
  Subject:
    countryName = JP
    stateOrProvinceName = Miyagi
    localityName = Sendai
    organizationName = green-pen
    commonName = hanako
    emailAddress = hanako@lan.mail
  X509v3 extensions:
  X509v3 Basic Constraints:
    CA:FALSE
  Netscape Cert Type:
    SSL Client, S/MIME
  Netscape Comment:
    OpenSSL Generated Certificate
  X509v3 Subject Key Identifier:
    49:Ex:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:BC
  X509v3 Authority Key Identifier:
    keyid:9C:6A:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx:XX:xx::3D

Certificate is to be certified until Apr 19 05:15:00 2028 GMT (365 days)
Sign the certificate? [y/n]:y↵


1 out of 1 certificate requests certified, commit? [y/n]y↵
Write out database with 1 new entries
Data Base Updated
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
aa:XX:Xx:xx:XX:xx:XX:f7
Signature Algorithm: sha256WithRSAEncryption

## 〜中略〜

Signed certificate is in newcert.pem

○ 名称変更と保管
$ cd /etc/ssl
$ ls -l
-rw-r--r-- 1 root root newcert.pem(CA署名入りクライアント証明書PublicKey)
-rw-r--r-- 1 root root newkey.pem(PurivateKey)
-rw-r--r-- 1 root root newreq.pem(CA署名前クライアント証明書)
保管ディレクトリは、CA直下に作成
名称変更: newcert.pem ---> クライアント名(common name).crt
          newkey.pem ---> クライアント名(common name).key
$ sudo mkdir -p ./CA/client/certs
$ sudo mkdir -p ./CA/client/private
$ sudo chmod 700 ./CA/client/private
$ sudo mv ./newcert.pem ./CA/client/certs/hanako.crt
$ sudo mv ./newreq.pem ./CA/client/certs/newreq_hamako.pem
$ sudo mv ./newkey.pem ./CA/client/private/hanako.key

○ PEM形式のクライアント証明書に変換する
$ cd /etc/ssl/CA/client
$ sudo openssl x509 -in ./certs/hanako.crt -outform PEM -out ./certs/hanako.pem

○ クライアント証明書とPrivateKeyを合わせてPKCS#12フォーマットに変換する
$ cd /etc/ssl/CA/client
$ sudo openssl pkcs12 -export -in ./certs/hanako.crt -inkey ./private/hanako.key \
-out ./private/hanako.pfx

Enter pass phrase for ./private/hanako.key:xxxxxxxx↵(hanako証明書発行時のパスワード)
Enter Export Password:++++++++(任意のパスワード)↵
Verifying - Enter Export Password:++++++++(もう一度)↵

○ 階層
/etc/ssl/CA/client/certs/hanako.crt hanako証明書(CA署名入PublicKey)
/hanako.pemhanako証明書PEM形式(CA署名入PublicKey)
/newreq_hanako.pemhanakoクライアント証明書(署名前)
/privake/hanako.keyhanako PrivateKey
/hanako.pfxPKCS#12フォーマット

以上の操作を繰り返し、ユーザーアカウント: taroや、
他の必要なユーザーアカウント別に証明書を作成する。

○ クライアントに必要な証明書を渡す
capem.pen (CA証明書): 全員へ渡す
hanako.pkf (PKCS#12フォーマット証明書): hanakoへ渡す
taro.pkf (PKCS#12フォーマット証明書): taroへ渡す


[ 2 ] クライアントでの操作 メーラーで自分の証明書を登録する

○ メーラー: Thunderbird -ice(・Θ・)dove-
サーバーから受取ったpapem.penとhanako.pkfを安全なディレクトリに保存

最初に、認証局証明書の登録をする
①サイドバーhanakoメールアカウント上で
  右クリック--->設定
 
  ②アカウント設定画面
  サイドバーhanakoメールアカウントのセキュリティを
  クリック--->証明書を表示をクリック
thuderbird01
 
thuderbird02
 
③証明書マネージャー画面
  認証局証明書タブ--->インポート--->
  保存場所へ移動しcapem.pemを選択--->開く
④証明書のインポート画面
  この認証局によるメールユーザー識別を信頼
  にチェック
thuderbird03  thuderbird04
 
⑤証明書マネージャー画面
  インポートしたCA証明書を探して選択--->
  信頼性を設定をクリック
⑥認証局証明書に対する信頼性設定の画面
  この証明書をメールユーザーの識別に使用する
  チェックが入っているのを確認
thuderbird05  thuderbird06
 
次に、自分の証明書の登録をする
⑦証明書マネージャー画面
  あなたの証明書タブ--->インポート
  保存場所へ移動しhanako.pkfを選択--->開く
  --->パスワード入力を求められる
  この証明書作成時のパスワード
  --->hanako証明書が登録されている
  ---OKクリック
   ⑧アカウント設定画面に戻る
  サイドバーhanakoメールアカウントのセキュリティを
  クリック--->デジタル署名の欄右側の選択をクリック
  --->証明書内容が表示される
  --->確認しOK
  
  
thuderbird07
 
thuderbird08
 
⑨Thunderbird?画面
  暗号複合にも同じ証明書を使うか問われる
  「はい」をクリック
⑩アカウント設定画面
  デジタル署名/暗号化欄にhanako証明書が表示された
  メッセージにデジタル署名するにチェック
  暗号化しないを選択 (送信時にフォームから指定する)
  OKで設定終了
thuderbird09
 
thuderbird10
 
⑪Thunderbirdメイン画面から
  [ツール](Alt+T)--->オプション
  (*icedove: [編集](Alt+E)-->設定)
  オプション画面
  トップバー[詳細]--->証明書タブ
  証明書を表示をクリック
⑫証明書マネージャー画面
  あなたの証明書タブ--->hanako証明書を選択
  表示をクリック
thuderbird11
 
⑪証明書ビューア画面
  この証明書は以下の用途に使用する証明書であると
  検証されました
  *プライベートCAの署名が有効機能している
  *「この証明書を信頼していないため有効性を
  検証できない」と表示された場合はNG
thuderbird09
 
以上で自分の証明書の登録が完了

[ 3 ] クライアントでの操作 メーラーで相手の証明書を登録する

○ メーラー: Thunderbird -ice(・Θ・)dove-

thuderbird20 まず、相手(taro)に自分の署名付メールで、taroの署名付きメールを送付してもらうように依頼する。
デフォルトで署名付メールを送信するように設定してあるので、そのまま普通に送信すれば良い。
または、セキュリティ▼マークをプルダウンし、"このメッセージにデジタル署名する"にチェックされているのを確認する。
作成画面の右下に署名付メールのマークが表示されている。


①taroからの署名付メールを受信した
  署名付メールのマークが表示されている。
  そのマークをクリック
  
  ②メッセージのセキュリティ画面
  署名証明書を表示をクリック
  この段階ではまだ暗号化されていない
  OKで閉じる
thuderbird20-1
 
thuderbird20-2
 
③オプション画面を表示する
  トップバー[詳細]--->証明書タブ
  証明書を表示をクリック
④証明書マネージャー画面
  個人証明書タブ--->taro証明書が登録されている
  taroを選択--->表示をクリック
  内容を確認する
thuderbird20-3
 
thuderbird20-4
 

[ 4 ] クライアントでの操作 S/MIME暗号化メールを送受信してみる

○ メーラー: Thunderbird -ice(・Θ・)dove-

thuderbird30 メール作成画面で、セキュリティ▼マークをプルダウンし、
"このメッセージにデジタル署名する"にチェック
"このメッセージを暗号化する"にチェック
画面右下に暗号化&署名付メールのマークが表示されている。


thuderbird30-1 taroから送られてきたS/MIME暗号化メールを受信した。
内容を表示すると、正常に署名と暗号化がなされていることが確認できた。


■ 終わりに

Ⅰ章からⅦ章まで長々とお読みいただきありがとうございます。 m(_ _)m
まずは、LAN環境内部で腕試しをして、いずれはインターネット上で公開したいですネ。
もっと、セキュリティを学ぼう〜とっ



Copyright(C) green-pen miyagi