SSLとは

2021年11月2日

クライアントとサーバーとが通信する際には、プロパイダーやIXなど、間にたくさんのネットワークを通知します。

もし経路上に悪意があるものがいると、データが盗み見られる恐れがあります。そこで重要なデータを通信するときは中身がわからないように暗号化します。

データを暗号化するSSL

Webのデータを暗号化するのに使われているのが、「SSL(secure Sockets Layer)」という仕組みです。

通常の(暗号化しない)通信は「http://」で始まるURLで示されます。

この時のポート番号は80番です。

それに対してSSLを使った通信は「https://」で始まるURLで示されます。

このときのポート番号は443番です。

つまり暗号化を有効にしたWebサーバーは、暗号化していない通信用のポート番号80番と、暗号化通信用のポート443番の2つで待ち受けしています。

「https://」で接続して暗号化されているときは、ブラウザのアドレス蘭に鍵マークが表示され、クリックすると暗号化の状態を見ることができます。

オンラインバンキングやショッピングサイトはもちろん、最近ではお問い合わせページなど、少しの個人情報を入力する場所でも、SSLによる暗号化が導入されています。

公開鍵暗号方式

SSLでは「公開鍵暗号方式」と呼ばれる暗号化手法を使います。

公開鍵暗号方式では2つの鍵(key)を用います。「秘密鍵(private key)」と「公開鍵(public key)」です。

この2つの鍵は対をなしていて「キーペア(key pair)」と呼ばれています。

キーペアは、ツールを使って作ります。

MEMO

具体的には、例えばLinuxなどのサーバーでSSLを用いる場合「opensslコマンド」を使います。

秘密鍵は、その名の通り誰にも見せてはいけない自分だけの鍵です。それに対して公開鍵は、皆に配る鍵です

鍵を使った暗号化

「秘密鍵」と「公開鍵」はどちらも暗号化(encrypt)やその解読に用います。

次の特徴があります。

MEMO

暗号化されたデータを、元のデータ(平文)に戻す(解読する)ことを「復号化(decrypt)」と言います

この特徴を使って、次のように暗号化通信します。

1.公開鍵を広く配布しておく

公開鍵をあらかじめ配布しておきます。

2.公開鍵を使って暗号化する

暗号化したいときは、1の公開鍵を使って暗号化します

3.秘密鍵で元に戻す

2のデータを秘密鍵を使って元に戻します。

秘密鍵は、秘密にしておく鍵ですから漏洩しない限り自分以外の人によって解読される恐れがありません。

公開鍵が本物であるかどうかを確認するための証明書と認証局

公開暗号方式では、公開鍵が本物であることが重要です。

もし、途中で誰かに偽物の公開鍵にすり替えられてしまうと、本当の相手ではなく偽物に解読されてしまいます。

この問題を防ぐためにSSLでは「認証局(CA・Certification Authority)」という概念を取り入れています。

認証局とは「信頼できると思われる企業や団体」のことです。「証明機関」と呼ばれることもあります。

それらの信頼できる公開鍵は、インターネットで個別に配布するのではなく、あらかじめそれぞれのパソコンにインストールしておきます。

具体的に言うと、Webブラウザにはあらかじめ代表的な認証局の公開鍵が内蔵されています。この内蔵された公開鍵は「偽装されていない」ことを前提とします。

このような、あらかじめ認証局の公開鍵がインストールされている環境で、認証局以外の場所と通信するときには次のようにします。

1.公開鍵を認証局に暗号化してもらう

公開鍵を認証局の秘密鍵で暗号化してもらいます。このデータのことを「証明書」と言います。

2.証明書から相手の公開鍵を取り出す

証明書は、認証局によって暗号化されたデータなので、Webブラウザに内蔵されている認証局の公開鍵で元に戻せます。

逆に言うと、もしこの段階でWebブラウザに内蔵されている認証局の公開鍵で元に戻せないなら、証明書が偽装されていることを意味します。

このようにSSLでは、まずブラウザに内蔵されている認証局は、正しいはずだと信頼します。

そして、認証局の秘密鍵によって暗号化されたデータである証明書も正しいと信頼します。

つまり、「信頼しているものによって確認された相手は正しい」と言うように信頼を連鎖することで、公開鍵が途中でする帰れることを防いでいます。

SSLでは共通鍵暗号方式と公開鍵暗号方式を併用する

このようにSSLでは、公開鍵暗号方式を使って安全性を保ちますが、実際のデータの暗号化には公開鍵暗号方式を使いません。

なぜなら公開鍵暗号方式は、速度が少し遅いからです。

実際のデータは「共通鍵暗号方式」と呼ばれる、「暗号と解読とで同じ鍵を使って暗号化する方式」を使います。

具体的には、通信を始めようとするときにクライアント側で共通鍵暗号方式で用いる鍵をランダムに作成します。そしてそのランダムな鍵をサーバーに送信するときにだけ、公開鍵暗号方式を使い以降は送信した鍵を使って共通鍵暗号方式で暗号化します。

SSLを使うには

SSLで暗号化する場合、技術的には公開鍵と秘密鍵があれば十分です。

しかし、すでに説明したように鍵の偽装を防ぐための認証局の存在があります。

そのため実際には、公開鍵や秘密鍵を作って、それを認証局に送って証明書を作成してもらう必要があります。

1.秘密鍵を作る

まずは、秘密鍵を作ります。これは例えばテキスト形式の次のようなデータです。

便宜的に「秘密鍵」と読んでいますが、実際には公開鍵の情報も含まれます。

2.証明書の依頼データを作成する

1から公開鍵の情報を取り出し、認証局に証明書を依頼するためのデータを作ります。

このデータは「CSR(Certificate Signing Request)」と呼ばれます。

CSRには、公開鍵に加えて「自分の団体名」「所在地」「ドメイン名」などの情報を付与して作成します。

3.証明書の発行を依頼する

2のデータを認証局に送付して証明書の発行を依頼します。

インターネットには、さまざまな認証局があります。例えば「ベリサイン社」「グローバルサイン社」などに依頼をします。

定められた費用を支払うと、証明書を発行してくれます。ただし認証局によっては登記簿謄本や住民票などの書類が必要なこともあります。

4.証明書をインストールする

ApacheなどのWebサーバーに「1の秘密鍵」と「3で発行された証明書」をインストールします。

Webサーバーについてはこちら⇨WEBサーバーソフトとは

まとめ

いかがでしたでしょうか、正直書き疲れましたwプロのライターさんとかすごいですね、尊敬します。

コーディングとは違い日本語で書くのでタイピングが2倍くらいですねw

SSLについては基本情報技術者試験でも度々問題として出題されていますので受験される方がいたら覚えておくといいかもしれません。

SSLはサイトの信頼性を確認するにもとても重要なものですのでしっかりと押さえておきましょう。

ではでは

Follow me!