VPS間でのサーバ引っ越し : 2 バーチャルホスト設定と、SSL化

前回からの続き。

ドメインのDNS変更と、バーチャルホストの設定

先にバーチャルホストの設定から。
conf.d/配下にサイトごとに設定を行った。
まとめても良かったんだけど。

# vim /etc/httpd/conf.d/mydomain.com.conf

内容

<VirtualHost *:80>
    ServerName mydomain.com
    DocumentRoot "/var/www/mydomain.com/public_html"
    DirectoryIndex index.html index.php
    ErrorLog /var/log/httpd/mydomain.com_error_log
    CustomLog /var/log/httpd/mydomain.com_access_log combined
    AddDefaultCharset UTF-8
</VirtualHost>

次はSSL。

SSLの設定

無料のLets Encryptを使うことにします。
事前に少し調査。

Lets Encryptについて

参考:https://ssl.sakura.ad.jp/column/free-or-paid/

無料でも問題ないのか?

同じSSL証明書である以上、強度は同等らしい。

何故無料で運営できているのか?

Lets Encryptは寄付により運用できている。

無料であることのデメリットは?

フィッシングサイトなどで悪用される場合がある。このため永久的に暗号化を保証できるか微妙ではある。
90日で更新が必要。なので自動化が必要になる。
寄付なので、サービス終了が起こり得るリスクがある。

導入手順

基本はこれに従ってやればOK.
https://letsencrypt.jp/usage/

mod_sslの確認

このコマンドで、

# httpd -M

この表示があればOK.

ssl_module (shared)

443ポートの確認

iptableで開放されているか確認。

iptables -L

httpsの表示があればOK。

ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https

Certbot クライアント準備

Epelを有効に

yum install epel-release

certbot-autoをインストール

# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
# ./certbot-auto

./certbot-auto を実行することで、必要なパッケージがダウンロードされる。
その後自動的に対話式で証明書作成が始まる。
virtualhost設定を取得してドメインリストが表示されるので、該当のものを選択してEnter.

成功すると以下のような表示に。

Congratulations! You have successfully enabled xxxx.com~

pemファイルの格納場所や有効期限も記される。
pemは、以下にあるらしい。

/etc/letsencrypt/live/

オプションで、sslの設定ファイルも自動生成可能。
今回は生成した。

/etc/httpd/conf.d/mydomain.com-le-ssl.conf

で、アクセスしてみるのだが、
Virtualhostが反映されない。。。
いろいろ調べたところ、自動生成されるSSL用confファイルの、ここだった。。

<IfModule mod_ssl.c>
<VirtualHost *:443>
 
</VirtualHost>
</IfModule>

これを

#<IfModule mod_ssl.c>
<VirtualHost *:443>
 
</VirtualHost>
#</IfModule>

これでOK.
mod_sslは入っているはずなのだが、
どういう意味だったのだろう。。。

ラクしたはずが逆に時間を食うという好例。。

とにかく、これでSSL化はOK.
自動更新の設定だな。

自動更新設定

更新は、このコマンド一発でいけそう。

sudo /var/www/certbot-auto renew --post-hook "sudo service httpd restart"

Cert not yet due for renewal なので何も起こらないが、動作しているようだ。

あとはcronに設定して、様子を見る。

cronの実行確認

/etc/rc.d/init.d/crond status

cronの設定。
毎週月曜の0時に実行。
root権限で、

# crontab -e
00 00 * * 1 /var/www/certbot-auto renew --post-hook "sudo service httpd restart"

確認

# crontab -l
00 00 * * 1 /var/www/certbot-auto renew --post-hook "sudo service httpd restart"

これで自動化されるだろう。
メール飛ばす機能もつけたいがまた今度。

参考:https://qiita.com/takahiko/items/a08895550727b95b6c36