Nginx+Let’s Encryptで自宅WEBサーバーをSSL(HTTP)化

nginx-ssl-cron

以前から、無料ダイナミックDNSDDNS)と非固定IP自動更新してくれるDICE、それから無料SSL証明書を発行してくれるLet’s Encryptを使って、自宅CentOS 7で構築したWEBサーバーSSLHTTPS)化を試みていますが、いつも失敗に終わっていましたが、遂に無料ドメイン自動更新SSL化に成功しました!
まずは、過去の記事を参照しながら、実現するために必要な材料を集めましょう。

作業前に必要な4つの準備

自宅WEBサーバーSSL化する前に、以下の4つを準備しておきましょう。
(GitやPHPのインストール等は割愛させていただきます)

1. CentOS 7にNginxをインストール

以下を参考にインストールすれば、特に問題ないと思います。

気をつけるのはnginx.confの設定のserver_nameの箇所です。
SSL証明書を取得したいドメインを書いておきましょう。

server_name sampledomain.com;

wwwも付けたい場合はスペース区切りです。

server_name sampledomain.com www.sampledomain.com;

2. 無料ドメインを取得

まずは、以下の記事を参考に、Freenomから無料ドメインを取得しておきます。

3. 非固定IPを更新する

取得した無料ドメインMyDNSCronを使って、非固定な自宅サーバーIPアドレスを自動更新しておきます。

4. Let’s Encryptを知る

特に意識する必要はありませんが、無料SSL証明書Let’s Encrypt」について知っておきましょう。

自宅WEBサーバー(Nginx)をSSL化する

準備が完了したら、いよいよ本番です。
以下のサイトを引用していますが、上手く行かなかった所もあるので、自分なりに変更しています。

Let’s Encryptをインストールする

まずは、git cloneコマンドで取得してインストーラーを実行します。
正常にインストールされたかヘルプを実行して確認します。

git clone 
cd letsencrypt/
./letsencrypt-auto --help

正常にインストールできた場合には、Let’s Encryptのヘルプが表示されますが、表示されなかった場合の対処法はわかりません。

Let’s Encryptクライアントの実行

実行する際のオプションは参考にしたサイトによって異なり、何故かどれも上手く行かなかったので、オプションを最小限まで減らしています。

./letsencrypt-auto -w [Nginxのルートディレクトリ] -d [ドメイン名]

実行例

./letsencrypt-auto -w /usr/share/nginx/html -d sampledomain.com

wwwも一緒なら更に-dを追加してください。

./letsencrypt-auto -w /usr/share/nginx/html -d sampledomain.com -d www.sampledomain.com

実行中も参考サイトとは異なり、利用規約に同意する(Agree)と言った内容が表示されず、代わりに以下のような問いがありました。

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

内容はHTTPHTTPSのアクセスを許可する範囲を選択するというもの。
以下翻訳。

  • HTTPとHTTPSの両方のアクセスを許可する
  • HTTPSのアクセスのみ許可(HTTPの場合はリダイレクト)

著者はHTTPS通信のみしか考えてないので「2」を選択しました。最後はこのように「IMPORTANT NOTES:~」が表示されれば完了です。

IMPORTANT NOTES

他の参考サイトでは、この後にNginxの設定ファイルにSSLの使用を明示したり、公開鍵秘密鍵の場所を記載する場面が見られますが、自動で記載されていましたので、私の場合はこれで完了になります。
試してみると正常に動作しました。
インストーラーのバージョンが違うのでしょうか?

CronでSSL証明書の自動更新

過去の記事でも紹介しましたが、Let’s encryptSSL証明書有効期間3ヶ月です。
毎回更新するのは面倒なので、Cronを使ってSSL証明書自動更新します。

0 5 1 * * /path/to/letsencrypt/letsencrypt-auto -w [Nginxのルートディレクトリ] -d [ドメイン名] renew --force-renew && systemctl restart nginx

最後に

これでSSL化の手順は以上になります。
簡単過ぎましたね。
英語で良ければこちらがとても詳しかったですのでどうぞ。

ムフフッ!
さて、どうしてくれよう。
セキュアな環境ができたことだし、自分専用のオンラインストレージでも作ろうかな?
夢が広がりますね!


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA