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を利用する必要が無いのは以下のようなケースです。 開発環境 […]