こんにちは、フルスタックエンジニアのryuです。
今回の記事では、基本情報技術者試験の過去問を使いながら、HTTPSとは何か、何を守れるのかを解説します。
Webサイトを見ていると、URLの先頭に、
https://
と表示されます。
普段何気なく使っていますが、HTTPSはWebブラウザとWebサーバーの間の通信をTLSによって保護する仕組みです。
ここで注意したいのが、
「HTTPSならWebサイトのあらゆる攻撃を防げる」わけではない
という点です。
SQLインジェクションを防ぐものでもなければ、ファイアウォールの代わりになるものでもありません。
この記事では、過去問を解きながら、HTTPとHTTPSの違い、TLSで何を守るのか、サーバー証明書の役割、SQLインジェクションやファイアウォールとの違いまで順番に解説します。
HTTPSの機能を用いて実現できるものはどれか¶
今回はこちらの問題です。
HTTPS(HTTP over SSL/TLS)の機能を用いて実現できるものはどれか。
ア:SQLインジェクションによるWebサーバへの攻撃を防ぐ。 イ:TCPポート80番と443番以外の通信を遮断する。 ウ:Webサーバとブラウザの間の通信を暗号化する。 エ:Webサーバへの不正なアクセスをネットワーク層でのパケットフィルタリングによって制限する。 出典:平成26年秋期 問43
答えは、ウです。
HTTPSでは、WebブラウザとWebサーバーの間でやり取りされる通信内容をTLSによって保護します。
そのため、今回の選択肢では「Webサーバとブラウザの間の通信を暗号化する」が正解です。
HTTPSとは?¶
HTTPSとは、HTTPによる通信をTLSで保護する仕組みです。
HTTPは、WebブラウザとWebサーバーがHTMLや画像、フォームの入力内容などをやり取りするときに使うプロトコルです。
HTTPSでは、そのHTTP通信をTLSによって保護します。
ブラウザ
↓
TLSで保護された通信
↓
Webサーバー
古い資料では「SSL/TLS」という表現をよく見ますが、現在はSSLではなくTLSが使われています。
今回の過去問は当時の表記として「HTTP over SSL/TLS」と書かれていますが、現在の学習ではHTTPS=HTTPをTLSで保護する仕組みと理解しておけばよいでしょう。
HTTPのままだと何が問題なの?¶
暗号化されていないHTTP通信では、ネットワーク上で通信内容を読み取られた場合、送受信している情報が見えてしまう可能性があります。
例えば、
ログインID
パスワード
検索内容
フォームへ入力した情報
などです。
HTTPSを利用すると、通信内容を暗号化して送受信します。
そのため、途中で通信を取得されたとしても、内容をそのまま読むことを難しくできます。
ただし、
HTTPSだから端末やWebサーバー自体が侵害されても安全
という意味ではありません。
HTTPSが保護するのは、主に通信経路上のデータです。
HTTPSで守れる3つのポイント¶
TLSを理解するときは、単に「暗号化」とだけ覚えるより、次の3つを意識すると分かりやすいです。
1. 機密性¶
通信内容を暗号化し、第三者に内容を読み取られにくくします。
平文データ
↓
暗号化
↓
ネットワーク
↓
復号
パスワードやフォームの入力内容などを、通信途中でそのまま読まれるリスクを下げます。
2. 完全性¶
通信途中でデータが改ざんされていないことを確認する仕組みがあります。
例えば、
送信した内容:1000円
受信した内容:1000円
であるべきところを、途中で勝手に書き換えられるようでは困ります。
TLSでは通信データの完全性も保護します。
3. 相手の認証¶
Webブラウザは、サーバー証明書などを使って、接続先のサーバーが正当な相手かを確認します。
例えば、
https://example.com/
へ接続したとき、提示された証明書がそのドメインに対して有効か、信頼できる認証局につながっているか、有効期限内かなどを確認します。
つまり、HTTPSは単なる暗号化だけではなく、通信相手を確認する仕組みも関係しています。
サーバー証明書は何をしているの?¶
HTTPSでは、Webサーバーがサーバー証明書を提示します。
サーバー証明書には、公開鍵やドメイン名などの情報が含まれています。
ブラウザは証明書を確認し、
「この証明書は信頼できる認証局によって発行されているか」 「アクセスしているドメインと証明書の内容が合っているか」 「有効期限が切れていないか」
などを確認します。
証明書に問題があると、ブラウザに警告が表示されることがあります。
関連記事:サーバー証明書とは?サーバー証明書の仕組みを現役エンジニアが分かりやすく解説します!
HTTPSの暗号化はどうやって行われるの?¶
以前の記事では、
「公開鍵暗号方式で共通鍵をそのまま暗号化して交換する」
という説明をしていました。
暗号の学習では分かりやすい説明として使われることがありますが、現在のTLSでは、もう少し正確に理解しておく方がよいです。
TLSでは、ハンドシェイクという処理の中で、
- 利用する暗号方式などを決める
- サーバー証明書を確認する
- 安全に共有秘密を確立する
- 通信に使う鍵を生成する
といった処理を行います。
その後のWeb通信そのものは、処理が高速な共通鍵暗号を利用して保護します。
大まかには、
TLSハンドシェイク
↓
相手を確認
↓
共有秘密を確立
↓
通信に使う鍵を生成
↓
HTTPデータを暗号化して通信
と考えると分かりやすいです。
関連記事
アが誤りの理由:HTTPSはSQLインジェクションを防がない¶
アはこちらです。
SQLインジェクションによるWebサーバへの攻撃を防ぐ。
これは誤りです。
SQLインジェクションは、Webアプリケーションが利用者の入力値を安全に扱わず、意図しないSQL文を実行される脆弱性です。
HTTPSによって通信を暗号化しても、
利用者
↓ HTTPS
脆弱なWebアプリケーション
↓
不正なSQL
↓
データベース
という攻撃は成立する可能性があります。
HTTPSは、攻撃内容まで自動的に安全なものへ変えてくれるわけではありません。
SQLインジェクション対策では、プレースホルダやパラメータ化クエリなど、アプリケーション側の対策が必要です。
あわせて読みたい:SQLインジェクション攻撃の説明はどれか
イとエはファイアウォールの役割¶
イは、
TCPポート80番と443番以外の通信を遮断する。
エは、
ネットワーク層でのパケットフィルタリングによって制限する。
という説明です。
これらは、HTTPSそのものではなく、主にファイアウォールやネットワーク機器によるアクセス制御に関係します。
HTTPSは、
通信内容を保護する
仕組みです。
一方、ファイアウォールは、
どの通信を通すか
どの通信を拒否するか
を制御します。
役割が違います。
HTTPSならフィッシングサイトも安全なの?¶
HTTPSを使っているWebサイトだからといって、そのサイト自体が必ず安全とは限りません。
攻撃者が用意したフィッシングサイトでも、正規に証明書を取得してHTTPS化することは可能です。
HTTPSが示すのは、
「現在接続している相手との通信がTLSで保護され、証明書でその接続先を確認している」
ということです。
「その運営者が信用できる企業なのか」 「入力した情報を悪用しないのか」
まで保証してくれるわけではありません。
そのため、URLのドメイン名などを確認することも大切です。
HTTPSでも防げない攻撃は多い¶
HTTPSは重要なセキュリティ対策ですが、万能ではありません。
例えば、
- SQLインジェクション
- クロスサイトスクリプティング
- 脆弱なパスワードによる不正ログイン
- マルウェア感染
- Webサーバー自体の脆弱性
- フィッシング
などは、HTTPSを利用しているだけでは防げません。
セキュリティでは、
HTTPS
+
認証
+
安全なプログラム
+
アクセス制御
+
脆弱性対策
のように、複数の対策を組み合わせる必要があります。
科目Bでは通信経路を図にして考える¶
HTTPSの問題で迷ったら、
HTTPSはどこを守っているのか
を考えてみましょう。
例えば、
利用者のブラウザ
↓
インターネット
↓
Webサーバー
↓
データベース
という構成があったとします。
HTTPSが主に保護するのは、
ブラウザ
↓
通信経路
↓
Webサーバー
の部分です。
一方、Webサーバーからデータベースまでの設計や、Webアプリケーション内のSQL処理は別の問題です。
科目Bのセキュリティでは、こうしてどの通信・どの機器・どの処理を守る対策なのかを分けて考えることが重要です。
Giji Academyで科目Bのセキュリティを実践的に学ぶ¶
セキュリティ用語は、一つずつ暗記すると、
「HTTPS」 「TLS」 「ファイアウォール」 「WAF」 「公開鍵」 「共通鍵」
がバラバラの知識になりやすいです。
科目Bでは、それらをシステム構成の中でつなげて考える必要があります。
Giji Academyでは、基本情報技術者試験の科目Bに関連するセキュリティ問題を、ネットワークやサーバーの基礎から段階的に学習できます。
例えば、
ブラウザ
↓
インターネット
↓
ファイアウォール
↓
Webサーバー
↓
データベース
のような構成の中で、
「HTTPSはどこを守る?」 「ファイアウォールは何を制御する?」 「重要なDBはどこへ置く?」
といったことを考えると、単なる暗記より理解しやすくなります。
登録不要で無料体験できます。
過去問解説まとめ¶
今回の記事では、HTTPSについて解説しました。
答えは、ウの「Webサーバとブラウザの間の通信を暗号化する」です。
HTTPSで覚えておきたいポイントは次のとおりです。
- HTTPSはHTTP通信をTLSで保護する
- 通信内容の機密性と完全性を保護する
- サーバー証明書を使って接続先を確認する
- 現代のTLSではハンドシェイクで共有秘密を確立し、通信データは共通鍵暗号で保護する
- SQLインジェクションを防ぐ仕組みではない
- ファイアウォールのパケットフィルタリングとは役割が違う
- HTTPS化されているだけでサイトの運営者まで安全と保証されるわけではない
基本情報技術者試験では、「HTTPSは通信経路を保護する」と整理しておくと、ほかのセキュリティ対策との違いが分かりやすくなります。
Giji Academyでは、擬似言語に加えて、科目Bに関連するセキュリティ問題も実践的に学習できます。
Giji Academy|科目Bの擬似言語・セキュリティを学ぶ
基本情報技術者試験の参考書¶
元記事で紹介していた過去問題集は旧試験制度向けです。画像・リンクはそのまま残しますが、現在受験する場合は科目A・科目Bに対応した最新教材を利用することをおすすめします。







