conf t

インフラエンジニアのメモ

SSL証明書の通信の仕組み・発行までの流れなどのまとめ

f:id:monaski:20180714135049p:plain

SSL証明書の通信の仕組みや発行までの流れについて、
わかっていたようでわかっていなかったので、まとめました。
SSL証明書について、多少わかる人を想定して書きます。

目次

SSL証明書を利用して行われるSSL通信の仕組み

まずはSSL証明書でどのようにSSL通信が実施されるか見ていきましょう。
その中で出てくる共通鍵認証は同じ鍵じゃないとあかないよねってのでイメージしやすいのだが、
公開鍵認証はいつも流れ・イメージを忘れてしまう。
公開鍵認証は「一方通行」だと覚えている。
送信先の公開鍵で暗号化し、復号できるのは秘密鍵を持っている送信先の相手のみだから。

itpro.nikkeibp.co.jp

viral-community.com

SSL証明書の発行までの流れ

理解が弱かったのは以下

  • 証明書と電子署名の違いがあいまいだった。
  • 認証局での証明書作成の流れ(ハッシュ化、暗号化)を把握していなかった
  • 証明書の信頼性を検証する方法

認証局は申請が来ると、CSRとディスティングイッシュ・ネームから証明書を作成する。
この証明書には署名がされていないため、まだ不完全である。
証明書が認証局が作成したものだと証明するため、証明書の中に、認証局の署名が付与される。
署名は、証明書をハッシュ関数でハッシュ化したのち、暗号化して作成する。
ハッシュ化するのは、暗号化による計算量を減らすためらしい。
ハッシュ化はsha1/sha2など、暗号化はrsaなど。
これらの組み合わせを署名アルゴリズムと呼び、sha1rsaのように記載する。
なお本題からは外れるが、sha1を利用した証明書は2017年からIEなどで信用されなくなるため、
これから証明書を作成する人は調べたほうが良い。

www.neteng.co

itpro.nikkeibp.co.jp

証明書の信頼性を検証する方法

2つのチェックが実施される。

  • 信用できるかの検証
  • 改ざんされていないかの検証

信用できる相手かどうかの検証
その証明書が、ブラウザにインストールされている「ルート証明書」が認めている証明書かどうかを調べる。
一般的にサーバ証明書だけではなく、中間証明書もサーバから送付される。
ルート証明書が中間証明書を信頼し、中間証明書がサーバ証明書を信頼する3階層構造となる。
これら3つがチェーンになっているかを確認する。

改ざんされていないかの検証
以下の値を比較し、一致するかどうかを調べる。
一致しない場合は、改ざんされていると判断し、信頼しない。

  • 証明書の署名を復号し元のハッシュ値を取り出す
  • 証明書のハッシュ化

以上2つにクリアすると、信頼できる相手だと認証できる。

ルート証明書

クライアントに入っている証明書。
サーバから送付される証明書が、信頼できるかどうかを判断するための証明書。
ルート証明書が信頼しているサーバの証明書のみ、信頼できる証明書として認められる。
大手認証局ルート証明書はブラウザにデフォルトで入っている。

中間証明書

一般的に証明書の認証は3階層 仕組み上3階層になっているから、中間証明書が必要なのはわかる。
でもなぜ3階層なのか。ルート証明書サーバ証明書の2階層でもいいじゃん。

ようは信頼性と効率の問題なのだと思う。
えらい人がわざわざ下々の証明書に署名するのは効率が悪いし、間違えたら大変。
だから、えらい人が次にえらい人を何人か任命し、署名させる。
えらい人は何人かの次に偉い人に署名するだけでよいからミスのリスクは減るし、
次に偉い人は何人か作れるので、効率的に署名できる。
oshiete.goo.ne.jp

クロスルート証明書

本来サーバ証明書に対応するルート証明書は1つだが、古いブラウザに入っているルート証明書でも
認証させるための証明書が、クロスルート証明書
以下がわかりやすかった。
[EV SSL] クロスルートとは何ですか。 | SSL・電子証明書ならGMOグローバルサイン

オレオレ証明書

SSL証明書の仕組み上、その証明書のルート証明書がブラウザに入っていなければ、ブラウザは証明書を信頼できない。
大手の認証局ルート証明書はブラウザにデフォルトで入っている。
そのため、大手認証局の発行するサーバ証明書の場合は、特にルート証明書を意識することなく、SSL通信が可能となる。
しかし、個人的に作成した証明書の場合は、ブラウザ作成元に頼みでもしない限りデフォルトではブラウザに入ってはいない。
そのためブラウザはその証明書を信頼できない。これがオレオレ証明書です。
もちろん、オレオレ証明書ルート証明書をエンドユーザにインストールしてもらえば証明書は機能します。
身内であれば問題ありませんが、インターネットの見ず知らずの人間にインストールしてもらうのはハードルが高いでしょう。