ブログ

AWS運用には無料のSSL証明書を活用しよう!(取得も簡単、難易度低です)

「AWSでHTTPS通信のセキュリティが高いwebサイトを構築しよう」と決まった方へ、SSL証明書の購入先を検討中であれば、是非この記事をご参照ください。AWS Certificate Manager (ACM) を利用すれば、SSL証明書は無料で利用可能かつ設定も数分で完了です。

AWSのSSL証明書サービスを活用して、簡単にできるセキュアなAWS運用方法をご紹介します。

SSL証明書とは?

SSL証明書は、webサイトをHTTPS通信で公開する時に必要となるものです。HTTPS通信は暗号化された通信なのでセキュリティレベルが高く、安全です。webサイトにアクセスする時URLを指定しますが、最初の指定で通信方法が決まります。

http://example.com ←これはHTTP通信

https://example.com ←これはHTTPS通信

webサイトにアクセスする時、内部ではたくさんの情報が、アクセスした端末とwebサーバー間を行き来してwebサイトが表示されています。例えば、アクセスした人のIPアドレスや端末情報。会員登録をするページであれば、入力した個人情報も端末とwebサーバー間を行き来します。

この行き来する情報がHTTP通信だとそのまま、HTTPS通信だと暗号化されています。

HTTPS通信の方が、安心してwebサイトへアクセスができますよね?

SSL証明書には、アクセスした端末とwebサイト間の通信を暗号化するための情報が詰まっているのです。そのため、HTTPS通信(暗号化通信)を行うためにはSSL証明書が必ず必要なのです。

実は、インターネット社会全体として「WebサイトへのアクセスはHTTPS通信(暗号化通信)を利用したアクセスを必須にしよう」という考え方が広がってきています。

例えば近年利用者が増えているブラウザ Google Chrome では、2018年7月以降に公開されたバージョンで、HTTP通信は「保護されていない通信」と表示される様になりました。

加えてHTTPS通信はSEO対策でも重要です。 Google などの検索エンジンに、検索結果の上位に表示してもらう対策です。

例えば Google はページ表示が遅いと検索順位が下がるアルゴリズムを利用しています。速度改善を実現するために HTTP/2 の利用が推奨されますが、これを使うにはHTTPS通信でなければいけません。

以上の理由からwebサイトを公開する際、HTTPS通信を前提に考えることが多くなりました。しかし、SSL証明書の用意にはお金や設定作業が必要です。

AWS運用では無料、かつ簡単にSSL証明書の用意とHTTPS通信をするための設定が可能です。

SSL証明書はどうやって使えばいい?

※AWS運用での方法だけが知りたい方は飛ばして次の章へお進みください。AWS運用では、この面倒な設定が簡略化されます。

HTTPSでwebサイトを公開する場合、以下の作業が必要です。

  • webサイトで利用するドメインを購入する
  • サーバーを立てる
  • Apache にドメイン名を設定、 index.html を設置してサイトを公開準備をする

── ここまででHTTP通信が可能です ──

★ SSL証明書を購入する

★ Apache にSSL証明書を設定する

──ここまででHTTPS通信が可能です──

今回は★マークがついている、SSL証明書に関する作業のみ切り取ってご紹介いたします。

前提:
webサイトを作成するに当たって、既にドメイン購入が完了していることを前提にします。
レンタルサーバーや、ドメイン登録サービス等ご利用元は様々かと思いますが、基本的にはドメインを購入したサイトで Certificate Signing Request (※以下、CSRと省略させて頂きます)の作成、SSL証明書の購入が可能です。

★ SSL証明書を購入する

1. CSRを作成する

SSL証明書を購入するときに利用する鍵です。SSL証明書は暗号化のための情報が詰まっていますが、その暗号化を紐解くために利用する情報がCSRです。

「CSRを作成する」などのページがSSL証明書を販売しているサイトには用意されています。画面の指示に従って情報を入力してください。
CSRと秘密鍵が同時に作成されます。アルファベットと数字の文字列が画面上に表示されることが多いです。コピーしてメモ帳などに貼り付けて保存してください。一部が欠けてしまうと暗号化を紐解く役割が果たせなくなるのでお気をつけください。

CSRと秘密鍵がセットになり、暗号化を紐解くための鍵の役割を果たします。SSL証明書を購入する時と、後続のApacheに設定をする時に利用するので必ず保存してください。

2. SSL証明書を購入する

SSL証明書には種類があり、値段が異なります。大体 1,000円 ~ 50,000円 が相場です。高いものは会社組織のみ購入ができ、利用する会社の身元を保証してくれる役割がある物も存在します。
値段が高い方が複雑な暗号化をしているので、クレジットカード情報を通信しても安心です。そこまで重要な情報を入力する様なwebサイトでない場合は、低価格のSSL証明書で十分です。

SSL証明書の種類を決めて購入手続きを進めると、CSRを指定する様に指示が表示されます。1 で作成したCSRと秘密鍵のうち、CSRをアップロードして指示された情報を入力すればSSL証明書の購入完了です。

SSL証明書はは中間CA証明書と一緒に指定したメールアドレスに送られてくることが多いです。なくさない様に保存してください。

★ Apache にSSL証明書を設定する

3. Apache の設定を行う

HTTPS通信用の設定をします。

  • ポートの指定
  • HTTPS通信の場合のindex.html設定
  • HTTP通信を全てHTTPS通信へリダイレクトさせる設定 等

2 で作成したSSL証明書を指定のディレクトリに設置します。
Apache のデフォルトであれば下記ディレクトリです。

 SSL証明書: /usr/local/ssl/certs/web.crt
 秘密鍵: /usr/local/ssl/certs/private.key
 中間CA証明書: /usr/local/ssl/certs/chain_ca.crt

それぞれ、決められたディレクトリに決められた名前のファイル名で保存します。
これでHTTPS通信ができる様になります。

4. SSL証明書を1年ごとに更新する

SSL証明書は1年間が期限です。以前は2年以上の期限のものもありましたが、2021年現在は2年以上が期限のSSL証明書を利用しているとサイトに警告が表示される様になります。現在はSSL証明書の販売元も1年間が期限のSSL証明書のみを提供してる場合がほとんどです。

1 で作成したCSRは使い回すことができるので、2〜3を1年ごとに行う必要があります。

※SSL証明書の種類によっては自動更新が可能な場合があります。

AWS運用でだけ使える無料のSSL証明書って何?

前章で説明させていただいた通り、webサイトはHTTPSを利用した通信を求められているにも関わらず、費用も発生する上、1年ごとに更新作業が必要です。

AWS運用ではこの作業がとても楽になるので、是非運用方法としてご検討ください。

AWSでは、AWS Certificate Manager(以降はACMとします)というAWSサービス内でのみ使えるSSL証明書が無料で提供されています。

SSL証明書を設置(アタッチ)できる対象がAWSリソースに限られますが、ドメインはAWSの Route 53 で購入しているものはもちろん、第三者機関のドメイン登録サービスで取得しても問題ありません。既にお持ちのドメインでSSL証明書の取得が可能です。

前章の手順と比べると、以下の通り非常にシンプルです。

1. CSRを作成する

 →  ACMではCSRを作成する必要はありません。

2. SSL証明書を購入する

 →  ACMではSSL証明書を無料で取得することができて、保管はAWS内で行われます。SSL証明書をローカルで保存して管理する必要はありません。

3. Apache の設定を行う

 →  ApacheにSSL証明書の設定は不要です。 CloudFront 、または ELB (Elastic Load Balancing) へアタッチしてご利用いただけます。アタッチ作業はとても簡単です。

4. SSL証明書を1年ごとに更新する

 →  ご利用のネームサーバーへCNAMEレコードを登録することで自動更新が可能です。一度アタッチしたら、再度作業は必要ありません。これにより、SSL証明書の更新漏れは発生しません。

AWS運用の特権!無料のSSL証明書を取得してみよう

実際にSSL証明書を取得してみましょう。
AWSサービスの中から、Certificate Manager を選択します。

証明書のプロビジョニングの [今すぐ始める] をクリック。

パブリック証明書のリクエスト を選んで [証明書のリクエスト] をクリックします。

webサイトで利用予定のドメインを指定して [次へ] をクリックしてください。
www などのサブドメインをまとめて指定することもできますし、ワイルドカード*1*2 としても無料で利用が可能です。

*1 ワイルドカードのSSL証明書は、ドメインの前に「www」などを指定するサブドメインをすべて賄ってくれるSSL証明書です。

*2 サードパーティでSSL証明書を購入する場合は、ワイルドカードにすると2万円程金額が上がります。

検証方法はDNSとメールがありますが、おすすめはDNSです。
検証のタイミングでDNSレコードが出力されるので、今は [次へ] をクリックします。

タグの作成は任意です。
不要であれば空欄のまま [確認] をクリックします。

内容に誤りがなければ [確認とリクエスト] をクリックします。

出力されているCNAMEレコードをご利用のDNSへ指定してください。
ネームサーバーを Route 53 としている場合は、 [Route 53 でのレコードの作成] をクリックしてください。自動でレコードが登録されて、早ければこの画面の間に検証が完了します。

これで無料のSSL証明書を取得できました!

では、SSL証明書を設定してみましょう。

一番簡単な方法は ELB に設定することです。
ELB には種類がありますが、今回は ALB を使用します。

AWSサービスの中から、EC2 を選択します。
[ロードバランサー] [ロードバランサーの作成] を選択

Application Load Balancer を選択します。

任意の名前を入力して、 [リスナーの追加] をクリックします。
HTTPとHTTPSを選べるので、HTTPSを選択して [次の手順:セキュリティ設定の構成] をクリックします。

先ほど作成したSSL証明書が選べます。
選択して、 [次の手順:セキュリティグループの設定] をクリックします。

新しいセキュリティグループを作成すると、以下の様に表示されます。
この表示であれば、HTTPとHTTPS通信を両方許可してくれます。
[次の手順:ルーティングの設定] をクリックします

初期設定のままであれば、EC2インスタンスに紐づけることができます。
[次の手順:ルーティングの設定] をクリックします。

SSL証明書を利用したいEC2インスタンスを選択します。
選んだら [次の手順:確認] をクリックします。

確認ページで問題がなければ作成してください。
これでHTTPS通信ができる様になりました!設定完了です!

おまけ AWS運用でSSL証明書を使うなら構成はこれがおすすめ

AWS運用において、たくさんのサービスを自由に構成できるのはかなりの利点です。要件に合わせて選択してください。

以下は参考イメージです。

  • とにかく簡単に設定したい人向け

ELB(SSL証明書) - EC2

ELB を構築して、EC2 1台をターゲットにします。ロードバランサーですが、 EC2 1台だけを結びつけることで、 Apache のSSL証明書設定を代わりに行ってもらう様な使い方ができます。

  • DDoS対策を行いたい人向け

CloudFront(SSL証明書) - EC2

CloudFront は ELB と比べて機能が多いため構築の難易度が上がります。しかし、標準でDDoS攻撃対策が取られているので、 ELB だけを利用するよりも対策が取られた環境でご利用いただくことが可能です。

  • サーバー (EC2) への直接アクセスを絶対に防ぎたい人向け

CloudFront(SSL証明書) - ELB(SSL証明書) - EC2

CloudFront(SSL証明書) - EC2 の構成だとAWS内のネットワークではありますが、一度HTTP通信でEC2まで情報が送られます。間に ELB を置くことで、HTTP通信は ELB - EC2 の間だけになります。ELB - EC2 はお客様のネットワーク内なので、暗号化されていなくても安心です。

ご参考になりましたら幸いです。

元記事発行日: 2021年03月30日、最終更新日: 2021年03月30日