Railsアプリの CentOS7 + nginx 環境を 無料 の SSL 「Let’s Encrypt」でSSL化

Railsアプリのnginxを導入した、CentOS7 の環境で無料のSSL「Let’s Encrypt」の導入を試してみました。

★関連記事
CentOS7 + Apache2.4 を 無料 の SSL 「Let’s Encrypt」でSSL化
CentOS6 + Apache2 を無料のSSL「Let’s Encrypt」でSSL化

「Let’s Encrypt」の詳細や暗号強度などは上記のページで。

 

インストール

Let’s Encryptで使うクライアントツールはACMEプロトコルに対応したCertbotというクライアントが必要です。
http://jxck.hatenablog.com/entry/letsencrypt-acme

CentOS7ではApache用のCertbotクライアントは、EPELリポジトリからインストールすることができます。

以下ではEPELのリポジトリも導入していますが、設定済みの方は上の行は必要ありません。

 

尚、nginx.conf は unicorn と連動させるため以下のようになっています。

 

ここでcertbot コマンドを実行します。

 

nginx.confで設定した「root /var/local/アプリ名/public」をディレクトリに設定したので失敗しました。

「http://ドメイン名/.well-known/acme-challenge/PiUlQ4yn0tqiLyvFrK8BpInTMCTgcWJdtsjkE53AJk0」のページが上記のrootパスに置いたファイルで見えないと言われています。

確かにドキュメントルートは「http://ドメイン名/public」として見えますので上のコマンドではNGですね。

certbot コマンドで証明書ファイルを作る前提は以下になります。

  • 設定するSSLのドメインの名前で公開されている
  • コマンドで作成した「.well-known」というフォルダのファイルを見て正当性をチェックしている

 

ということで、nginx.confに以下を追記しnginxを再起動します。

 

こちらの状態でディレクトリを「/usr/share/nginx/html」に変えてcertbot コマンドを実行します。

 

無事成功しています。

SSLを有効にするため、nginx.conf を書き換えてnginxの再起動を行います。

 

自動更新の設定

最後に「Let’s Encrypt」では証明書は90日で切れてしまいますので、cron などで定期的なクライアントのインストールを実行します。

 

上記のコマンドで証明書の有効期限が30日以内になると、再インストールを行います。

こちらで設定は完了です。