以前から、無料のダイナミックDNS(DDNS)と非固定IPを自動更新してくれるDICE、それから無料のSSL証明書を発行してくれるLet’s Encryptを使って、自宅のCentOS 7で構築したWEBサーバーのSSL(HTTPS)化を試みていますが、いつも失敗に終わっていましたが、遂に無料ドメインの自動更新と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を更新する
取得した無料ドメインとMyDNS、Cronを使って、非固定な自宅サーバーの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):
内容はHTTPとHTTPSのアクセスを許可する範囲を選択するというもの。
以下翻訳。
- HTTPとHTTPSの両方のアクセスを許可する
- HTTPSのアクセスのみ許可(HTTPの場合はリダイレクト)
著者はHTTPS通信のみしか考えてないので「2」を選択しました。最後はこのように「IMPORTANT NOTES:~」が表示されれば完了です。
他の参考サイトでは、この後にNginxの設定ファイルにSSLの使用を明示したり、公開鍵と秘密鍵の場所を記載する場面が見られますが、自動で記載されていましたので、私の場合はこれで完了になります。
試してみると正常に動作しました。
インストーラーのバージョンが違うのでしょうか?
CronでSSL証明書の自動更新
過去の記事でも紹介しましたが、Let’s encryptのSSL証明書の有効期間は3ヶ月です。
毎回更新するのは面倒なので、Cronを使ってSSL証明書を自動更新します。
0 5 1 * * /path/to/letsencrypt/letsencrypt-auto -w [Nginxのルートディレクトリ] -d [ドメイン名] renew --force-renew && systemctl restart nginx
最後に
これでSSL化の手順は以上になります。
簡単過ぎましたね。
英語で良ければこちらがとても詳しかったですのでどうぞ。
ムフフッ!
さて、どうしてくれよう。
セキュアな環境ができたことだし、自分専用のオンラインストレージでも作ろうかな?
夢が広がりますね!
- Original:https://minory.org/nginx-ssl-cron.html
- Source:Minory
- Author:管理者