暗号化の反対は復号とのことで
- 復号化
+ 復号
としました、ご指摘いただいた方ありがとうございますm(_ _)m
はじめに
サーバーをSSL化する作業はよくやっていたんですが、生成しているファイルがSSL通信で行っている役割がしっくりきていなかったのでまとめました。
概要
登場人物
-
クライアント
ChromeのようなブラウザであったりAndroid/iOSのようなネイティブアプリのこと。SSL通信では共通鍵暗号方式の共通鍵を生成する役割を担う。 -
サーバー
SSL証明書をもっている。SSL通信では公開鍵暗号方式の公開鍵/秘密鍵を生成する役割を担う。 -
中間認証局
俗に言うSSL証明書発行業者。開発者がサーバーをSSL化しようと思ったときにcsr
を渡す相手でありSSL証明書(crt
)を発行する役割を担う。 -
ルート認証局
SSL証明書を発行する作業をしていても特に意識することのない存在。中間認証局が持つ中間証明書に署名する役割を担う。ルート証明書はあらかじめクライアントにも渡されている。
詳細
1-3 サーバーをSSL化するとき特に意識することがない部分
1.ルート証明書の発行
自己証明が可能なルート認証局からルート証明書を中間証明書に付与する、ルート証明書の検証は不要
2.ルート証明書で中間証明書に署名
付与されたルート証明書で中間証明書に署名する。
3.ルート証明書の発行
自己証明が可能なルート認証局からルート証明書をクライアントに付与する、ルート証明書の検証は不要
4-7 開発者がサーバーをSSL化するときの作業工程
4.private-key
,csr
の作成
SSL証明書を発行するとき最初に行う作業。 openssl genrsa
で秘密鍵を作成、openssl req -new -key
でcsrを作成する。csrにはコモンネームなどの情報と合わせて対応する公開鍵情報が付与される。
5.csrを送付
作成したcsrをSSL証明書業者に送付する。
6.csrに中間証明書で署名
SSL証明書業者ではルート証明書で署名された中間証明書を使って受け取ったcrtに署名を行う。
7.SSL証明書(crt)を発行
署名された署名ファイルを送付する。一般的にSSL証明書といったらcrtファイルのことと考えてよいと思う。
8-14 ユーザーがSSL通信でサービスを利用する工程
8.DNSリクエスト
urlやエンドポイントを指定して接続リクエストを送信する作業。
9.SSL証明書の発行
必要があればMITM対策にSSL証明書に記載されているCommonNameとDNSが一致しているか検証を行う。
10.SSL証明書の検証
SSL証明書に署名をした中間証明書が妥当なものかの検証を行う。工程3で既にクライアント側にルート証明書が存在するので、SSL証明書にチェーンされたルート証明書の署名の検証が可能。
11.共通鍵の生成
クライアントからデータを送信する際の暗号化に用いる共通鍵の生成。厳密にいえばシーケンス的にはここで行っていないと思う。
12.共通鍵を暗号化
SSL証明書に添付された公開鍵を使って共通鍵を暗号化する。
13.暗号化された共通鍵を付与
暗号化された共通鍵をサーバーへ送付
14.暗号化された共通鍵を秘密鍵で復号
共通鍵は公開鍵暗号方式で暗号化されているのでサーバ側にある秘密鍵でこれを復号する。
参照
https://milestone-of-se.nesuke.com/sv-advanced/digicert/digital-certification-summary/
https://qiita.com/kawaz/items/f90810b9ea823b6556a8