2016年2月19日金曜日

Webサービスにおける暗号化の基本 / 認証局

mainpic

Webサービス開発における暗号化の基本として、色々とまとめてきましたが、おそらく残り二回くらいで終わりにする予定です。

第一回の記事では共通鍵と公開鍵の話をまとめました。

第二回の記事ではデジタル署名に関しての話をまとめました。

第三回の記事では電子証明書の話をまとめました。

電子証明書とは、自分の公開鍵に認証局がデジタル署名をしたモノでした。

前回は特に深く追求をしませんでしたが、デジタル署名は本当にそれが送信者本人の署名であるのかは分からないという話が以前ありました。

では、認証局の署名というのは、何をもって正しいと判断されるのでしょうか。
認証局の仕組みと役割をまとめていきます。


Webサービス開発における暗号化の基本

第四回目の今回は、

  1. 共通鍵暗号化方式
  2. 公開鍵暗号化方式
  3. デジタル署名(電子署名)
  4. 電子証明書
  5. 認証局
  6. オレオレ証明書(今日はここまで)
  7. SSLの仕組み

認証局の仕組みに関してです。


認証局(CA: Certificate Authority)

認証局の役割は公開鍵に対して署名を行い、電子証明書を発行するということでした。

公開鍵を印鑑だとすると、電子証明書は印鑑証明書、認証局は市役所という捉え方もできます。

身分証明書を持って市役所に行き、手続きを踏むと印鑑証明書を発行してもらえます。何か契約を結ぶ際には、この印鑑と印鑑証明書を併せて提出することにより、この印鑑はあなた本人が間違いなくサインしたものですという意味を持つようになります。(「否認」を防ぐことが出来ますね。身分証明書の提出があるので「なりすまし」も難しいです。)

さて、先に少し話をしましたが、では認証局のデジタル署名は何をもって信頼するのか、その電子証明書は本当にその認証局が発行したものなのかという疑問を解決していきます。

認証局のデジタル署名

実は認証局のデジタル署名に用いられる認証局の公開鍵は、認証局が自ら証明するという流れを取っています。他に証明してくれる機関が存在しないためです。

自分で自分の公開鍵に対して署名を行った証明書のことを自己署名証明書(オレオレ証明書)と言います。

詳しくは後述しますが、大手の認証局はこの自己署名証明書がPC内に事前にインストールされており、認証局のデジタル署名の信頼を確保しています。この自己署名証明書を発行し、事前インストールを認められている機関をルート証明機関ます。

日本で有名な大手企業としては、SymantecGlobalSignがあります。

また、全ての証明書が大手の認証局によって管理されている訳ではなく、認証局が信頼した認証局というのが存在します。これを中間証明機関と呼んだりします。

sample

タブ内に中間証明機関とルート証明機関というのがあるのが分かりますね。

試しに中間証明機関の証明書を見てみると

sample2

この証明書はGeoTrust Global CAによって発行されているのが分かります。

この親と子という構造を取りながら、認証局というのは信頼され、その信頼された認証局から発行された電子証明書は信頼できる。という仕組みを取っています。


自己署名証明書(オレオレ証明書)

自分の公開鍵を自分で署名し、発行した証明書を自己署名証明書と呼びました。

ルート証明書を見てみます。

sample3

VeriSignの電子証明書です。

発行者がVeriSignになっており、確かに自分で署名を行っているのが確認できます。

私は開発の途中で、SSLの通信が必要になった時にオレオレ証明書を発行したりします。

自己署名証明書の発行

鍵の発行からまとめると以下のコマンドで発行できます。

 # 自分の秘密鍵の発行(RSA 2048bit)
openssl genrsa 2048 > my.key

# 発行リクエストCSRの発行
openssl req -new -key my.key > my.csr

# x509仕様の電子証明書を発行(my.csr利用、有効期間3,650日)
openssl x509 -days 3650 -req -signkey my.key < my.csr > my.crt

ここで出来たmy.crtが自己署名証明書になります。

crtを発行するために、電子署名をする必要があります。
電子署名は自分の秘密鍵でメッセージダイジェストを暗号化する技術でしたね。
そのため認証局用の鍵が必要です。
今回はca.keyという名前で作成しています。

さて、今回は認証局のデジタル署名はどうやって信頼されるのか、その技術である自己署名証明書について、またその発行の仕方が分かりました。

暗号化の基本は以上ですが、次回はこの証明書を使ってSSL通信を行いhttpsを覗いてみることにしましょう。

では、良いインプットと良いプログラミングを。

0 件のコメント:

コメントを投稿