tanke25616429のアウトプット

IT技術の基本を勉強したことをアウトプットします。Linux、Kubernetes、クラウド中心です。百番煎じくらいだけど誰かの役に立てばそれはそれでうれしい。

SSL/TLS

TLSの機能

TLSは2者間(以降はクライアントーサーバ間の通信として記載する)で安全に通信できることが目的である。TLSの機能は大きく以下の2つがある。

  • なりすましの防止
  • 通信の暗号化

それぞれの機能について詳しく記述する。

なりすましの防止

クライアントがサーバにアクセスする際に、そのサーバが本物かどうかを確認したい。サーバ側から見ると、自分が本物であることを証明したい。そこで、サーバ証明書と呼ばれる電子証明書をクライアントに提示し、自身が本物であることを証明する。

そのためには、

  1. アクセス先のサーバが本物であるとサーバ証明書によって証明されていること
  2. サーバ証明書自体の保証(出どころが確かなこと)

の両方が必要である。さらにブレイクダウンして記述する。

1. アクセス先のサーバが本物である証明

現実世界と異なり、コンピュータの世界ではデータは電子的にコピーがいくらでも作られる。したがって、現実の身分証明書等と異なり「原本の証明書を提示しているから相手が本物」という判断はできない。あるサーバ証明書の妥当性は、そのサーバ証明書が電子的に検証できることで示される必要がある。

サーバ証明書には、サーバ独自の(ほかのサーバとは異なる)署名がなされている。この署名は秘密鍵(クライアント側が知らない鍵)によって実現される。サーバ証明書を提示されたクライアントは公開鍵(誰でも持っている)によって検証できる。この検証が失敗した場合は、相手がなりすましの可能性がある。

TLSにおいて、あるサーバと別のサーバを区別するキーはドメイン名である。サーバ証明書ドメインが真正であることを保証する。

2. サーバ証明書自体の保証

サーバ証明書によってドメインが真正であるだけでなく、サーバ証明書自体が正しいことを保証する必要がある。それをする仕組みとしてPKIがある(参考記事参照)。電子証明書サーバ証明書を含む)では、電子署名とそれを検証するための公開鍵が含まれており、公開鍵は何らかのデータによって本人性が保証されているのだった(参考記事参照)。PKIにおいて、公開鍵の本人性はCA(Certificate Authority)と呼ばれる第三者電子署名によって保証される。

PKIでは信頼できる第三者*1サーバ証明書を発行する。サーバ証明書の発行者が前述したCAであり、具体的には、SymantecやGlobalSignなどの企業がそれにあたる。

サーバ証明書に付与されたCAの電子署名により、サーバの公開鍵がサーバ本人のものであることが示される*2

なお、こうしたCAにサーバ証明書の発行を依頼せず、サーバ自信が自分で発行した証明書を利用することもできる(いわゆる、オレオレ証明書、自己証明書)。ちなみに自己証明書をサーバ証明書として使っているWebサイトにアクセスすると、ブラウザから警告が出る。

通信の暗号化

クライアントからサーバに対しTLSでの通信をリクエストすると上述したようにサーバの真正性がクライアントによって確認されるが、同時にTLSのやり取りの中で通信を暗号化するための鍵の交換が行われる*3。この鍵はTLS通信を行うサーバとクライアントの2者しか知らない。この鍵で通信内容を暗号化することにより、盗聴を防ぐことができる。

自己証明書を用いた場合でも通信の暗号化は実現できる。

参考にしたもの

SSL/TLSの基本 - Qiita

電子署名の基礎知識 - Qiita

milestone-of-se.nesuke.com

関連記事

tanke25616429.hatenablog.com

tanke25616429.hatenablog.com

*1:免許証を発行するのは警視庁という「信頼できる」機関である。

*2:CAの電子署名が本物かどうかを確かめる仕組みは本記事では述べない。

*3:この鍵はTLSセッションごとに使い捨てであるはず、と思われるが明確には調べきれていない。