[ssl]lets encrypt(certbot-auto)を使って、ssl(https)対応しました

こんばんは、wordpressのブログをhttps(ssl)対応しようと思い立ちlets encryptを使って、対応してみました。
調べてみるとコマンドがいくつか乗っているだけで簡単にできそうだったのですが、普通にハマってしまいました😅

環境は下記になります。
OS: CentOS 6.1
WebServer:nginx
Python: 2.7

Lets encryptとは

下記が参考になります。

無料のSSLサーバー証明書(以下、SSL証明書)であるLet’s Encryptは、米国の非営利団体であるISRG(Internet Security Research Group)により運営されています。

無料で運営されているSSL証明書ですね。wikipedia的な感じかな・・・?
とりあえず、無料で使えて 「暗号強度などは一般的に販売されているSSL証明書と違いはありません。」 とあるので、使わせてもらうことにしました。

certbotをインストール

こちらを参考にインストールやってみました。

yum install epel-release
yum install certbot-nginx

EPEL (Extra Packages for Enterprise Linux) リポジトリ有効化して、certbotをインストールする上記がまず上手く行かず。

3 packages excluded due to repository priority protections
パッケージ certbot-nginx は利用できません。
エラー: 何もしません

ないって言われます。😫

行き着いたのが公式をみるという簡単なお仕事。
https://certbot.eff.org/docs/install.html
ここにある下記でcertbot-autoをインストールします。

user@webserver:~$ wget https://dl.eff.org/certbot-auto
user@webserver:~$ sudo mv certbot-auto /usr/local/bin/certbot-auto
user@webserver:~$ sudo chown root /usr/local/bin/certbot-auto
user@webserver:~$ chmod 0755 /usr/local/bin/certbot-auto
user@webserver:~$ /usr/local/bin/certbot-auto --help

certbot-autoを実行する

python3系では動かないようだったので、2.7でやりました。
pyenvを使って、pythonを切り替えてます。

最初に見た手順書ではcertbotがインストールできればあとは簡単なはず。。
と思い、certbot-autoを実行すると下記エラーが出ました。😭

$ certbot-auto
Bootstrapping dependencies for RedHat-based OSes... (you can skip this with --no-bootstrap)
yum is /usr/bin/yum
yum is hashed (/usr/bin/yum)
読み込んだプラグイン:fastestmirror, priorities, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * centos-sclo-rh: ftp.iij.ad.jp
 * centosplus: ftp.iij.ad.jp
 * contrib: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-php71: ftp.riken.jp
 * remi-safe: ftp.riken.jp
 * rpmforge: mirror.fairway.ne.jp
 * updates: ftp.iij.ad.jp
3 packages excluded due to repository priority protections
パッケージ gcc-4.4.7-23.el6.x86_64 はインストール済みか最新バージョンです
パッケージ augeas-libs-1.0.0-10.el6.x86_64 はインストール済みか最新バージョンです
パッケージ openssl-1.0.1e-58.el6_10.x86_64 はインストール済みか最新バージョンです
パッケージ openssl-devel-1.0.1e-58.el6_10.x86_64 はインストール済みか最新バージョンです
パッケージ libffi-devel-3.0.5-3.2.el6.x86_64 はインストール済みか最新バージョンです
パッケージ redhat-rpm-config-9.0.3-51.el6.centos.noarch はインストール済みか最新バージョンです
パッケージ ca-certificates-2018.2.22-65.1.el6.noarch はインストール済みか最新バージョンです
パッケージ python-devel-2.6.6-68.el6_10.x86_64 はインストール済みか最新バージョンです
パッケージ python-virtualenv は利用できません。
パッケージ python-tools-2.6.6-68.el6_10.x86_64 はインストール済みか最新バージョンです
パッケージ python-pip は利用できません。
パッケージ 1:mod_ssl-2.2.15-69.el6.centos.x86_64 はインストール済みか最新バージョンです
何もしません
Creating virtual environment...
Traceback (most recent call last):
  File "<stdin>", line 27, in <module>
  File "<stdin>", line 19, in create_venv
  File "/home/hoge/.pyenv/versions/2.7/lib/python2.7/subprocess.py", line 499, in check_call
    retcode = hoge(*popenargs, **kwargs)
  File "/home/hoge/.pyenv/versions/2.7/lib/python2.7/subprocess.py", line 486, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/home/hoge/.pyenv/versions/2.7/lib/python2.7/subprocess.py", line 672, in __init__
    errread, errwrite)
  File "/home/hoge/.pyenv/versions/2.7/lib/python2.7/subprocess.py", line 1201, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

調べて下記で解決しました 参考のサイトはこちら
pipとvirtualenvが上手く動いていないのが問題ポイです。多分内部で使ってるのかなーと思いました。

pip install --upgrade pip
pip install --upgrade virtualenv

UnicodeDecodeErrorエラーが発生する

こちらを参考にエラーを解消しました。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 5:

書いてあるようにデフォルトのエンコーディングを確認します。(Pythonの対話モードです)

$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

pyenvのsite-packagesにあたるのが下記でした。

.pyenv/versions/2.7/lib/python2.7/

こちらにsitecustomize.pyファイルを用意して、下記の内容で保存します。

import sys
sys.setdefaultencoding('utf-8')

もういちどエンコーディングを確認すると、utf-8になっています。

再度実行する

やっと実行できるようになったので実行します。(nginxなので–nginxを指定しています。)

certbot-auto --nginx -d codelike.info

画面が開かなくなる

ちゃんと動いたけど、画面が真っ白になります。。
iptablesを一旦ストップし気づいたんですが、ポート443を開けてなかったのが原因でした。
iptablesの設定で443を開けてあげればOKです。

サブドメインの設定を忘れる

サブドメインも一緒に指定してあげないといけないようです。再度コマンドを実行してあげればOKです。

certbot-auto --nginx -d codelike.info -d hoge.codelike.info -d hogehoge.codelike.info

みたいな感じで-d [ドメイン名] で複数いけます。
既に設定がある場合、Expand or Cancel と聞かれるので、Expand(展開)してあげます。

コマンドを実行すると、どうなる?

証明書のファイルがダウンロードされて、nginxの各サイトのconfファイルに証明書を参照するようにパスが追加されていました。

確認

証明書が発行されています🥳

cronで自動更新設定

lets encryptの証明書は何もしなければ3ヶ月で期限が切れてしまいます。
自動更新するためにcron設定してみました。

crontab -eで下記を書き込みました。

00 18 01 * * /usr/local/bin/certbot-auto renew

毎月1日の18時に更新コマンド certbot-auto renew を実行ですね。
設定後、crond restart で再起動しました。
10月1日に確認してみようと思います。😎

👋

コメント

タイトルとURLをコピーしました