HTTPSとSSLとは?安全なWebサイトの仕組みをわかりやすく解説
HTTPSは、ブラウザがWebサイトと通信するために使うプロトコルであるHTTPの安全な版です。すべてのリクエストとレスポンスを、TLS(Transport Layer Security)を使って暗号化された接続で包みます。そのため、訪問者とWebサイトの間にいる誰も、送受信される内容を読んだり改ざんしたりできません。SSLは、同じ考え方の古い名前で、TLSが置き換えた元のプロトコルです。今でも「SSL証明書」と呼ばれるのはそのためです。
AIでサイトを作るときにHTTPSが大切な理由
公開するアプリは、必ずHTTPSで配信されるべきです。これは良い習慣というだけではありません。
- ブラウザがHTTPSを前提にしている。 平文のHTTPで公開されたサイトには「保護されていない通信」と表示されます。また、位置情報、カメラやマイク、オフラインで動くアプリのためのサービスワーカーなどの機能は、基本的に安全な(HTTPSの)ページでしか動きません。
- ログインとフォーム。 HTTPSがないと、パスワード、セッションのCookie、フォームのデータが平文で送られます。同じカフェのWi-Fiにいる人が、それらを盗み取れてしまう可能性があります。
- 決済と外部サービス。 決済サービス、OAuthによるサインイン、多くのAPIは、リダイレクトURLやコールバックURLにHTTPSを要求します。
- 信頼と検索。 訪問者は警告に気づきます。また、Googleは、HTTPSを検索順位の要素のひとつとして扱うと明言しています。
良いニュースとして、現代的なホスティングサービスの多くでは、HTTPSは自動的に設定されます。実際に必要なのは、独自ドメインの設定や混在コンテンツの警告がうまくいかないときに直せるよう、その仕組みを理解しておくことです。
身近なたとえ
HTTPの平文でデータを送ることは、はがきを郵送するようなものです。その配達に関わるすべての人が内容を読めますし、誰かが文面を書き換えることさえできます。
HTTPSは、中身が見えず、開封されたら分かる封筒に入れて送り、さらに相手の正式な身分証明を先に確認するようなものです。証明書は、信頼された機関(認証局)が、そのWebサイトが確かにそのドメインを管理していることを確認して発行した身分証明書にあたります。暗号化は封筒の役目です。身分証明書は、書き込み先の宛先が正しいことを証明し、封筒は中身を秘密に保ちます。
HTTPSの仕組みをかんたんに
ブラウザがhttps://shop.example.comを開くとき、次のことが起こります。
- あいさつ。 ブラウザが接続し、対応している暗号方式を伝えます。
- 証明書。 サーバーが自分の証明書を送ります。証明書には「この鍵は
shop.example.comのものである」と書かれていて、認証局によって署名されています。 - 確認。 ブラウザは、あらかじめ信頼している認証局に対して署名を照合し、証明書が期限切れでないこと、ドメインが一致していることを確認します。
- 鍵。 ブラウザとサーバーは、このセッション専用の新しい秘密鍵について合意します。その鍵が平文で送られることはありません。
- 暗号化された会話。 これ以降、リクエストとレスポンス(ページ、フォームのデータ、Cookieなど)はすべて暗号化された状態で送られます。
このTLSハンドシェイクは数ミリ秒で終わり、自動的に行われます。訪問者に見えるのは鍵マークだけです(ブラウザによっては、中立的なサイト情報のアイコンになります)。
HTTPSが守るものと守らないもの
| 守るもの | 守らないもの |
|---|---|
| ブラウザとサーバーの間を流れるデータ | サーバーやデータベースに届いた後のデータ |
| 公共のWi-Fiでの盗み見 | 悪意のあるサイトや詐欺サイト |
| 途中でページが改ざんされること | アプリのバグ(権限チェックの漏れなど) |
| 送信中のCookieとパスワード | 弱いパスワードや漏えいしたAPIキー |
HTTPSはリクエストの中身(ページのパスやクエリ文字列を含む)を暗号化します。ただし、アクセスしたドメイン名は、通信経路上のネットワークからは通常見えたままです。これも、個人情報をURLに入れるべきでない理由のひとつです。URLはログやブラウザの履歴にも残ってしまうからです。
具体例:独自ドメインを接続する
予約アプリを公開し、book.myyogastudio.comで見せたいとします。
book.myyogastudio.comをホスティング先に向ける DNSレコードを追加します。詳しくはドメインとDNSの仕組みを参照してください。- ホスティングサービスは、その名前を管理していることを認証局に証明します。たいていは、そのドメインへのチャレンジに応答することで行われ、証明書を受け取ります。
- ホスティングサービスが証明書を設置し、期限切れの前に自動で更新します。証明書はあえて短い期間で発行されるため、自動更新が重要です。
http://book.myyogastudio.comにアクセスした訪問者は、https://にリダイレクトされます。
手順1が誤っている場合(レコードが別の場所を指している、途中にプロキシがある)、手順2が失敗し、訪問者には証明書のエラーが表示されます。これは独自ドメインを接続するときに、人々がぶつかるHTTPSの問題としてもっとも多いものです。
主な用語
| 用語 | 意味 |
|---|---|
| TLS | Transport Layer Security。HTTPSの背後にある暗号化プロトコル。 |
| SSL | Secure Sockets Layer。TLSの古い前身。名前だけが残っている。 |
| 証明書 | ドメインと公開鍵を結びつける、署名された電子ファイル。 |
| 認証局(CA) | 証明書を発行することをブラウザが信頼している組織。Let's Encryptなど。 |
| ドメイン認証(DV) | ドメインの管理を証明する証明書。ほとんどのサイトが使っている方式。 |
| ワイルドカード証明書 | *.example.comのように、1階層下のすべてのサブドメインをカバーする証明書。 |
| 混在コンテンツ | HTTPSのページが、一部のリソースを平文のHTTPで読み込むこと。ブラウザはこれをブロックしたり警告したりする。 |
| HSTS | 今後そのサイトには常にHTTPSでアクセスするようブラウザに指示するヘッダー。 |
| ポート443 | HTTPSの標準ポート(HTTPはポート80)。 |
よくある誤解
- 「鍵マークがあればサイトは信頼できる」。 意味するのは、接続がプライベートで、ドメインが一致しているということだけです。詐欺師も証明書を取得できます。
- 「HTTPSが必要なのは決済ページだけ」。 ログイン、フォーム、Cookieがあるページはすべて必要です。これはほとんどのアプリに当てはまります。どこでも使ってください。
- 「証明書は高価」。 無料で信頼される証明書は標準的なものになっており、ほとんどのホスティングサービスが管理してくれます。
- 「HTTPSでアプリは安全になる」。 安全になるのは接続だけです。アプリには、サーバー側での権限チェック、秘密情報の安全な扱い、入力の検証も必要です。AIで作ったアプリのセキュリティチェックリストを参照してください。
- 「HTTPSにするとサイトが遅くなる」。 現代のTLSの負荷はごくわずかです。また、サイトを速くするHTTP/2などの機能は、ブラウザでは基本的にHTTPSを必要とします。
よくあるHTTPSの問題と直し方
| 症状 | 考えられる原因 |
|---|---|
| 「接続はプライバシーで保護されていません」 | 証明書がこのドメインを含んでいない、期限切れ、またはまだ発行されていない |
www.では開くが、ドメインだけでは開かない(またはその逆) | DNSと証明書があるのは片方の名前だけ |
| 鍵マークがない、一部のページで「保護されていない通信」 | 混在コンテンツ:画像、スクリプト、フォントがhttp://で読み込まれている |
| 独自ドメインを接続した直後に証明書エラー | DNSの反映がまだ終わっていない、または前段のプロキシが証明書の確認を妨げている |
AIビルダーに頼むこと
- 「すべての画像、スクリプト、フォントを、HTTPSまたは相対URLで読み込むようにして。
http://のリンクは入れないで」 - 「HTTPのアクセスはすべてHTTPSにリダイレクトして」
- 「セッションのCookieには
SecureとHttpOnlyフラグを設定して」 - 「OAuth、決済、Webhookのコールバック URLはすべて
https://を使って」 - 「独自ドメインで証明書エラーが出ます。ホスティングサービスが求めるDNSレコードは何ですか?」
MythexでのHTTPS
Mythexで独自ドメインを接続する(Proの機能)には、Mythexが表示するslug.mythex.aiのターゲットに向けたCNAMEレコードを追加し、確認をクリックします。するとMythexがそのドメインのHTTPSを自動的に発行します。ドキュメントでは、よくつまずく2点が説明されています。DNSがCloudflareにある場合は、証明書を発行できるように、レコードを「プロキシ経由」(オレンジ雲)ではなく「DNSのみ」(グレー雲)に設定してください。また、HTTPSの設定が完全に終わる前にDNSの確認が通ることがあるので、数分待ってから再度確認してください。詳しくはドキュメントのカスタムドメイン、および当社ガイドの独自ドメインの接続を参照してください。
よくある質問
HTTPとHTTPSの違いは何ですか?
HTTPは、ブラウザとWebサイトの間でデータを読める文字として送ります。HTTPSは、同じHTTPを暗号化されたTLS接続の中で送る方式です。そのため、同じネットワークにいる人や通信経路上の人は、送られる内容を読んだり改ざんしたりできず、ブラウザは接続先が本物のサイトかを確認できます。
SSLとTLSは同じものですか?
TLSはSSLの後継となる現在の仕組みです。SSLのすべてのバージョンは時代遅れで安全ではありません。今日の安全なWebサイトはTLSを使っています。「SSL証明書」という言い方は慣習的に残っていますが、証明書はTLSとともに使われています。
鍵マークがあれば、そのサイトは安全ですか?
いいえ。鍵マークは、接続が暗号化されていて、証明書がドメインと一致していることを意味します。詐欺サイトでも有効な証明書を持つことができます。鍵マークが示すのは、接続を盗み見られないということであり、サイトの運営者が信頼できるということではありません。
SSL証明書には料金が必要ですか?
たいてい必要ありません。Let's Encryptのような無料の自動化された認証局は、ブラウザが信頼する証明書を発行します。多くのホスティングサービスが、証明書の取得と更新を代行しています。有料の証明書は主にサポートや追加の身元確認を提供するものです。
サイトに「保護されていない通信」と表示されるのはなぜですか?
よくある原因は、https://ではなくhttp://でサイトを開いていること、証明書が期限切れになっている、または正確なドメインをカバーしていないこと、ページが画像やスクリプトを平文のhttp://で読み込んでいること(混在コンテンツ)です。