Help us understand the problem. What is going on with this article?

Let's Encryptを利用してApache 2.4サーバをHTTPS化する

More than 1 year has passed since last update.

はじめに

前回の記事ではApache2.4のHTTPS化する手順をご紹介しましたが、今回は実際に「Let's Encrypt」が発行するSSL証明書を使う方法を紹介します。
また証明書の取得/更新を自動化する手順も併せてご紹介します。

更新履歴

  • 2019.6.19 ディレクトリ名を変更

インストール手順

作業方針

前回までと同様にCentOS7向けの手順となります。
その他のOSにインストールする場合は、公式の「Certbotクライアントのインストール手順」をご覧ください。

Apacheの準備

まずはApache HTTPDサーバを起動し、HTTP通信が可能な状態にしてください。
※初めて証明書を作成する場合はまだSSLが利用できない為、以下のファイルは設置せずにApache HTTPDサーバを起動してください。

  • /etc/httpd/conf.d/rewrite.conf
  • /etc/httpd/conf.d/ssl.conf

Certbotインストール

以下のコマンドでCertbotをインストールします。

yum -y install certbot

証明書の初回作成

以下のコマンドで証明書を初回作成する事ができます。

certbot certonly --agree-tos --non-interactive -d [ドメイン名] --webroot -w [ドキュメントルートのパス] --email [管理者のメールアドレス]

コマンドの実行が完了したら、ディレクトリ/etc/letsencrypt/live/[ドメイン名]/に証明書が自動保存されます。

# ファイル名 設定ディレクティブ 説明
1 cert.pem SSLCertificateFile サーバ証明書
2 chain.pem SSLCertificateChainFile 中間CA証明書
3 fullchain.pem SSLCertificateFile サーバ証明書+中間CA証明書を結合したもの
4 privkey.pem SSLCertificateKeyFile サーバ証明書の秘密鍵

Apache 2.4設定

まずは以下のコマンドでApache設定ディレクトリにシンボリックリンクします。

cd /etc/httpd/
ln -s /etc/letsencrypt/live live

次に、前回紹介した手順をもとに、設定ファイルを追加していきます。

ssl.conf

/etc/httpd/conf.d/ssl.conf
:
<VirtualHost *:443>
    :
    SSLCertificateKeyFile live/[ドメイン名]/privkey.pem
    SSLCertificateFile live/[ドメイン名]/cert.pem
    SSLCertificateChainFile live/[ドメイン名]/chain.pem
    :
</VirtualHost>

rewrite.conf

/etc/httpd/conf.d/rewrite.conf
<IfModule rewrite_module>
    RewriteEngine On
    LogLevel alert rewrite:trace3
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} !(^/.well-known/)
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

※前回の手順と比べ、/.well-known/パスをリダイレクトしないように変更しています。

証明書の更新設定

Let's Encryptが発行する証明書の有効期限は90日間と短い為、自動で更新されるように設定しましょう。

/etc/letsencrypt/letsencrypt-renew.sh
#!/bin/sh
certbot renew -q --no-self-upgrade --post-hook "systemctl restat httpd.service"

上記のスクリプトに実行権限を付与し、crontabを設定しましょう。

chmod 0700 /etc/letsencrypt/letsencrypt-renew.sh
crontab -e

以下の例では、毎日3時に更新チェックが実行されます。

0 3 * * * /etc/letsencrypt/letsencrypt-renew.sh

おわりに

今回まででCentOS7インスタンスの作成~Webサーバの設定まで一通りご紹介しました。
それでは楽しいコーディングをエンジョイしてください!

関連記事のリンクを以下にまとめています。

mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
https://mediado.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした