はじめに
2016年4月13日追記
Let’s Encript の正式版がリリースされました。若干変更があるので、詳しくは下記記事を参照してください。
——
先日の記事でもご紹介しましたが、無料で SSL 証明書を発行してくれる Let’s Encrypt がパブリックベータとなり、誰でも利用することができるようになったので、CentOS 6.7 + Apache で SSL証明書の作成と設定を試してみました。
CentOS 6.7 では、何かとひっかかる部分が多かったので参考になれば幸いです。
Let’s Encrypt の特徴
Let’s Encrypt には以下の特徴があります(パブリックベータ時点)。
- 無料で SSL証明書を取得できる
- ルート証明書に承認されているから多くの環境で動作する
- 取得できる証明書はドメイン認証
- 証明書の期間は90日間。これは正式リリース後も変わらない。
- 60日での更新を推奨している
- ACME プロトコルにより証明書の自動更新を目指しているが、現時点では不完全
- 複数ドメインのSSL証明書に対応している
- ワイルドカード証明書には対応していない
- EVSSL証明書には対応していない
- メールアドレスがアカウントとなる
こんな感じでしょうか。もう少し細かい制約もありますが、バンバン使わない限り大丈夫だと思います。
事前準備
事前に以下のパッケージをインストールしておきます。
# yum -y install httpd openssl mod_ssl # yum -y install git
Let’s Encypt Client のインストール
どこのディレクトリでも構わないので、以下のコマンドを実行して Let’s Encrypt Client をインストールします。
# git clone https://github.com/letsencrypt/letsencrypt # cd letsencrypt # ./letsencrypt-auto --help
そうすると、依存するパッケージ(python等)もインストールしてくれます。
しかし、スクリプトを実行しようとすると以下のエラーが表示され、スクリプトが実行できません。
WARNING: Python 2.6 support is very experimental at present... if you would like to work on improving it, please ensure you have backups and then run this script again with the --debug flag!
エラーメッセージにあるように、–debug フラグをつけて以下のように実行すると、問題なく実行が完了しヘルプが表示されます。
# ./letsencrypt-auto --help --debug
SSL証明書の作成と設定
Debian 系の OS だと、以下のコマンドを実行することで、SSL証明書の作成から設定まで Apache プラグインが自動で行ってくれるそうですが、CentOS ではいろいろ試しましたがうまくいきませんでした。もともとできないと書いてありますしね。
# ./letsencrypt-auto --apache
できないものは仕方がないので、SSL証明書の作成のみ行うコマンドを実行します。今回は www.aruse.xyz というサーバーのSSL証明書を作成してみます。
事前に Apache を終了しておかないと途中でエラーが表示されるので、Apache を停止します。
# service httpd stop
サーバー名を指定して、下記コマンドを実行します。
# ./letsencrypt-auto certonly --standalone -d www.aruse.xyz
しかし、また以下のエラーが表示されます。
WARNING: Python 2.6 support is very experimental at present... if you would like to work on improving it, please ensure you have backups and then run this script again with the --debug flag!
仕方がないので、先ほどと同じように —debug フラグをつけて実行します。
# ./letsencrypt-auto certonly --standalone -d www.aruse.xyz --debug
すると、メールアドレスの入力が求められるので、メールアドレスを入力して、<了解>を選択します。
利用規約に同意するか聞かれるので、<Agree>を選択します。
インストールが続いて、最後に以下のメッセージが表示されれば SSL証明書の作成は完了です。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.aruse.xyz/fullchain.pem. Your cert will expire on 2016-03-03. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
メッセージからすると、/etc/letsencrypt/live/www.aruse.xyz/ にSSL証明書を作成したようなので、以下のように内容を確認します。
# cd /etc/letsencrypt/live/www.aruse.xyz/ # ls cert.pem #サーバ証明書 chain.pem #中間証明書 fullchain.pem #サーバ証明書+中間証明書 privkey.pem #サーバ秘密鍵
内容が分かったので、ssl.conf と httpd.conf を以下のように変更します。
#/etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/letsencrypt/live/www.aruse.xyz/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.aruse.xyz/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.aruse.xyz/chain.pem
#/etc/httpd/conf/httpd.conf NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerAdmin root@www.aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName www.aruse.xyz </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.aruse.xyz/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.aruse.xyz/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.aruse.xyz/chain.pem ServerAdmin root@www.aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName www.aruse.xyz </VirtualHost>
Apache を起動します。
# service httpd start
この状態で、https://www.aruse.xyz にアクセスすると問題なくアクセスできることが確認できます。
SSL証明書のチェーンも問題ないことが分かります。
これで設定完了ですね。
期限切れが近づいた時は、パブリックベータ時点では同じ作業を繰り返します。正式版がリリースされたときにはSSL証明書更新の自動化が実現していると思います。
複数ドメインのSSL証明書
Let’s Encrypt の SSL証明書 は1つで複数ドメインに対応しているので、実際に行ってみましょう。
まず、Apache を終了しておきます。
# service httpd stop
今度は、www.aruse.xyz と aruse.xyz のサーバー名に対応した SSL証明書を作成します。
下記コマンドを実行します。–degub フラグは最初からつけておきます。
# cd letsencrypt # ./letsencrypt-auto certonly --standalone -d www.aruse.xyz -d aruse.xyz --debug
すると、www.aruse.xyz は既に作成されているけどいいのかと聞いてくるので、<Replace>を選択します。
SSL証明書の作成が終了すると、以下のメッセージが表示されます。今回はパスが変わらなかったようですね。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.aruse.xyz/fullchain.pem. Your cert will expire on 2016-03-03. To obtain a new version of the certificate in the future, simply run Let's Encrypt again.
httpd.conf は以下のように設定します。ssl.conf は今回変更はありません。
#/etc/httpd/conf/httpd.conf NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerAdmin root@www.aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName www.aruse.xyz </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.aruse.xyz/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.aruse.xyz/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.aruse.xyz/chain.pem ServerAdmin root@www.aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName www.aruse.xyz </VirtualHost> <VirtualHost *:80> ServerAdmin root@aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName aruse.xyz </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.aruse.xyz/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.aruse.xyz/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.aruse.xyz/chain.pem ServerAdmin root@aruse.xyz DocumentRoot /home/c3008847/public_html/websec-room.com ServerName aruse.xyz </VirtualHost>
Apache を起動します。
# service httpd start
どちらも問題ありませんね。
おわりに
パブリックベータになった Let’s Encrypt で SSL証明書の作り方と設定方法を見てきましたが、いかがだったでしょうか。
マニュアルとはちょっと齟齬はありましたが、かなり簡単に SSL証明書が作成できるのが分かったのではないかと思います。
業務で行っているサービスでは、ユーザーに不安を与えてしまうかもしれませんが、個人や管理画面などで使うには、Let’s Encrypt はとてもよいのではないかと思います。例えば、phpMyAdmin の HTTPS 化なんて向いています。
情報はまだ英語でとっつきにくいかもしれませんが、試してみる価値はありますね。
コメント