Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> サーバー関連 -> LAMP環境のさくらVPSに無料SSL「Let’s Encrypt」を導入する

LAMP環境のさくらVPSに無料SSL「Let’s Encrypt」を導入する

Cent OS 6.9のさくらVPSサーバーに、Let’s Encryptを導入しましたので、その時の作業メモです。

実際は、何度か詰まって試行錯誤したので、少し作業の順番が異なるかも知れません。

■全パッケージのアップデート

何気に、これ、重要です。やっておかないと、後で詰まりますw
sudo yum update

■Python2.7のインストール

Pythonがインストールされていない場合は、2.7以降をインストールします。
sudo yum install centos-release-scl
sudo yum install python27 python27-python-tools
sudo yum install dialog
sudo scl enable python27 bash
sudo scl enable python27 bashで、Linux上で使用されるPythonのバージョンを切り替える事が出来ます。
もし、既にインストールされているPythonのバージョンが2.6とかで、letsencrypt上でエラーが起きるなら、このコマンドを叩くと治る可能性があります。

■pipのインストール

pipが無いなら、インストールしておきます。
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
python get-pip.py

■letsencryptをgit経由でダウンロード

Git経由でダウンロードしておきます。
別にGitじゃなくても良いですけどね。
cd /var/
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

■初期設定

./certbot-auto
このコマンドを実行すると、必要なライブラリ等がすべてインストールされます。エラーが出る場合は、Pythonがインストールされているか、yum updateされているか、などを確認してください。

■証明書の発行

パターン3の方法が、圧倒的におすすめです。
パターン1(普通のやり方) :
./certbot-auto certonly -a standalone -d testdomain.com
これで上手くいけば、下記に証明書ファイルが生成されます。
ls /etc/letsencrypt/live/testdomain.com

備考:上記コマンドの場合、一度httpdを停止させてから処理を行う必要があります。下記のように、webroot認証を使えば、httpdを稼働していても問題なく処理出来ます。

パターン2(httpd停止不要の例) :
./certbot-auto certonly --webroot -w /var/www/html/ -d testdomain.com -m your@emailaddress.com

上記は、testdomain.comのドキュメントルートが/var/www/htmlの場合の例です。

2018/10/25追記: wwwありとなし両方に対応するwebroot証明書の例は下記の通りです。
パターン3(httpd停止不要かつ、wwwありなし対応) :
./certbot-auto certonly --webroot -w /var/www/html/ -d testdomain.com,www.testdomain.com -m your@emailaddress.com

■Apache上でVirtual Hostの設定

あとは、/etc/httpd/conf.d/ssl.confあたりに、VirtualHostの設定を追加します。
NameVirtualHost *:443

<VirtualHost *:443>
ServerAdmin test@testdomain.com
DocumentRoot /var/www/virtual/testdomain.com
ServerName test domain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/testdomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/testdomain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/testdomain.com/chain.pem
</VirtualHost>

■んで、ドキドキのサーバーリロード。

service httpd configtestで、あらかじめ設定が正しいか確認しておき、Syntax OKが出たら、service httpd reloadでApacheをリロードします。ドキドキの瞬間ですね。
これでエラーが出るなら、証明書のデータがおかしかったり、何かが足りないと思いますので、一旦ssl.confの内容を元に戻したり、コメントアウトしたりして、やり直しですw
ここで成功すれば、SSLの導入はひとまず完了です。

■cronで証明書を自動更新

これだけだと、3ヶ月後に証明書が失効してしまうので、cronで自動更新させます。
crontab -e

0 10 1,15 * * /var/letsencrypt/certbot-auto renew --agree-tos && service httpd reload
上記は、毎月1日と15日の10時に自動更新します。
月2回もやる必要はないですけどね。

■完成!!

おつかれさまでした! めっちゃめんどいですが、普通にLinux環境にSSLを入れる作業と、それほどめんどさは変わらないので、無料SSL、ありだと思います。

トラブルシューティング

Q: certbot-auto renewすると、「Bootstrapping dependencies for RedHat-based OSes...」みたいなエラーが起こって、証明書の更新ができない。
A: 現状、Python2系を使っているけど、Python3の使用が要求されてるっぽいので、Pythonインストールの環境変数をリセットしてから更新すると上手く行きました。処理の途中で、Python3系が自動的にインストールされます。
unset PYTHON_INSTALL_LAYOUT
service httpd stop
/var/letsencrypt/certbot-auto renew --force-renewal --agree-tos
service httpd start
Q: なぜか下記のようなDNSエラーが出て更新出来ない(DNSは正しく設定済み)
エラー内容:
Detail: dns :: DNS problem: query timed out looking up A for なんとかドメイン.com
To fix these errors, please make sure that your domain name was entered correctly and the DNS A/AAAA record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.

A: .htaccessで余計なリダイレクトが入っている可能性があります。
下記のような感じで、.well-known/をリダイレクト対象から外すと解決するかも。

RewriteEngine On
RewriteCond ほげほげ
RewriteCond %{REQUEST_URI} !(^/\.well-known/)
RewriteRule ほげほげ

この記事の最終更新日:2019/04/01
最初に記事を書いた日:2017/11/02

この記事をシェアする

このエントリーをはてなブックマークに追加
縺雁ー城▲縺遞シ縺弱↑繧峨昴う繝ウ繝医し繧、繝GetMoney!

関連記事

資料室のトップに戻る
Windowsソフト、iPhoneアプリ、ゲーム音楽素材の「Meteoric Stream」 -> 資料室 -> サーバー関連 -> LAMP環境のさくらVPSに無料SSL「Let’s Encrypt」を導入する
▲Top English