Jelastic 環境でLet's Encrypt SSLをセットアップするにはどうすればよいですか?
1 に答える
今のところ、Letsencrypt SSLはJelastic クラウドのApache Web サーバーにインストールできます。次の手順を実行するには、root としてログインする必要があります。
Letsencrypt クライアントをインストールして SSL 証明書を生成する前に、インスタンスに 2 つの依存関係をインストールする必要があります。
- EPEL (エンタープライズ Linux 用の追加パッケージ) リポジトリをインストールします。
yum -y install epel-release git bc
rpm -ivh https://downloads.hpdd.intel.com/public/e2fsprogs/1.42.12.wc1/el7/RPMS/x86_64/libcom_err-devel-1.42.12.wc1-4.el7.centos.x86_64.rpm
- Unix システムにサードパーティ製ソフトウェアを配置するための標準ディレクトリである /opt の下に Let's Encrypt リポジトリのクローン
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
を作成します。これにより、公式の Let's Encrypt リポジトリのローカル コピーが /opt/letsencrypt の下に作成されます。
Let's Encrypt クライアントを使用して SSL 証明書を生成するのは非常に簡単です。クライアントは、パラメーターとして指定されたドメインに対して有効な新しい SSL 証明書を自動的に取得してインストールします。
- letsencrypt ディレクトリにアクセスします。
cd /opt/letsencrypt ;
- 対話型インストールを実行し、単一のドメインのみをカバーする証明書を取得するには、letsencrypt-auto コマンドを次のように実行します。
./letsencrypt-auto --apache -d example.com
複数のドメインまたはサブドメインに対して有効な単一の証明書をインストールする場合は、それらを追加パラメーターとしてコマンドに渡すことができます。パラメータのリストの最初のドメイン名は、Let's Encrypt が証明書を作成するために使用するベース ドメインになります。そのため、リストの最初にベア トップレベル ドメイン名を渡し、その後に追加のサブドメインを渡すことをお勧めします。またはエイリアス:
./letsencrypt-auto certonly -d yourdomain.com -d www.yourdomain.com --email youremail@dot.com --webroot -w /var/www/webroot/ROOT --agree-tos
- /etc/httpd/conf.d/modules.confファイルの「LoadModule ssl_module modules/mod_ssl.so」のコメントを外します。
- /etc/httpd/conf.d/ssl.confファイルを編集します。
Listen *:443
<VirtualHost *:443>
DocumentRoot /var/www/webroot/ROOT
ErrorLog /var/log/httpd/ssl-error.log
CustomLog /var/log/httpd/ssl-access.log combined
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLOptions +StrictRequire
# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
`
最初に証明書をインストールするときに複数のドメイン名を指定した場合は、更新コマンドに同じドメインのリストを再度渡す必要があります。そうしないと、Let's Encrypt クライアントは既存の証明書を更新する代わりに新しい証明書を生成します。
証明書が古くならないようにする実用的な方法は、更新要求を自動的に処理する cron ジョブを作成することです。
このプロセスを容易にするために、提供されたドメインの証明書の有効期限を確認し、有効期限が 30 日以内になったら更新を要求するシェル スクリプトを使用します。スクリプトは、週に 1 回実行するようにスケジュールされます。このように、cron ジョブが失敗した場合でも、毎週再試行するための 30 日間のウィンドウがあります。
- スクリプトをダウンロードして実行可能にします。スクリプトをダウンロードする前に、スクリプトの内容を自由に確認してください。
curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew-centos
chmod +x /usr/local/sbin/le-renew
le-renew スクリプトは、更新する証明書に関連付けられたベース ドメイン名を引数として受け取ります。クライアントによって生成された証明書を保持するディレクトリである /etc/letsencrypt/live 内の内容を調べることで、Let's Encrypt によってベース ドメイン名として使用されたドメインを確認できます。
- crontab を編集して、このコマンドを毎週実行する新しいジョブを作成します。root ユーザーの crontab を編集するには、次を実行します。
sudo crontab -e
次の内容をすべて 1 行に含めます。
0 0 * * * /usr/local/sbin/le-renew yourdomain.com www.yourdomain.com >> /var/log/le-renew.log
- 保存して終了。これにより、毎週月曜日の午前 2 時 30 分に le-renew コマンドを実行する新しい cron ジョブが作成されます。コマンドによって生成された出力は、/var/log/le-renewal.log にあるログ ファイルにパイプされます。
ルート権限がない場合は、選択したホスティング プロバイダーのサポート チームまでお気軽にお問い合わせください(Jelastic ダッシュボードの右上隅にある [ヘルプ] > [サポートに連絡] をクリックします)。
頑張って、良い一日を。