# 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.pem
chain.pem
の代わりにSSLCertificateFile
に fullchain.pem
privkey.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 for SSLCertificateFile (opens new window), and what Nginx needs for ssl_certificate (opens new window).
# Apache リロード・再起動・状態確認
初回は start
する必要、二回目以降はreload
restart
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
有効期限が近い証明証を更新
他にもinstall
revoke
register
rollback
config_changes
などありますが、詳細はLet's Encrypt 総合ポータル (opens new window)にて
# options オプション
-h
--help
ヘルプ表示
-m
--email
アカウント登録や回復するためのメールアドレス -m abc@example.com
-d
--domains
SSL 取得申請ドメイン名 -d sub.example.com
-d
は複数回指定 OK
--redirect
HTTP から HTTPS に自動リダイレクトする
--no-redirect
HTTP から 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 の方が良かったようです。