BLOG

ブログ

2020.7.30

HTTPS(SSL/TLS)暗号化について

はじめに

皆さんこんにちは、オプスイン開発エンジニアの新川です。
この記事では、ウェブサービスに関わる上で基本中の基本のセキュリティともいえるHTTPSについて解説します。

 

HTTPSとは

HTTPS(Hypertext Transfer Protocol Secure)は、HTTPによる通信をより安全に行うためのプロトコルです。HTTPとは別のプロトコルで、ウェルノウンポートも異なります。(HTTPは80番ポート、HTTPSは443番ポート)
HTTPSを利用することにより、ウェブサイトをホスティングする場合に以下のようなメリットがあります。

 

改竄、盗聴などの攻撃を防ぐことができる

HTTPSを利用する場合、ウェブブラウザからウェブサーバまでの通信が暗号化されます。これにより、例えば利用者がクレジットカード情報等をサーバに送信する場合でも、通信の盗聴や送受信データの改ざんを防ぐことができます。

 

なりすましの攻撃を防ぐことができる

「なりすまし」とはどういう物かというと、たとえばウェブサイトの閲覧者が銀行のサイトにアクセスして口座情報を入力するようなケースで、悪意のある物が銀行のページそっくりなサイトを用意し、そこにアクセスさせて個人情報を盗み取るような攻撃手段のことです。
HTTPSを利用するためには、ウェブサーバに「サーバ証明書」を配置する必要があります。これは、シマンテック社などの第三者機関が「このサーバは間違いなくこの会社で運用されているサーバですよ」というお墨付きを与えるものです。

ひとつ注意しないといけないのは、なりすましサイトもサーバ証明書を導入してHTTPS化している可能性があるということです。ブラウザから証明書を表示し、ちゃんと第三者期間のお墨付きを得た信頼できる証明書なのか確認することも重要です。

 

SEOに有利になる

検索エンジンがウェブサイトを検索結果に表示する際、検索エンジンによってはHTTPS化されているウェブサイトを検索結果の上位になるようにしていることがあります。GoogleはHTTPS化したサイトを優遇して検索結果に表示すると公に発表しています。
GoogleのHTTPS化への圧力は結構強いものがあり、最新のGoogle ChromeではHTTPS化していないサイトを閲覧すると警告が表示されます。URL入力欄の隣に「! 保護されていない通信」と表示されているサイトは、HTTPで通信していることを示しています。

 

暗号化プロトコルの違い

HTTPSでは通信を暗号化する技術が使われますが、この暗号化技術(暗号化プロトコル)にはいくつか種類があります。「安全性が低いので使ってはいけませんよ」とアナウンスされている物もありますので、こちらでご紹介します。

 

SSLとは

SSLは、一昔前に使われていた暗号化プロトコルです。SSL1.0〜SSL3.0までバージョンがありますが、2020年現在ではすべてのバージョンで脆弱性が指摘されておりますので、使用しないことが望ましいです。

 

TLSとは

TLSはSSLの次期バージョンとして広まっている物ですが、このTLSについては2020年現在、TLS1.0〜TLS1.3まで存在します。このうち、TLS1.0, 1.1については脆弱性が指摘されており、使用しないことが望ましいです。
新規にウェブサイトを構築する場合は、暗号プロトコルとしてTLS1.2もしくは1.3を選択したほうが良いでしょう。

 

通信プロトコルの選択手段

SSL/TLSのうちどの通信プロトコルを使うかは、クライアント(ウェブブラウザ)の設定と、ウェブサーバ側の設定で決まります。
クライアント、サーバいずれも、「この暗号化プロトコルは使ってもいいですよ」と許可する形で設定を行います。どちらか一方で拒否しているプロトコルは使えないため、クライアント側が許可しているプロトコルをサーバ側がすべて拒否している場合はサイトを閲覧することができません。
InternetExplorerの古いバージョンではSSLしか使えないものもありますので、こうした古いブラウザで閲覧できるサイトはどんどん減っていることと思います。

 

必要の無いケース

顧客にウェブサービスを提供する上ではHTTPS化は必須と言えると思いますが、何でもかんでもHTTPSにしなければならないというわけではなく、HTTPSには以下のようなデメリットもあります。

 

費用がかかる

HTTPSを実現するにはサーバ証明書が必要ですが、このサーバ証明書は数年単位の更新で、年額数万円が必要になることもあります。

ただ、最近はLet’s Encryptというサービスもあり、これを利用すると無料でサーバ証明書を導入することも可能です。

 

リソース消費が増える

HTTPでの通信と比較して、HTTPSは暗号化の処理が走りますので、その分サーバのリソース消費が大きくなります。

 

こうしたデメリットを踏まえた上で、HTTPSを利用する必要が無いのは以下のようなケースです。

 

開発環境

開発用途に立てたサーバでは、多くのケースでHTTPの利用で問題ないケースが多いかと思います。ただし、開発環境と本番環境で差異が出ることにはなりますので、そのあたりをうまく吸収する必要が出てきます。
どうしてもHTTPSでなければならない場合、自分で証明書を作ってしまうことも可能です。ただし、この場合第三者機関のお墨付きを与えられた証明書ではありませんので、ブラウザ上で閲覧する際に警告表示が出てしまいます。(俗に「オレオレ証明書」と言われます。)

 

内部ネットワークの通信

インターネットを介した通信をせず、完全に閉じたネットワーク内の通信の場合は、改竄・盗聴・なりすましなどの危険性はありませんので、HTTPを利用して問題ありません。
このため、インターネットとの接続部分(DMZ)にウェブサイトの入り口になるサーバを配置し、そこに証明書を配置してHTTPSの復号を実施、復号後はリバースプロキシでバックエンドのアプリケーションサーバにHTTP通信を行うような構成が取られることが多いです。AWSなどパブリッククラウドサービスを利用する場合、ロードバランサでこの復号を行うこともできます。このように、HTTPSの通信の終端となる場所を「SSLターミネーション」と呼びます。
但し、「インターネットを介した通信」イコール「クライアントとサーバ間の通信」ではない点に注意が必要です。サーバから外部のAPI等に対して通信を行う場合でもインターネットを経由する場合がありますので、この場合はHTTPS化を行うべきでしょう。

 

おわりに

HTTPSの概要と、プロトコルの違い、有用なケースと不要なケースをご紹介しました。HTTPSはいまやウェブサービスを運用する上では必須とも言えますので、仕組みを理解することでより良い設計ができると思います。

コメントを残す

メールアドレスが公開されることはありません。 *が付いている欄は必須項目です