LightsailでSSL証明書をかんたんに設定する方法はありますか?
AWSのサービスでSSL証明書の作成と自動更新ができます
LightsailでSSL通信に対応する
AWSのLightsailはWordPressなどのWEBサイトを簡単に作成できますが、そのままだとhttp://
でしかアクセスできません。
この記事では、LightsailでSSLにしてhttps://
で通信できようにする手順を説明します。
WEBサイトにはSSL証明書が必要
WEBサイトはSSL通信(https://
で始まるURL)で運用しないとブラウザで警告などが表示されてしまいます。
ただ、https通信に対応するにはSSL証明書が必要で、一定期限ごとに証明書を更新していく必要があります。
AWSのACMについて
ACM(AWS Certificate Manager)はSSL証明書を作成できるAWSのサービスで、AWSで作成したWEBサイトに簡単にSSL証明書を設定できます。
また、AWSによってSSL証明書の更新が自動で行われるので、使い勝手のよいサービスです。
利用には料金が発生する
ACMは、WEBサイトで使用する公開SSL証明書の料金は無料です。
ただ、ACMの証明書を利用するのに使う、Route53やCloudFrontno料金は発生します。
ACMでSSL証明書を作成する
Route53で独自ドメインのホストゾーンを作成する
まずは、AWSのRoute53で、WEBサイトのドメインのホストゾーンを作成します。
この手順は以下の記事と同じ手順になります。
ACMでSSLの証明書を作成する
次にSSLの証明書をACM(AWS Cerificate Manager)で作成します。
ACMの証明書には以下のメリットがあります。
AWS Cerificate Manager(ACM)でSSL証明書を作成するメリット
- 証明書の発行が無料
- 簡単に証明書を発行できる
- 証明書が自動更新されるため手間が掛からない
- AWSのサービスと連携しやすい
SSL証明書をACMで作成する手順
AWSのマネージメントコンソールでサービス
を開いてセキュリティ、ID、およびコンプライアンス
−Cerificate Manager
を選択します。
ACMのページで、右上のリージョンで米国東部(バージニア北部) us-east-1
を選択します。
証明書をリクエストをクリックします。
作成する証明書のタイプでパブリック証明書をリクエスト
を選択します。
作成するパブリック証明書の内容を設定します。
ドメイン名を入力して「DNS検証」を選択して「リクエスト」を押します。
作成直後の一覧画面では、まだ証明書が表示されないので上部にある証明書を表示
をクリックします。
この時点では、作成した証明書は保留中の状態になっています。認証に必要となるCNAME
の内容をメモしておきます。
作成済みの証明書を表示するには画面左側のメニューをクリックします。
メニューの証明書を一覧
をクリックすると作成済の証明書の一覧が表示されます。
証明書をRoute53のDNSレコードに登録する
作成した証明書をRoute53のDNSレコードに登録します。
Route53でレコードを作成
をクリックします。
Route53に証明書と同じドメインのホストゾーンが存在する場合、以下の画面になりますので レコードを作成をクリックします。
Route53にDNSのレコードが作成されます。証明書のステータスが「保留中の検証」のままの場合はF5キーを押すなどして画面を更新します。
証明書のステータスが「成功」に変わります。
これで証明書の設定は完了です。
CloudFrontディストリビューションの作成
今度はCloudFrontを作成します。AWSのサイトでCloudFrontの画面を開きます。
「CloudFrontディストリビューションを作成」をクリックします。
ディストリビューションの作成画面で以下の内容を入力していきます。
項目 | 値 | 説明 |
---|---|---|
オリジンドメイン | 独自ドメイン | オリジンというのはCloudFrontがキャッシュする元のサイトです。使用するドメイン名を入力します。 |
プロトコル | HTTPのみ | CloudFrontがオリジンの情報を取得する際の通信なので、HTTPのみで問題ありません。 |
名前 | 独自ドメイン | オリジンドメインの入力値が自動で入ります。 |
項目 | 説明 |
---|---|
ビューワープロトコルポリシー | HTTPでアクセスされた場合もHTTPSでのアクセスに切り替えたいので、Redirect HTTP to HTTPS を選択します。 |
許可されたHTTPメソッド | 全てのメソッドを許可します。 |
項目 | |
---|---|
キャッシュキーとオリジンリクエスト | Legacy cache settings を選択します。 |
ヘッダー | 次のヘッダーを含める を選択します。 |
ヘッダーを追加 | Host 、CloudFront-Forwarded-Proto を選択します。 |
クエリ文字列 | すべて を選択します。 |
cookie | すべて を選択します。 |
続けてキャッシュキーとオリジンリクエスト
に以下の内容を入力していきます。
「ヘッダーを追加」はリストからHost
、CloudFront-Forwarded-Proto
を選択します。
さらに「カスタムを追加」ボタンから入力画面を開きカスタムヘッダー
に”User-Agent”と入力して追加ボタンをクリクします。
入力後の内容は以下になります。
項目 | 説明 |
---|---|
代替ドメイン名 | ユーザーがブラウザでアクセスするドメインを入力します。CloudFrontがキャッシュを取得するオリジンと同じドメインではアクセスがループしてしまうので、ユーザーがアクセスするドメインとCloudFrontがアクセスするドメインは、サブドメインを変えて別にする必要があります。 |
カスタムSSL証明書 | ACMで作成したSSL証明書をリストから選択します。リストに何も表示されない時は、証明書をバージニア北部のリージョンで作成しているか、証明書のドメインとCloudFrontのドメインが合っているかを確認してください。 |
デフォルトのビヘイビアが作成されます。続けて、WordPressサイトに必要なビヘイビアを作成していきます。
「ビヘイビアを作成」をクリックして以下の内容でビヘイビアを作成していきます。
① 管理画面をキャッシュさせないためのビヘイビア
② 管理画面をキャッシュさせないためのビヘイビア その2
③ WP REST API 用のビヘイビア
ヘッダーを追加のX-WP-Nonce
はUser-Agent
と同じように「カスタムを追加」ボタンから追加します。
作成したビヘイビアをまとめると以下の内容になります。
番号 | パスパターン | ビューワープロトコルポリシー | 許可されたHTTPメソッド | ヘッダー |
---|---|---|---|---|
① | /wp-admin/* | Redirect HTTP to HTTPS | GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE | Host , CloudFront-Forwarded-Proto ,User-Agent |
② | /wp-login.php* | Redirect HTTP to HTTPS | GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE | Host , CloudFront-Forwarded-Proto ,User-Agent |
③ | /wp-json/* | Redirect HTTP to HTTPS | GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE | Host , CloudFront-Forwarded-Proto , X-WP-Nonce ,User-Agent |
Route53でドメインとの紐付けを設定する
Route53でレコードを作成します。
項目 | 説明 |
---|---|
レコードタイプ | Aレコードを選択します。 |
エイリアス | ONにします。 |
トラフィックのルーティング先 | CloudFrontのディストリビューションへのエイリアス を選択します。 |
ディストリビューション | リストからCloudFrontのディストリビューションを選択します。リストに何も表示されない場合は、CloudFrontのディストリビューションの代替ドメイン名(CNAME) がホストゾーンと合っているかなどを確認します。 |
以上で設定は完了です。ブラウザでCloudFrontで設定したCNAMEのドメインにアクセスして保護された接続でサイトが表示されるか確認してください。
管理画面が正しく表示されるようにする
ここまでの設定でサイトは正しく表示されるようになりましたが、WordPressの管理画面にアクセスすると以下のようにCSSが適用されない形で表示されます。プラグイン「SSL Insecure Content Fixer」をインストールして修正します。
WordPressの管理画面にログインします。ログイン時に以下のように表示される場合がありますが「このまま送信」をクリックします。
スタイルが崩れているので見にくいですが、下にスクロールして「Plugin(プラグイン)」ー「Add New(新規追加)」を見つけてクリックします。
プラグインの検索欄に「SSL Insecure Content Fixer」と入力して検索します。
検索結果から「SSL Insecure Content Fixer」を選択して「Install Now(インストール)」をクリックします。
インストール後に「Activate Plugin(有効化)」をクリックします。
管理画面の「Plugin(プラグイン)」を開いて「SSL Insecure Content Fixer」の「Settings」をクリックします。
「HTTP detection」でHTTP_CLOUDFRONT_FORWARDED_PROTOを選択して「Save Change」をクリックします。
以上で手順は完了です。これで管理画面も正常に表示されるようになります。