SSLをさくらVPSに導入
SSL(Secure Server Layer)は、Webサイトとサイトを見ているユーザーとのやり取りを暗号化するものである。そのため通信の内容を盗み見ても暗号化されているため、その内容がわからない。SSLを導入するのは、有料だったが、無料のSSL Let's Encryptが登場したこともあり、WebサイトのSSL化が進んでいる。またSSLのシェアは2019年1月では、Let's Encryptが一番である。
SSLを設定していなと、特に企業のサイトはGoogle検索で表示される順位が非常に後ろになったりする。
これは、さくらVPSにLet's Encrypt をGitを用いて導入する方法である。 OS は CentOS6である。
Gitのは分散型のバージョン管理システムである。Gitを使うとローカル環境(自分のパソコンなど)に、全ての変更履歴を含む完全なリポジトリの複製が作成される。それで各ローカル環境がリポジトリのサーバーとなることができ、ネットワークに接続していなくても作業を行うことができる。
CentOS6はGitはすでにインストールされているが、インストールされているかどうか、確認するには、
yum list installed | grep git
とする。
yum list installed
でインストールされているものの一覧を示す。
grep git
でgit に関連するものを示す。
次にCertbotをインストールするディレクトリへ移動する。管理することができる所であればsrcである必要はない。
cd /usr/local/src
Certbotをインストールする。
git clone https://github.com/certbot/certbot
必要パッケージの導入、更新をする。
cd certbot/
./certbot-auto
./certbot-auto を実行すると、VirtualHost が設定されていないというエラーが出るなら、VirtualHostを設定する。独自ドメインをshiken.comとする。
まず/etc/httpd/conf/httpd.conf のコピーを取る。
cp /etc/httpd/conf/httpd.conf httpd_original.conf
/etc/httpd/conf/httpd.conf を開く。
vi /etc/httpd/conf/httpd.conf
一番最後に下記を書き加える。
NameVirtualHost *:80
 
<VirtualHost *:80>
ServerAdmin root@shiken.com
DocumentRoot /var/www/html
</VirtualHost>
DocumentRoot が /var/www/html でなければ、その環境に合うようにここも変える必要がある。
yumでリポジトリを追加する。 SCL(Software Collections)はRed Hat が提供する最新アプリケーション(安定版)のパッケージである。python27が入っている。
yum install centos-release-scl
pythonをインストールする。python はプログラム言語である。
yum install python27 python27-python-tools
pythonを使うことができるようにする。
scl enable python27 bash
pythonのversionを示す。versionを示す時、Vは大文字でなければならない。
python -V
証明書を取得する。
./certbot-auto certonly --standalone -d shiken.com
設定はこれで終わりである。サイトを開いてみて、鍵マークがあるか、https になっているかを確認する。フォーム内でhttpで呼び出していたりすると、鍵マークが出ない。httpをすべてhttpsに変更するか。httpを使わずに呼び出すようにする。
Let's Encrypt は有効期限が3ヶ月と短い。期限が失効する前に更新をする必要がある。
更新の認証回数に制限があるから、dry-runオプションでテストしてみる。webrootはサーバーを止めずに更新するオプションである。
scl enable python27 "/usr/local/src/certbot/certbot-auto renew --force-renew --webroot -w /var/www/html --dry-run"
実行できることを確認する。
現在の有効期限を確認する。
openssl x509 -in /etc/letsencrypt/live/shiken.com/cert.pem -noout -dates
次に有効期限を更新する。
scl enable python27 "/usr/local/src/certbot/certbot-auto renew --force-renew --webroot -w /var/www/html"
再び現在の有効期限を確認する。
openssl x509 -in /etc/letsencrypt/live/shiken.com/cert.pem -noout -dates
有効期限が変更されているなら、問題なく更新はできている。
有効期限が迫ると、有効期限が迫っていることの、連絡が来る。その時に上記のスクリプトで有効期限を更新してもよいが、メールを見なかったり、更新を忘れたりして失効してしまうことがある。それで、毎月決まった日に自動的に上記のコードを実行させるようにする。
cronは、スクリプトを定期実行させるためのプロセス(デーモン)である。次の記述で新しいスクリプトをcronに加えるこtができる。
crontab -e
5 0 1 * * scl enable python27 "/usr/local/src/certbot/certbot-auto renew --force-renew --webroot -w /var/www/html && /etc/init.d/httpd restart"
-e オプションをつけると、その下のスクリプトを加えることができる。
[分] [時] [日] [月] [曜日] [コマンド]の順に書くから、この場合は最初の5が分を表し、次の0が時を表し、次の1が日にちを表す。つまり、毎月の1日0時5分にscl enable python27 "/usr/local/src/certbot/certbot-auto renew --force-renew --webroot -w /var/www/html && /etc/init.d/httpd restart" を実行するということである。
crontab -r とオプションをつけると、cronの設定をすべて消去してしまう。キーボードでr と e は隣にあり、e を打つつもりで、うっかりr を打ちそのまま実行してしまうと、cronの設定がすべて消去され、大変なことになる。
それで、~/etc/cron.txt のようなファイルをつくり、このファイルに
5 0 1 * * scl enable python27 "/usr/local/src/certbot/certbot-auto renew --force-renew --webroot -w /var/www/html && /etc/init.d/httpd restart"
と記述し
crontab ~/etc/cron.txt
で~/etc/cron.txtに書かれたスクリプトをcronに加えることができる。この方が安全である。

参考サイト
https://www.netassist.ne.jp/blog/?p=464
https://www.websec-room.com/2016/10/01/2698
https://qiita.com/rita_cano_bika/items/f060eae591cd5c8f4a3a

作成日:2019年6月16日

ホームにもどる      「パソコンについて」にもどる