[WordPress / AWS] EC2でSSL設定

[WordPress / AWS] EC2でSSL設定

概要

EC2のサーバーに直接SSL設定の手順を作成しました。

SSL対応

  • SSL対応は簡単に言うと、URLの前の『http://』を『https://』にすることです。
  • httpをhttpsにすることでそのサイトは改ざんなどがされていないことを証明してセキュリティ対応としてすごく大事です。
  • AWSだとELBなどを導入して簡単に行う方法もありますが費用が発生するので今回はLinux環境で行う手順を作成しました。

事前準備

  • EC2環境で構築したWordPressサーバー (別のLinux環境でもできます)
  • Route53からドメイン取得 (Route 53以外の場合ドメイン設定が違います)

参考

対応手順

環境によっては様々な不具合が発生する可能性があるのでサーバーをバックアップした状態で行うことをお勧めします。

EC2サーバーに接続

※ AWSのEC2環境以外の場合は次の手順に進んでください。

  • AWSに接続 > EC2 > WordPressのインスタンスのダッシュボードに接続します
  • サーバーに接続するために『接続』をクリックします。
  • インスタンスに接続画面で『接続』をクリックします。
  • サーバーに接続したら次のコマンドで管理者でログインします。
# 管理者ログイン
sudo su -

SSL証明書発行

  • 必要なツールをインストールします。
    • mod_ssl : SSL対応用
    • certbot : SSL証明書発行用
# mod_sslインストール
yum install -y mod_ssl

# certbotインストール
yum install -y certbot
  • 次のコマンドでcertbotでSSL証明書の発行を開始します。
  • 例 )
    certbot certonly –manual \
    –server https://acme-v02.api.letsencrypt.org/directory \
    –preferred-challenges dns \
    -d “www.crob-diary.com” -m “test@gmail.com”
# certbotでSSL証明書発行
certbot certonly --manual \ 
--server https://acme-v02.api.letsencrypt.org/directory \ 
--preferred-challenges dns \
-d "独自ドメイン" \ -m "自身のメールアドレス"
  • 次のような内容が表示されますが『Enter』を押さない!!ようにしてください。
  • 次に進む前にDNSのTXTレコードを作成して、キーを設定する必要があります。
  • ※ 間違って『Enter』を押すと失敗になってやり直しになりますが、
    1時間に5回以上失敗すると一時ブロックになりますので注意してください。
  • 上の画面はそのままにして別の画面からRoute53に移動します。
  • 対応するドメインのホストゾーン > 『レコード作成』> 『次へ』> 『シンプルなレコードを作成』をクリックします。
  • 先のcertbotのSSL証明書発行画面の情報から次の対応を行います。
    • レコード名 : _acme-challengeから始まるドメイン名をコピー
    • レコードタイプ : TXTを選択
    • 値 : 上の画像の白い背景で隠されていた場所の値
  • 入力が終わったら『シンプルなレコードを定義』をクリックします。
  • 追加されたレコードを選択して、
  • 『レコードを作成』をクリックすると作成ができます。
  • これでドメイン設定が終わったので先のcertbotのSSL証明書発行画面に戻り、
    『Enter』を押してください。
  • 作成が終了します。
  • 次のコマンドから作成したキーが確認できます。
    cert.pem, chain.pem, fullchain.pem, privkey.pemが作成されています。
# /etc/letsencrypt/live/<ドメイン名>/のファイル確認
ls -l /etc/letsencrypt/live/<ドメイン名>/

ApacheにSSL証明書を設定

  • 次のコマンドでSSL設定ファイルを開きます。
  • それから下の画像を参考に既存の設定を『#』でコメントにして内容を追加します。
# /etc/httpd/conf.d/ssl.conf表示
sudo vi /etc/httpd/conf.d/ssl.conf
  • 既存のServerNameをコメントにして、
    ServerNameをドメイン名:443を設定します。
ServerName <ドメイン名>:443
  • 既存のSSLCertificateFileをコメントにして、
    SSLCertificateFileにfullchain.pemのパスを設定します。
  • 既存のSSLCertificateKeyFileをコメントにして、
    SSLCertificateKeyFileにprivkey.pemのパスを設定します。
SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/fullchain.pem

SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem
  • httpd -t で変更にエラーがないことを確認します。
  • 問題なかったらApacheを再起動します。
# Syntax OKを確認
httpd -t

# Apacheの再起動
sudo systemctl restart httpd

サーバー上でHTTPSリダイレクト設定

HTTP → HTTPSリダイレクト設定

  • WordPressのルートディレクトリに移動します。
  • デフォルト設定で構築した場合は『/var/www/html/』です。
  • 『.htaccess』があることを確認します。
# ルートディレクトリに移動
# 例) cd /var/www/html/
cd /<ルートディレクトリ>

# .htaccess があることを確認
cat .htaccess
  • バックアップとして『.htaccess_org』を作成してコピーします。
# .htaccessのコピー.htaccess_orgを作成
sudo cp .htaccess .htaccess_org
  • 『.htaccess』の修正を開始します。
# .htaccessを開く
sudo vi .htaccess
  • WordPressデフォルト設定開始の『# BEGIN WordPress』を探してその上に次のコードを追加して保存します。
  • 『# BEGIN WordPress』の下に作成すると設定が上書きされてしまい反映されません。
# HTTPSリダイレクト設定
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
  • vi の簡単な使い方
    • viコマンドでファイルを開いたら最初は何もできない状態です。
    • 『a』を入力するとInsertモードになり、カーソルが表示されるので作成が可能になります。
    • 作成が終わったら『Esc』を入力してInsertモードを終了して、
      『:wq』を入力して保存と終了を行います。
  • WEBサーバーを再起動します。
sudo systemctl restart httpd
  • HTTPSが設定された状態で接続できます。

まとめ

  • 今回はEC2環境に構築したWordpressにSSL設定する手順を作成しました。
  • 最近はブラウザからもSSL設定がされていないサイトには接続できなかったりするので、
    セキュリティ面でもSEO対策としてもSSL設定はほぼ必須になっています。
  • ELBを利用した対応も可能ですが費用がかかるのでプログラミングの知識あったり、費用を節約したい方はチャレンジしてみてもいいと思います。