タイトルの通りですが、
業務中若干不安を覚えたので改めてまとめました。
認識異なる点あればご指摘いただけますと幸いです。
前提となる知識
HTTPとHTTPS通信
HTTPはいうまでもなく、クライアントとサーバーが通信を行うためのプロトコルですが、
HTTPSとはSSLを利用したHTTP通信のことです。
公開鍵暗号化方式と共通鍵暗号化方式
SSLが行っていることの1つに暗号化がありますが、
暗号化には主に2つの手段があります。
それが公開鍵暗号化方式と共通鍵暗号化方式です。
共通鍵暗号化方式とは
名前の通りですが、暗号化と復号化に同じ鍵を用いる通信です。
クライアントとサーバーで共通鍵暗号化方式で暗号化して通信する場合は、
クライアント、サーバーともに1つだけの鍵を使って、
暗号化と復号化を行います。
そのため、共通鍵を知られてしまうと誰でも復号化が可能なため、
鍵は第三者に知られないように共有する必要があります。
公開鍵暗号化方式とは
共通鍵暗号化方式では鍵を第三者に知られてはいけませんが、
そのためには物理的に共通鍵を知らせるなど、
手間がかかります。
そのため、この公開鍵暗号化方式が使用されます。
公開鍵暗号化方式で登場する鍵は4つ(2人の通信時)となります。
通信者毎に1対の「公開鍵」と「秘密鍵」を保有しており、
どちらかで暗号化したものはもう一方でしか復号ができません。
つまり、「公開鍵」で暗号化したものは「秘密鍵」でしか復号化できず、
「秘密鍵」で暗号化したものは「公開鍵」でしか復号化できません。
「公開鍵」は常にOPENで誰でも閲覧が可能です。
公開鍵暗号化方式で通信をする場合、
メッセージ送信者は、相手の公開鍵を使ってメッセージを暗号化し送付、
受信者は自身の秘密鍵を使ってメッセージを復号化します。
返信時は相手の公開鍵を使って暗号化し、送付という前と同じ流れとなります。
公開鍵、秘密鍵は一方の鍵でしか復号化ができないため、
秘密鍵が知られない限り、暗号の復号は困難となります。
ただ、公開鍵暗号化方式は処理に時間がかかるため、
通常は初回通信時のみ公開鍵暗号化方式で暗号化した「共通鍵」をやりとりし、
2回目以降は共通鍵で暗号化して通信を行います。
電子署名
電子署名は日常生活での印鑑と同様で、
その人によるものと証明するためのもの。
例えばメッセージに署名をつけるためには、
メッセージをまずハッシュ関数でハッシュ値に変換し、
それを秘密鍵で暗号化し相手に送付。
受け取った側は送付者の公開鍵で暗号化されたメッセージをハッシュ値に変換したものと
メッセージを自身がハッシュ関数によってハッシュ値に変換したものを比較します。
送付者がなりすましの場合、
公開鍵が本来の送付者と異なるため、
本来の送付者の公開鍵で暗号化されたメッセージをハッシュ値に変換したものと
メッセージを自身がハッシュ関数によってハッシュ値に変換したものは異なる値となるため、
なりすましと判断できます。
SSL/TSL通信とは
やっと本題ですが、
まずSSLとTSLは同一のものと考えて問題ありません。
SSLがアップデートに伴い、名称がTSLに変更になったもののため、
バージョンが異なるSSLと捉えてOKです。
そのため、以後SSLと名称を統一して説明しますが、TSLも概要は同じです、
SSL通信で行っていること
以下の3つを行っています。
・暗号化によるメッセージ漏洩の防止
・暗号化によるメッセージ改ざんの防止
・SLL証明書によるなりすましの防止
です。
SSLサーバー証明書とは
SSLでメッセージをやりとりする際には、
まずクライアントがこれから通信を行うサーバーが、
信頼できるサーバーかどうかを確認ものとなります。
クライアントはサーバーからSSLサーバー証明書をもらい、
上記を確かめます。
サーバー証明書には暗号化に必要な公開鍵も含め、
以下のような情報が記載されています。
・コモンネーム
・公開鍵の所有者情報
・証明した認証局の署名
・有効期限
など
クライアントはこのサーバー証明書に記載のコモンネームと
接続先のサーバーが一致しているかを確認し、
一致している場合は記載の公開鍵を使って共通鍵の交換を実行します。