#Let's Encrypt certbot で無料 SSL 設定

CentOS 7に Lets Encrypt 無料 SSL 証明書入れた時のメモ、今まで何回も作業していたが、コマンドや手間が多く毎回調べなたらでやっていました。ググる情報の中で古くて使えないものもあったので、CentOS 7 + Apache 2.4 最新版メモりました。

#環境

  • CentOS 7
  • Apache 2.4
  • Git

Apache インストールyum install httpd
Git インストールyum install git

#certbot-auto インストール

root 権限必要

# git clone
git clone https://github.com/certbot/certbot

# リンク作成してコマンド化
ln --symbolic $PWD/certbot/certbot-auto /usr/local/sbin/

# 依存パッケージのインストール
certbot-auto --install-only

# バージョン
certbot-auto --version
certbot 0.40.1

#Lets encrypt 無料 SSL ドメイン設定

certbot-auto

ガイドに従って設定すれば OK

#Apache config 設定

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d
conf ファイル SSL 設定

<VirtualHost *:443>
  DocumentRoot /var/www/ドメイン名
  ServerName ドメイン名

  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
  SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem

</VirtualHost>

確認

apachectl configtest
Syntax OK

Apache2.4.8 からcert.pemchain.pemの代わりにSSLCertificateFilefullchain.pemprivkey.pem推奨

fullchain.pem
All certificates, including server certificate (aka leaf certificate or end-entity certificate). The server certificate is the first one in this file, followed by any intermediates.

This is what Apache >= 2.4.8 needs forSSLCertificateFile(opens new window), and what Nginx needs forssl_certificate(opens new window).

参考certbot.eff.org(opens new window)

#Apache リロード・再起動・状態確認

初回はstartする必要、二回目以降はreloadrestart

service httpd reload
service httpd status

#証明書更新 certbot-auto renew

有効期限残り 30 日以下の時に自動更新してくれます。
crontabで月一回実行設定した方が忘れなく安心。

certbot-auto renew

Crontab 設定
crontab -eコマンドで下記追加

00 03 01 * * root certbot-auto renew --post-hook "service httpd reload"

#certbot-auto コマンドについて

certbot-auto コマンド構造

certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

#SUBCOMMAND サブコマンド

certonlyサーバ証明書の取得のみ(設定は手動)
renew有効期限が近い証明証を更新

他にもinstallrevokeregisterrollbackconfig_changesなどありますが、詳細はLet's Encrypt 総合ポータル(opens new window)にて

#options オプション

-h--helpヘルプ表示
-m--emailアカウント登録や回復するためのメールアドレス-m abc@example.com
-d--domainsSSL 取得申請ドメイン名-d sub.example.com-dは複数回指定 OK
--redirectHTTP から HTTPS に自動リダイレクトする
--no-redirectHTTP から HTTPS に自動リダイレクトしない

--hstsすべての HTTP レスポンスにStrict-Transport-Securityヘッダーを追加
--no-hstsすべての HTTP レスポンスにStrict-Transport-Securityヘッダーを追加しない

--uirすべての HTTP レスポンスにContent-Security-Policy: upgrade-insecure-requestsヘッダーを追加
--no-uirすべての HTTP レスポンスにContent-Security-Policy: upgrade-insecure-requestsヘッダーを追加しない

#サブコマンドrenewのオプション

renew は証明書を更新するためのサブコマンドで以下の専用オプションがあります。

--pre-hook証明書更新前に実行するシェルコマンド
--post-hook証明書更新作業後に実行するシェルコマンド
--renew-hook証明書更新成功後に実行するシェルコマンド

#certbot-auto ヘルプ

certbot-auto -h

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...

Certbot can obtain and install HTTPS/TLS/SSL certificates.  By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

obtain, install, and renew certificates:
    (default) run   Obtain & install a certificate in your current webserver
    certonly        Obtain or renew a certificate, but do not install it
    renew           Renew all previously obtained certificates that are near
expiry
    enhance         Add security enhancements to your existing configuration
   -d DOMAINS       Comma-separated list of domains to obtain a certificate for

  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  --nginx           Use the Nginx plugin for authentication & installation
  --webroot         Place files in a server's webroot folder for authentication
  --manual          Obtain certificates interactively, or using shell script
hooks

   -n               Run non-interactively
  --test-cert       Obtain a test certificate from a staging server
  --dry-run         Test "renew" or "certonly" without saving any certificates
to disk

manage certificates:
    certificates    Display information about certificates you have from Certbot
    revoke          Revoke a certificate (supply --cert-path or --cert-name)
    delete          Delete a certificate

manage your account:
    register        Create an ACME account
    unregister      Deactivate an ACME account
    update_account  Update an ACME account
  --agree-tos       Agree to the ACME server's Subscriber Agreement
   -m EMAIL         Email address for important account notifications

More detailed help:

  -h, --help [TOPIC]    print this message, or detailed help on a topic;
                        the available TOPICS are:

   all, automation, commands, paths, security, testing, or any of the
   subcommands or plugins (certonly, renew, install, register, nginx,
   apache, standalone, webroot, etc.)
  -h all                print a detailed help page including all topics
  --version             print the version number

#参考

Let's Encrypt 公式サイト(opens new window)
Github Certbot(opens new window)
Certbot 公式サイト certbot.eff.org(opens new window)
Let's Encrypt 総合ポータル(opens new window)
Certbot(Let's Encrypt)入門(opens new window)

#遭遇エラー

certbot-auto renew で SSL 更新しようと思って思わず遭遇したエラーです。

certbot-auto renew -d xxx.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Currently, the renew verb is capable of either renewing all installed certificates that are due to be renewed or renewing a single certificate specified by its name. If you would like to renew specific certificates by their domains, use the certonly command instead. The renew verb may provide other options for selecting certificates to renew in the future.

いわゆる、デバッグログは/var/log/letsencrypt/letsencrypt.logに保存したけど、ドメインを指定して SSL 更新するなら=certonly=使ってみてねってことです。

certbot-auto certonly --apache -d xxx.com

試しに、コマンド打ってみましたが、問題解決しました。
SSL の更新は certbot-auto renew より certonly の方が良かったようです。

2019-11-20
  • centos

関連記事