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

この記事をシェアする

このエントリーをはてなブックマークに追加

関連記事

Meteoric Streamについて

管理人

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