無料SSL証明書の Let's Encrypt が公開されたので実際に試してみた
はじめに
先日の記事でもご紹介しましたが、無料で SSL 証明書を発行してくれる Let’s Encrypt がパブリックベータとなり、誰でも利用することができるようになったので、CentOS 6.7 + Apache で SSL証明書の作成と設定を試してみました。
CentOS 6.7 では、何かとひっかかる部分が多かったので参考になれば幸いです。
Let’s Encrypt の特徴
Let’s Encrypt には以下の特徴があります(パブリックベータ時点)。
- 無料で SSL証明書を取得できる
- ルート証明書に承認されているから多くの環境で動作する
- 取得できる証明書はドメイン認証
- 証明書の期間は90日間。これは正式リリース後も変わらない。
- 60日での更新を推奨している
- ACME プロトコルにより証明書の自動更新を目指しているが、現時点では不完全
- 複数ドメインのSSL証明書に対応している
- ワイルドカード証明書には対応していない
- EVSSL証明書には対応していない
- メールアドレスがアカウントとなる
こんな感じでしょうか。もう少し細かい制約もありますが、バンバン使わない限り大丈夫だと思います。
事前準備
事前に以下のパッケージをインストールしておきます。
1 2 |
# yum -y install httpd openssl mod_ssl # yum -y install git |
Let’s Encypt Client のインストール
どこのディレクトリでも構わないので、以下のコマンドを実行して Let’s Encrypt Client をインストールします。
1 2 3 |
# git clone https://github.com/letsencrypt/letsencrypt # cd letsencrypt # ./letsencrypt-auto --help |
そうすると、依存するパッケージ(python等)もインストールしてくれます。
しかし、スクリプトを実行しようとすると以下のエラーが表示され、スクリプトが実行できません。
1 2 3 |
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 フラグをつけて以下のように実行すると、問題なく実行が完了しヘルプが表示されます。
1 |
# ./letsencrypt-auto --help --debug |
SSL証明書の作成と設定
Debian 系の OS だと、以下のコマンドを実行することで、SSL証明書の作成から設定まで Apache プラグインが自動で行ってくれるそうですが、CentOS ではいろいろ試しましたがうまくいきませんでした。もともとできないと書いてありますしね。
1 |
# ./letsencrypt-auto --apache |
できないものは仕方がないので、SSL証明書の作成のみ行うコマンドを実行します。今回は www.aruse.xyz というサーバーのSSL証明書を作成してみます。
事前に Apache を終了しておかないと途中でエラーが表示されるので、Apache を停止します。
1 |
# service httpd stop |
サーバー名を指定して、下記コマンドを実行します。
1 |
# ./letsencrypt-auto certonly --standalone -d www.aruse.xyz |
しかし、また以下のエラーが表示されます。
1 2 3 |
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 フラグをつけて実行します。
1 |
# ./letsencrypt-auto certonly --standalone -d www.aruse.xyz --debug |
すると、メールアドレスの入力が求められるので、メールアドレスを入力して、<了解>を選択します。
利用規約に同意するか聞かれるので、<Agree>を選択します。
インストールが続いて、最後に以下のメッセージが表示されれば SSL証明書の作成は完了です。
1 2 3 4 5 |
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証明書を作成したようなので、以下のように内容を確認します。
1 2 3 4 5 6 |
# cd /etc/letsencrypt/live/www.aruse.xyz/ # ls cert.pem #サーバ証明書 chain.pem #中間証明書 fullchain.pem #サーバ証明書+中間証明書 privkey.pem #サーバ秘密鍵 |
内容が分かったので、ssl.conf と httpd.conf を以下のように変更します。
1 2 3 4 |
#/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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#/etc/httpd/conf/httpd.conf NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerAdmin root@www.aruse.xyz DocumentRoot /var/www/html 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 /var/www/html ServerName www.aruse.xyz </VirtualHost> |
Apache を起動します。
1 |
# service httpd start |
この状態で、https://www.aruse.xyz にアクセスすると問題なくアクセスできることが確認できます。
SSL証明書のチェーンも問題ないことが分かります。
これで設定完了ですね。
期限切れが近づいた時は、パブリックベータ時点では同じ作業を繰り返します。正式版がリリースされたときにはSSL証明書更新の自動化が実現していると思います。
複数ドメインのSSL証明書
Let’s Encrypt の SSL証明書 は1つで複数ドメインに対応しているので、実際に行ってみましょう。
まず、Apache を終了しておきます。
1 |
# service httpd stop |
今度は、www.aruse.xyz と aruse.xyz のサーバー名に対応した SSL証明書を作成します。
下記コマンドを実行します。--degub フラグは最初からつけておきます。
1 2 |
# cd letsencrypt # ./letsencrypt-auto certonly --standalone -d www.aruse.xyz -d aruse.xyz --debug |
すると、www.aruse.xyz は既に作成されているけどいいのかと聞いてくるので、<Replace>を選択します。
SSL証明書の作成が終了すると、以下のメッセージが表示されます。今回はパスが変わらなかったようですね。
1 2 3 4 5 |
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 は今回変更はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#/etc/httpd/conf/httpd.conf NameVirtualHost *:80 NameVirtualHost *:443 <VirtualHost *:80> ServerAdmin root@www.aruse.xyz DocumentRoot /var/www/html 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 /var/www/html ServerName www.aruse.xyz </VirtualHost> <VirtualHost *:80> ServerAdmin root@aruse.xyz DocumentRoot /var/www/html 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 /var/www/html ServerName aruse.xyz </VirtualHost> |
Apache を起動します。
1 |
# service httpd start |
https://www.aruse.xyz と https://aruse.xyz にアクセスしてみます。
どちらも問題ありませんね。
おわりに
パブリックベータになった Let’s Encrypt で SSL証明書の作り方と設定方法を見てきましたが、いかがだったでしょうか。
マニュアルとはちょっと齟齬はありましたが、かなり簡単に SSL証明書が作成できるのが分かったのではないかと思います。
業務で行っているサービスでは、ユーザーに不安を与えてしまうかもしれませんが、個人や管理画面などで使うには、Let’s Encrypt はとてもよいのではないかと思います。例えば、phpMyAdmin の HTTPS 化なんて向いています。
情報はまだ英語でとっつきにくいかもしれませんが、試してみる価値はありますね。
スポンサーリンク
カテゴリー:ブログ
Twitter でも、いろんな情報を発信しています。@fnyaさんをフォロー