2021/05/24

AWSでHTTPS接続できないときに行うトラブルシューティングのご紹介

 
  

はじめに


本稿ではAWSでEC2インスタンスを設定しウェブサイトをホストしている状態を前提とします。ウェブサイトとして設定しているEC2インスタンスのユーザーにHTTPS(ポート443)での接続をしようしたところ接続できない状態のトラブルシューティングをご紹介します。

基本的に設定しておくべきこと


HTTPS接続するにはEC2側のポート設定が必須となります。HTTPSで接続できない問題のトラブルシューティングの対処方法として、HTTPS接続するためのEC2の基本的な設定方法を説明します。

AWSポータルからセキュリティグループのルールを確認する

AWSにおいてセキュリティグループはインスタンスのファイアウォールとして機能し転送されるもしくはするデータに対して制限をかけます。

セキュリティグループはインスタンスごとに設定できるため、今回の対象としているHTTPS接続できないウェブサイトのEC2のセキュリティグループおよびそのルールの設定状況を再確認します。

セキュリティグループの状況はAWSポータルサイトからAmazon EC2コンソールを開き、ナビゲーションペインからセキュリティグループから確認できます。

HTTPS接続できないEC2に割り当てているセキュリティグループを選択し、下段のペインに表示されるインバウンドルールの部分を確認します。

インバウンドルールとは転送されてくるデータについてポートごとの利用許可または拒否することを示します。拒否設定に含まれているポートは接続できない状態になります。HTTPSポート443の状態が許可されているか確認します。

セキュリティグループのルールを更新する

セキュリティグループのルールを更新してHTTPSで接続できるようにします。設定にはタイプ、プロトコル、ポート範囲、送信元、許可/拒否の5つが設定できます。

HTTPSの接続許可を行う場合はそれぞれのレコードを次のように設定します。タイプはHTTPS(443)、プロトコルTCP(6),ポート範囲は443、送信元は0.0.0.0/0とします。最後に許可/拒否をALLOWとして設定を完了します。

なお、AWSのポータルサイトからの設定ではタイプをHTTPSとすると自動的にポート範囲を443として入力されます。

これは他通信プロトコルタイプでも同様で、ポート番号を調査することなくトラフィック制限をかけたいプロトコルタイプの名前を指定することで制限することができます。

セキュリティグループの詳細な設定をする

ここで前節で設定した内容について詳細を説明します。タイプをHTTP(80)、ポート範囲を80とするとHTTPSではなくHTTTPの接続についての設定となります。HTTPSと併せてどちらも許可したい場合は80,443どちらも許可します。

送信元0.0.0.0/0はすべてのIPアドレスを示します。ウェブサイトへのアクセス元が誰でもよい場合はこの設定にし、特定のIPを記述しておくと他のIPから接続できない状態に設定できます。

また、逆に特定のIPのみを説即できない状態にするには許可/拒否のレコード部分DENY(拒否)に設定し、送信元の設定を拒否対象のIPに設定します。

より強固なセキュリティ設定にする

前節の設定でインバウンドルールの変更によりHTTPSの接続を許可するように設定しました。セキュリティ状態の改善のため利用を想定していないポートが接続できない状態に設定します。

方法として、インバウンドルールに明示的に全てのポートを通信拒否するレコードを最も優先度が低い状態で設定します。

AWSのコンソール上ではインバウンドルール、アウトバウンドルールそれぞれでルール表が表示されます。その表の最下段が優先度が最も低いルールとなります。

最下段にタイプをALL TrafficとしてDENY設定のレコードを登録すると、上段ルールに設定した条件以外を接続できない状態に設定できます。

証明書エラーメッセージが表示されて接続できない場合の対処方法


ウェブサイト側のサーバー証明書に問題がある場合は証明書エラーメッセージが表示されます。HTTPS接続を試みた際に表示されるメッセージ例について、それに対する状況と対処方法を説明します。

証明書とは?

HTTPS接続ではCA(認証機関)で署名されたサーバー証明書が必要になります。証明書のパブリックキーや有効期間情報を読み取ることで対象のウェブサイトへの接続が安全であることを確認します。

AWSではAWS Certificate Manager(ACM)によりSSL/TLS証明書を発行し利用できます。通常は証明書のリクエストから発行まで時間がかかるのですが、証明対象もACMもAWSの内部リソースのため発行時間が短縮されかつ無料である利点があります。

どういった状況か?

エラーメッセージによって証明書の状態と対処方法が特定できます。ブラウザによってメッセージ文が異なりますが以下のようなメッセージ主旨とそれに対する状況を説明します。

証明書はサーバーの名前に対して有効ではありません

接続対象のサーバーのドメイン名と証明書のドメイン名が一致しないことを示しています。ブラウザの機能から証明書の詳細を確認することができますので、証明書のドメイン名を確認してみます。

*印のワイルドカードで記述されている場合、その有効範囲に注意します。例を示すと、*.xxx.comと記述している場合、yyy.xxx.comやzzz.xxx.comは保護範囲となりますが、aaa.yyy.xxx.comのように2つ以上のサブドメインレベルは保護範囲対象外となります。

複数のドメイン名を証明書に追加する等、サブドメインとワイルドカードの保護範囲に注意して設定します。

証明書の有効期限が切れています

日付が無効になっている場合や文字通り有効期限が切れていることを示します。

AWSのサービスとしてACM発行の証明書を使用することを前提として説明します。ACMでは自動的に証明書を更新します。そのため、証明書の有効期限が切れているメッセージが表示される場合、新しい証明書をインポートし忘れが原因となっています。

DNSレコードを確認しAWSリソースが正しく設定されているか確認し修正します。

ウェブサイトの SSL/TLS 証明書が信頼されていない

認証機関や証明書フォーマットやブラウザが古い可能性があります。

前述の通りACMでは自動更新を前提としているため認証機関や証明書フォーマットは最新であることを前提として、他のアクセスをリクエストした側による問題のトラブルシューティングを行います。

ACMで発行した証明書の場合は最新のブラウザ、OS、モバイルデバイスに幅広く対応しているため、アクセスできないブラウザとは別のメジャーなブラウザを利用すること、ブラウザを更新すること、別のデバイスでのアクセスを試みます。

接続が完全に保護されていない

一部のコンテンツのみ証明書が有効である可能性があります。例を示すとウェブページとの初段アクセスではHTTPSでの接続となっていて、他の部分がHTTPでの接続する構成となっている場合、このエラーメッセージが表示されるケースとなります。

上記ケースの場合、ウェブサイトのページを見直して、全てのページでHTTPS接続を行うように更新することで解決します。

HTTPS接続のトラブルシューティングはできましたか?


AWSで設定したウェブサイトへのHTTPS接続できない問題について基本的な解決方法をご紹介しました。まずはポートの通信許可状態を確認してみましょう。その際、利用予定のないポートまで通信許可しないようにセキュリティの設定にご注意ください。

また、証明書の状態次第ではブラウザ側で安全でない接続としてアクセスを遮断されることがあります。AWSにおいてはACMによって証明書が最新の状態に保たれるため、オンプレミスに比べて証明書の不備は少なくなる傾向にあります。

AWS管理者側では特に有効なドメインの範囲やDNSに注意しましょう。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】