HTTPSって結局なんなの?
こんにちは。PIVOTのエンジニア、金杉です。
WebサイトではもはやHTTPS通信があたりまえですが、HTTP(Sなし)だと何が問題なのか、HTTPSにするには何が必要か、コストはどれくらいかかるのか、など、おさらいしましょう。
Webサイトとの通信経路についておさらい
スマホでSafariやChromeを起動したり、SNSからのリンクを踏むと表示されるWebサイト、ふだん意識することはないと思いますが、通信経路についておさらいしましょう。
(パーツの縮尺がめちゃくちゃなのはご愛嬌…)
なんとなくイメージできましたか?
じつはこの通信経路、下図のとおり情報は誰からでも取り放題(!!)状態です。
HTTPSの話からはそれますが「無線LANの通信を暗号化しましょう」という背景は、暗号化しないで送ると上図のように情報を取り放題、しかも内容が丸見えだからです。
(PIVOTでは在宅ワークの申請時に、自宅の無線LAN通信が暗号化されていることをキャプチャで送り、情シスがチェックします)
HTTPS通信のしくみ
HTTP(Sなし)通信は、HTTPという世界共通言語(※1)をそのまま通信で送ります。
すなわち、どんなサイトを見ているのか、入力フォームで何を送ったのか、知識とツールのある人にはわかってしまいます。
(※1) 正確には言語とは違いますが、わかりやすく言語という言葉を使っています。
それでは、HTTPS通信のしくみを見ていきましょう。
下図で、サイトが表示されるまでの流れを説明します。ブラウザに画面が表示される前の裏側のやりとりなので、画面からは何が起こっているのかわかりません。(便宜的に、間の通信経路は省略します。また、典型的な例を示しているので、異なる場合もあります。)
ここでは概念としての「鍵」が全部で3つ出てきます。Webサイト側から提供される「公開鍵」、Webサイト側のみがもっている「秘密鍵」、利用者側で作成する「共通鍵」です。
まず、公開して問題ない、鍵をかけることしかできない鍵(公開鍵)をサイトから送り、受け取った側で作成した鍵(共通鍵)を、公開鍵で暗号化してサーバに送ります。公開鍵は鍵を閉めることしかできないため、通信を傍受されても解読されません。
サーバは鍵を開けることのできる秘密鍵を持っているので、共通鍵を取り出し、以降の通信は共通鍵をかけてやりとりします。
共通鍵はこの二者しか持っていないので、通信が傍受されても(鍵のかかったカバンが盗まれても)開けられません。
HTTPSサイトにするには?
HTTPSサイトにするには、SSLサーバー証明書(以下、SSL証明書)を用います。
SSL証明書とは、以下の図のように作成・使用されるものです。
認証局はいくつかありますが、ブラウザ側で認証されたWebサイトのリストを持つので、世界で認定された認証局に依頼して証明書を発行してもらいます。(認証リストの更新は、ブラウザやOSがアップデートされるときなどに行われています)
エンジニアがよく「自己証明書」「オレオレ証明書」などと呼んで使うものは、どこの認証局にも認証されていない(上図の印がない)けど、HTTPS通信はできるというSSL証明書です。
SSL証明書の種類
SSL証明書には、いくつか種類があります。また、種類によってお値段が違います。
自己証明書、オレオレ証明書は上記で説明したので省略します。
ざっくり表にすると…
SSL証明書の期限と更新手続き
SSL証明書には有効期限があり、2021/07/14現在、取得した日から最大約1年となっています。この有効期限については、セキュリティの観点から(詳細な理由については割愛します)最大6ヶ月、3ヶ月…と短くする案が、ブラウザ開発ベンダーと認証局の会議で検討されています。
短くなることにより更新手続きが頻繁に必要になりますが、有効期限は作成するときに決まるため、更新の計画を立てることは可能です。
ドメイン認証型であれば、クラウドサービスで自動更新の仕組みも整備されてきています。
今後、更新が簡単なのか/手作業が必要で大変なのか/自動更新の仕組みをつくっておくのか、という観点もSSL証明書の選択の観点に入ってくるでしょう。
参考までに、自己証明書なら有効期限を好きなだけ長く設定できるので、スマホやPC以外の限られたサーバにしか接続しない通信機器やIoTデバイスなどでよく使われます。
まとめ
これでもう、HTTPS通信についてはカンペキ!でしょうか?
SSL証明書の期限短縮については、今後もウォッチしていきます!
この記事が気に入ったらサポートをしてみませんか?