SSL/TLS
TLSの機能
TLSは2者間(以降はクライアントーサーバ間の通信として記載する)で安全に通信できることが目的である。TLSの機能は大きく以下の2つがある。
- なりすましの防止
- 通信の暗号化
それぞれの機能について詳しく記述する。
なりすましの防止
クライアントがサーバにアクセスする際に、そのサーバが本物かどうかを確認したい。サーバ側から見ると、自分が本物であることを証明したい。そこで、サーバ証明書と呼ばれる電子証明書をクライアントに提示し、自身が本物であることを証明する。
そのためには、
の両方が必要である。さらにブレイクダウンして記述する。
1. アクセス先のサーバが本物である証明
現実世界と異なり、コンピュータの世界ではデータは電子的にコピーがいくらでも作られる。したがって、現実の身分証明書等と異なり「原本の証明書を提示しているから相手が本物」という判断はできない。あるサーバ証明書の妥当性は、そのサーバ証明書が電子的に検証できることで示される必要がある。
サーバ証明書には、サーバ独自の(ほかのサーバとは異なる)署名がなされている。この署名は秘密鍵(クライアント側が知らない鍵)によって実現される。サーバ証明書を提示されたクライアントは公開鍵(誰でも持っている)によって検証できる。この検証が失敗した場合は、相手がなりすましの可能性がある。
TLSにおいて、あるサーバと別のサーバを区別するキーはドメイン名である。サーバ証明書はドメインが真正であることを保証する。
2. サーバ証明書自体の保証
サーバ証明書によってドメインが真正であるだけでなく、サーバ証明書自体が正しいことを保証する必要がある。それをする仕組みとしてPKIがある(参考記事参照)。電子証明書(サーバ証明書を含む)では、電子署名とそれを検証するための公開鍵が含まれており、公開鍵は何らかのデータによって本人性が保証されているのだった(参考記事参照)。PKIにおいて、公開鍵の本人性はCA(Certificate Authority)と呼ばれる第三者の電子署名によって保証される。
PKIでは信頼できる第三者*1がサーバ証明書を発行する。サーバ証明書の発行者が前述したCAであり、具体的には、SymantecやGlobalSignなどの企業がそれにあたる。
サーバ証明書に付与されたCAの電子署名により、サーバの公開鍵がサーバ本人のものであることが示される*2。
なお、こうしたCAにサーバ証明書の発行を依頼せず、サーバ自信が自分で発行した証明書を利用することもできる(いわゆる、オレオレ証明書、自己証明書)。ちなみに自己証明書をサーバ証明書として使っているWebサイトにアクセスすると、ブラウザから警告が出る。
通信の暗号化
クライアントからサーバに対しTLSでの通信をリクエストすると上述したようにサーバの真正性がクライアントによって確認されるが、同時にTLSのやり取りの中で通信を暗号化するための鍵の交換が行われる*3。この鍵はTLS通信を行うサーバとクライアントの2者しか知らない。この鍵で通信内容を暗号化することにより、盗聴を防ぐことができる。
自己証明書を用いた場合でも通信の暗号化は実現できる。