妄想まとめ

研究とかWebセキュとか時事ネタとか。 @kazu1130_h

CentOS6.xでLet'sEncryptするお話

お久しぶりです、ひろたんです。

Let'sEncryptのPublicβ前日まではその事を覚えていたのですが、12/3に家に帰るとLet'sEncryptという概念を忘れる病に罹ってしまい、今日までEncryptすることが出来ませんでした。
ですが昨日、特効薬である祝日+年末休暇と繋げた5連有休を使ってようやく完治しました。

そこで今日はLe'sEncryptしたお話をします。


まずPython2.7系の実行環境を取ってきます。
最初、何も考えず野良リポジトリ突っ込んでpython2.7に切り上げたのですが、yumが死んだ上にtrushを使っている関係でrmまで死んで酷い目にあったので、
Redhat / CentOS 6.x users need python 2.7という記事にあった便利なSCLとかいうのを突っ込んでその上で実行する方針にしました。

yum install centos-release-SCL
yum install python27 python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv
scl enable python27 bash

因みに、一回でもpython2.6環境でletsencrypt-autoコマンドを走らせていると、.local/share/letsencrypt以下にその状態を保持して、python2.7に上げたのに何度やっても2.6のエラーが出る現象にぶち当たるので気をつけてください。

あと、そのままでやったら僕の環境ではSSL周りのWarningが出ました。

Updating letsencrypt and virtual environment dependencies...../root/.local/share/letsencrypt/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning

Security: Verified HTTPS with SSL/TLSを読めって言われたので、
言われたとおりに読んで以下のコマンドを叩きました。

wget "https://raw.github.com/pypa/pip/master/contrib/get-pip.py"
python get-pip.py
pip install pyopenssl ndg-httpsclient pyasn1

ついでに実行前にhttpdを止めておくと捗ります。
なんでも ACMEというLet'sEncryptを支えるプロトコルのために必要だとか。
証明書発行対象FQDNと実行しているサーバのFQDNがマッチしているか、トークン的なものを使って確認してるらしいです。

service httpd stop


あとはいつものようにgit cloneしてcdしてそれっぽいものを動かすだけです。何も引数を与えずにletsencrypt-autoを叩けば対話形式で実行されますが、証明書失効までの期間が短く、自動更新できるようコマンド一発でいけたほうが色々便利という情報を某社の凄い人が顔本上で言ってたので、今回はその実験もかねてコマンド一発方式でやりました。

git clone "https://github.com/letsencrypt/letsencrypt"
cd letsencrypt
./letsencrypt-auto --debug certonly --standalone -d 対象のFQDN -m 自分のメアド --agree-tos --renew-by-default

あとは

/etc/letsencrypt/live/対象のFQDN/fullchain.pem
を公開鍵として、
/etc/letsencrypt/live/対象のFQDN/privkey.pem
秘密鍵として、それぞれApacheに設定すればOKです。

SSLCertificateFile /etc/letsencrypt/live/対象のFQDN/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/対象のFQDN/privkey.pem

/etc/letsencrypt/archive/対象のFQDN/にも入ってますが、liveの方は更新されたものが自動で反映される(最新の物へのシンボリックリンク)ようになっているため、こちらのほうが色々捗ります。




無料で、しかもこんだけの手間でHTTPS化出来るとか夢のような仕組みですね。