SSL(HTTPS)

CentOS7へLet’s Encryptをインストール

CentOS7のサーバーに無料SSLのLet's Encryptをインストールする方法をまとめました。

現在は、Certbotを使って、誰でも簡単にインストールできるようになっているので、
まだSSLを導入されていない方は試してみて下さい。

Certbotをインストール

Certbotについて

Certbotとは、Let's Encryptが発行する無料SSLの証明書を簡単に取得できるようしてくれるソフトウェアです。

Certbotのコマンドを使って誰でも簡単にインストールできるようになったので、
非常にありがたいソフトウェアです。

Certbotのインストール方法については、ディストリビューションごとに以下のサイトに記載されています。
[ Certbot クライアントのインストール - Let's Encrypt 総合ポータル ]

一応、こちらのブログでも、CentOS7環境へのインストール方法については記載しておきます。

【CentOS7】EPELリポジトリからCertbotをインストール

EPELリポジトリにCertbotが含まれているので、そちらを利用してインストールします。

まずは、EPELリポジトリをインストール
# yum -y yum install epel-release

で、Certbotをインストール
# yum -y install certbot python-certbot-apache

これで、Certbotのインストールは完了です!

証明書のインストール

証明書を発行

まず、証明書の発行を行います。
# certbot certonly --webroot -w /var/www/html -d example.com -m info@example.com

※「-w」の後ろの「/var/www/html」の箇所は、実際に証明書を発行するドメインの公開ディレクトリに変更して下さい。
※「-d」の後ろの「example.com」の箇所は、実際に証明書を発行するドメイン名に変更して下さい。
※「-m」の後ろの「info@example.com」は、ご自分のメールアドレスに変更して下さい。

これで証明書の発行は完了です。
もし、エイリアス(www)あり、なし両方のドメインに対してSSLの設定を行う場合には、
-d example.com -d www.example.com」として下さい。
※「-d」というオプションを増やすことで、複数のドメインを指定することができます。

このようなコマンドになります。
# certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com -m info@example.com

正常に終了すれば、以下のようなメッセージが表示されます。



Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/eep-dcorenet.demo.jp/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-01-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

念の為、実際に証明書が発行されているかも確認しておきます。
# ls -al /etc/letsencrypt/live/example.com

で、以下の4つのファイルが作成されていることを確認できれば、OKです。

cert.pem -> ../../archive/example.com/cert1.pem
chain.pem -> ../../archive/example.com/chain1.pem
fullchain.pem -> ../../archive/example.com/fullchain1.pem
privkey.pem -> ../../archive/example.com/privkey1.pem

このあとは、Apacheのconfファイルを編集して、証明書を読み込めるように設定します。

証明書をインストール

それでは、発行した証明書をApacheから読み込めるようにインストールしてきます。

まず、httpd.confを開きます。
# /etc/httpd/conf/httpd.confhttpd.conf

で、以下を追記します。

<VirtualHost 162.133.263.158:443>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /var/www/html
  CustomLog /var/log/httpd/ssl.example.com-access_log combined
  ErrorLog /var/log/httpd/ssl.example.com-error_log
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
  <Directory "/var/www/html">
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

「162.133.263.158」の部分はダミーのIPアドレスなので、ご自分のサーバーのIPアドレスに変えて下さい。
また、「/var/www/html」や「example.com」も、各自の環境のものに変更して下さい。

あとは、念の為に、httpd.confに記述した内容の構文チェックを行い、
問題が無ければ、Apacheの再起動を行います。

構文チェック
# httpd -t

「Syntax OK」と表示されればOK。

Apacheを再起動
# systemctl restart httpd.service

これで、証明書のインストールまで完了しました。

最後は、
https://example.com/

https://www.example.com/
にアクセスしてみて下さい。

画面が正常に表示されればOKです。

HTTPS通信で画面が表示されない場合

※上記で正常に画面が表示されている場合は、この項目は読み飛ばして下さい。

もし、
https://example.com/

https://www.example.com/
で画面が表示されない場合ですが、
・どこかの時点で間違った設定を行っているか、
・HTTPSの通信で使用するポート番号「443」が許可されていない
といった可能性もあります。

まずは、設定内容を見直して、間違っている個所がないかの確認を行って下さい。

特に問題が無さそうであれば、
ポート番号が許可されているか確認を行って下さい。

ファイアウォールとして「firewalld」を使用している場合は、以下のコマンドで確認できます。
# firewall-cmd --list-services --zone=public --permanent

「dhcpv6-client・・・」の後ろに、「https」が無ければ、HTTPS通信が許可されていません。

もし、ファイアウォールとして「iptables」を使用している場合は、以下のコマンドで確認して下さい。
# iptables -nvL

tcp dpt:443」や「tcp spt:443」の記述が無ければ、HTTPS通信が許可されていません。

許可されていない場合は、ポートを開放する必要があります。
方法については、以下にまとめておきます。

※因みに、
 例えば、「mod_sslが有効になっていない」など、他にも、理由はいろいろと考えられます。
 その辺は、今回は説明しないので、調べてみて下さい。

ファイアウォールでHTTPS(443番ポート)を開放する方法

■「firewalld」を使用している場合

HTTPS(443番ポート)を許可
# firewall-cmd --permanent --zone=public --add-service=https

設定を反映する
# firewall-cmd --reload

■「iptables」を使用している場合

HTTPS(443番ポート)を許可
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -p tcp --sport 443 -j ACCEPT

設定内容を保存する
# iptables-save > /etc/sysconfig/iptables

iptablesを再起動する
# systemctl restart iptables.service

これで、完了です。

証明書の自動更新設定

Let's Encryptは、90日毎に更新作業が必要になります。
が、その都度、更新の作業を行うのは手間です。
そこで、自動で更新されるように設定を行っておきます。

certbot-renew.timerを使って証明書の自動更新設定を行う

以前は、Cronを使って自動更新の設定を行っていたのですが、
今は、EPELリポジトリのCertbotに付いている「certbot-renew.timer」を利用して設定することが可能です。

タイマーを設定する
# systemctl enable --now certbot-renew.timer

設定を確認する
# systemctl list-timers


以下が追加されていればOKです。

NEXT LEFT LAST PASSED UNIT ACTIVATES
Sat 2019-09-29 11:12:44 JST 16h left n/a n/a certbot-renew.timer certbot-renew.service

Cronを使って証明書の自動更新設定を行う

念の為、Cronを使った証明書の自動更新設定についても、方法をまとめておきます。

今回は、デイリーのCronに更新用のコマンドを設定します。

「cron.d」の中に「certbot」を作成して、コマンドを保存します。
# vi /etc/cron.d/certbot

として、以下を記述します。

certbot renew --post-hook "systemctl restart httpd.service"

これで完了です。
簡単ですね。

この記事を書いている人
株式会社ディープ
名前足立拓也

メールアドレスadachi@deep-deep.jp

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

Twitter

  • 個人で借りているサーバのIPアドレスが、なぜか「FortiGuard」のブラックリストに登録されてしまった。まっとうにサイト運用してたから、なんで登録されたかは不明。取り敢えず、「データベースから削除して」って依頼したから、すぐに… twitter.com/i/web/status/1…
    about 12時間 ago via Twitter Web App

アーカイブ

PAGE TOP