■ はじめに
SSL / TLS について扱う
目次
【1】SSL / TLS 【2】目的 【3】位置付け 【4】暗号化 1)公開鍵暗号 2)共通鍵暗号 【5】SSL概要 1)概要図
【1】SSL / TLS
SSL(Secure Socket Layer)
* ネット上で情報を暗号化して送受信できる仕組み
TLS(Transport Layer Security)
* SSLをベースとした標準化した暗号通信プロトコル。 RFC2246として規格化されている。 * 以下の表を見る限り、SSLより優れてる?
http://qiita.com/kuni-nakaji/items/5118b23bf2ea44fed96e
【2】目的
[1] データの暗号化 [2] 通信相手が信頼できるか確認(認証)
【3】位置付け
* アプリケーションとTCPの間に位置し、データの暗号化と復号を行う
階層
+---------------------------------------+ | SSLを使ったHTTP | +---------------------------------------+ | HTTP | ← アプリケーション層 +---------------------------------------+ | SSL | +---------------------------------------+ | TCP | ← トランスポート層 +---------------------------------------+ | IP | ← インターネット層 +---------------------------------------+
【4】暗号化
* 「公開鍵暗号」と「共通鍵暗号」という暗号方式を 組み合わせて利用 << ★非常に重要★ (以下のサイトが非常にわかりやすい)
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284424/?ST=selfup
=> 「公開鍵暗号」で、サーバ-クライアント間の暗号通信に使う 共通鍵を暗号化し、サーバに送る => 以降は、「共通鍵暗号」で、やり取りする
やり取りの流れ
[1] 受信者(鍵作成者)は「秘密鍵」と「公開鍵」をペアで作成 [2] 「公開鍵」の方を公開し、「秘密鍵」は自分で保管 [3] 送信者は、受信者の公開鍵を入手し、その鍵を使って暗号化を行う ※Point! 暗号化された文書は、 公開鍵では元に戻せない [4] 受信者は、保管しておいた秘密鍵を使って復号
1)公開鍵暗号
* 公開鍵暗号は、公開鍵と秘密鍵と呼ばれるペアの鍵を使う方式 => 片方の鍵で暗号化したデータは、 ペアとなっているもう片方の鍵でしか復号できない => 片方の鍵をインターネットで公開しても、 もう片方の鍵を秘密にしておけば、 目的の相手(公開鍵のペアとなっている秘密鍵を持つ相手)だけに 安全にデータを送れる => 公開鍵で暗号化したデータは、ペアとなっている秘密鍵でしか 暗号化・複合化できない
2)共通鍵暗号
* 暗号化と復号化に同じ鍵(共通鍵)を使う方式
欠点
[前提条件] 送信側と受信側の両者が、あらかじめ誰にも知られていない 同じ鍵を持っていなければいけない * 鍵をそのままインターネットで送ると、肝心の鍵が他人に盗まれる恐れがある => あらかじめ通信相手を特定していないインターネットの通信で、 両者が通信前に同じ鍵を持つことは不可能
【5】SSL概要
[1] クライアント側からサーバ側に対して、SSLによる接続を要求する その際、暗号通信で使う暗号方式などを提案する(ClientHelloメッセージ) [2] 提案のあった暗号通信方式から適切なものを選んで クライアント側に送信する(ServerHelloメッセージ) [3] Webサーバ側は、認証局(CA)から発行されたサーバ証明書に公開鍵を添付して クライアント側に送信する(Certificateメッセージ) [4] 証明書の情報を送り終えたら、そのことをクライアント側に知らせる (ServerHelloDoneメッセージ) [5] サーバ証明書を受け取ったクライアントは、サーバ証明書が有効であるかどうかを 確かめるために、サーバ証明書に記載されている認証局にアクセスして 認証局の公開鍵を取得する [6] 実際のデータを暗号化するための共通鍵を作成する [7] 先に複合化した公開鍵おで共通鍵を暗号化する(ClientKeyExchangeメッセージ) [8] 暗号化した共通鍵をWebサーバ側に送信する [9] 自分自身の公開鍵で暗号化された共通鍵を受け取ったサーバ側は、 自分の秘密鍵で複合化して共通鍵を取り出す [10] 以後、共通鍵を使用してお互い暗号化と複合化を行い、安全な通信を行う
1)概要図
* 本当はもっと細かいが概要を掴むための図 Client Server | | [1] | httpsでサーバに対してリクエストを出す | | (SSL通信をしたいとサーバに要求する) | | 暗号通信で使う暗号方式などを提案する | |----------------------------------------->| | | | 提案のあった暗号方式か一つ選んで返答する | |<-----------------------------------------| [2] | | | サーバ証明書を送信する | | (SSL通信をしたいとサーバに要求する) | |<-----------------------------------------| [3] | | | 証明書情報を送り終えたと知らせる | |<-----------------------------------------| [4] | | [5] 認証局(CA)に | | ルート署名を確認 | | | | [6] 共通鍵を生成する | | | | [7] | 共通鍵をサーバの公開鍵で暗号化送信 | | (SSL通信をしたいとサーバに要求する) | |----------------------------------------->| | | | | [8] 暗号化された共通鍵を | | 自分の秘密鍵で復号化する [9] | 暗号化通信を開始する旨を宣言 | |----------------------------------------->| | | | 暗号化通信を開始する旨を応答 | |<-----------------------------------------| [10] | | 以降、暗号化通信を行う。 詳細は以下のサイトを参照のこと。
http://thinkit.co.jp/cert/article/0706/3/6/3.htm
サーバー証明書の発行の手順
[1] CSR(Certificate Signing Request / 証明書署名要求)の生成 [2] サーバ証明書の発行 => 認証局(CA)がCSRに認証署名を入れ、サーバー証明書を発行
参考文献
http://www.inboundmarketing.jp/blog/2012/04/12/ssl/
http://thinkit.co.jp/free/article/0706/3/6/
公開鍵暗号方式 / 秘密鍵暗号方式
http://dev.sbins.co.jp/cryptography/cryptography02.html
http://www.infonet.co.jp/ueyama/ip/glossary/public_key.html
シリーズもの
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284384/?ST=selfup
Lesson1 * SSLの機能と位置付け * SSLを使うと何ができるのか * 通信の流れのどの部分でSSLが使われているのか
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284425/?ST=selfup
Lesson2 * SSLの概要
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284424/?ST=selfup
Lesson3 * SSLのやりとりの様子とメッセージの内容を確認
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284445/?ST=selfup
Lesson4 * 証明書とは? * 証明書を使った通信相手が信頼できるか検証するしくみ
http://itpro.nikkeibp.co.jp/article/COLUMN/20071012/284426/?ST=selfup
Active Directory証明書サービスでセキュアな公開鍵基盤を構築する
http://www.atmarkit.co.jp/ait/articles/1508/28/news021.html
http://www.atmarkit.co.jp/ait/articles/1509/17/news016.html
http://www.atmarkit.co.jp/ait/articles/1512/01/news025.html
関連記事
SSL / TLS ~ 関連用語・拡張子編 ~
https://dk521123.hatenablog.com/entry/2014/02/27/000100
SSL / TLS ~ 脆弱性編 ~
https://dk521123.hatenablog.com/entry/2016/03/09/205813