SSL
centos7
mod_ssl
Apache2.4
letsencrypt
50
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

Organization

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

はじめに

前回の記事では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 restart httpd.service"

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

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

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

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

おわりに

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

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

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
ユーザー登録ログイン
mediado
私たちメディアドゥは、電子書籍を読者に届けるために「テクノロジー」で「出版社」と「電子書店」を繋ぎ、その先にいる作家と読者を繋げる「電子書籍取次」事業を展開しております。業界最多のコンテンツラインナップとともに最新のテクノロジーを駆使した各種ソリューションを出版社や電子書店に提供し、グローバル且つマルチコンテンツ配信プラットフォームを目指しています。
この記事は以下の記事からリンクされています

コメント

(編集済み)

Certbotクライアントのインストール手順、こちらリンクがきれています。
https://free-ssl.jp/ こちらですかね?

また、証明書を作成する場合に下記のエラーを回避するため、acme-challengeの設定が必要だということを記載しておくと親切かもしれません。

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: example.com
   Type:   unauthorized
   Detail: Invalid response from
   http://example.com/.well-known/acme-challenge/vIb7XBYX7VXVm6nYs8BVBC68I54wCaGmCx86k2-BRso
   [1.1.1.1]: "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML
   2.0//EN\">\n<html><head>\n<title>404 Not
   Found</title>\n</head><body>\n<h1>Not Found</h1>\n<p"

あと、apacheにインストールだとcertbot --apacheが楽だと思いますし、RHEL系だとわからないのですが、ubuntuだとcertbot.timerという実装があるので、それをつかうと自動更新を勝手にしてくれるそうです。以下が参考になりました。

Wildcardについての記載

その後、少々調べたのですが、下記が割と親切にまとめてくださってました。

3
どのような問題がありますか?
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
GitHub Actionsの自分流の使い方をシェアしよう
~
remote.it を使って○○に接続してみた!
~
50
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー