通勤時に以下記事を閲覧した。
gigazine.net
昨年末に存在を知って、何度か導入していたが、ついにベータ版から正式版をリリースした模様。
前職の頃からSSL証明書は高額で企業の確認など面倒なイメージがついており、無料で簡単に発行出来る証明書が出現したとなれば、恐らく証明書業者は顔を真っ赤にして毒を吐いている事であろう。と思っていたら以下記事を目にした。
SSL/TLS証明書無料化は進むか?~Let's Encryptに見る無料SSL/TLS証明書の台頭とその注意点~ | ブログ | SSL・電子証明書ならGMOグローバルサイン
顔真っ赤どころか、物凄く丁寧に説明されていて分かりやすかった。大雑把な区分として、SSL化するだけならLet's Encryptや低価格な「ドメイン型証明書」でOK。フィッシング詐欺防止なを目的とするならば、「企業認証型証明書」以上が必要だと。自サイトに必要なレベルの認証を考慮して導入する必要があるとの事だ。
Let's Encryptを導入
上記の目的で言えば、検証用サーバにSSL証明書を使いたいだけならば、Let's Encryptで問題は無さそうだ。折角なので、以前にCentOS6.7に導入した際の手順をメモっておく。導入は以下サイトを参考にしました。
blog.doizaki.com
Let's Encryptクライアントの導入
#git clone https://github.com/letsencrypt/letsencrypt Initialized empty Git repository in /usr/local/letsencrypt/.git/ remote: Counting objects: 34610, done. remote: Compressing objects: 100% (420/420), done. remote: Total 34610 (delta 151), reused 0 (delta 0), pack-reused 34170 Receiving objects: 100% (34610/34610), 9.41 MiB | 2.35 MiB/s, done. Resolving deltas: 100% (24458/24458), done.
python 2.7のインストール
まず現環境のpythonのバージョンを確認します。
# python --version Python 2.6.6
使用しているのはCentOS6.7なので、python古いです。腐ってます。Let's Encryptはpython2.7が必要です。Cent6で公式リポジトリから提供されているpythonは2.6なので、野良で拾ってくるでも良いのですが、環境を汚さないように、今回はSCL使って導入します。(SCLについてもそのうち記事にしたいです)
# yum install centos-release-SCL Loaded plugins: fastestmirror, security Setting up Install Process Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp Resolving Dependencies --> Running transaction check ---> Package centos-release-SCL.x86_64 10:6-5.el6.centos will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================================================================================================================================================ Package Arch Version Repository Size ================================================================================================================================================================================================================ Installing: centos-release-SCL x86_64 10:6-5.el6.centos extras 3.9 k Transaction Summary ================================================================================================================================================================================================================ Install 1 Package(s) Total download size: 3.9 k Installed size: 453 Is this ok [y/N]: y Downloading Packages: centos-release-SCL-6-5.el6.centos.x86_64.rpm | 3.9 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : 10:centos-release-SCL-6-5.el6.centos.x86_64 1/1 Verifying : 10:centos-release-SCL-6-5.el6.centos.x86_64 1/1 Installed: centos-release-SCL.x86_64 10:6-5.el6.centos Complete! #yum install python27 python27-scldevel … Complete!
それではここで、pythonのバージョンを確認します。
# scl enable python27 "python --version" Python 2.7.5
SCLで導入したパッケージを使う場合は、頭にscl enable xxxをして上げて下さい。面倒だったら、bash上で有効化してもオッケー。
# scl enable python27 bash # python --version Python 2.7.5
ここまで出来たら、Let's Encryptが動くか確認します。足りないパッケージあると勝手にインストールされるのでお気をつけて下さい。
# scl enable python27 "./letsencrypt/letsencrypt-auto --help" Bootstrapping dependencies for RedHat-based OSes... yum is /usr/bin/yum Loaded plugins: fastestmirror, security Setting up Install Process Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp …省略… Checking for new version... Creating virtual environment... Installing Python packages... Installation succeeded. Requesting root privileges to run letsencrypt... /root/.local/share/letsencrypt/bin/letsencrypt --help letsencrypt-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ... The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server renew Renew previously obtained certs that are near expiry revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins Choice of server plugins for obtaining and installing cert: --apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication (nginx support is experimental, buggy, and not installed by default) --webroot Place files in a server's webroot folder for authentication OR use different plugins to obtain (authenticate) the cert and then install it: --authenticator standalone --installer apache More detailed help: -h, --help [topic] print this message, or detailed help on a topic; the available topics are: all, automation, paths, security, testing, or any of the subcommands or plugins (certonly, install, nginx, apache, standalone, webroot, etc)
証明書の取得
letsencrypt-autoを実行する。引数には以下情報を
-w:ドキュメントルート
-d:ドメイン
-m:メールアドレス
--agree-tos:引数なし(利用規約に同意)
# scl enable python27 "./letsencrypt/letsencrypt-auto certonly --webroot -w /usr/local/apache/htdocs/ -d test.example.co.jp -m test@example.co.jp --agree-tos" …中略… Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
問題なければ、以下にファイルが作成される。
# ls /etc/letsencrypt/live/test.example.co.jp/ cert.pem chain.pem fullchain.pem privkey.pem
これらを証明書として指定した上げれば、証明書導入完了。激簡単です。
証明書の更新
90日で証明書の期限が切れるので、cronに自動更新を仕掛けます。apacheの再起動あるのでご注意を。
#crontab -e 00 05 01 * * scl enable python27 "/usr/local/letsencrypt/letsencrypt-auto renew --force-renew && /etc/init.d/httpd reload"
scl enable python27忘れるとエラー出るのでご注意を。