以前から、無料のSSL証明書を発行してくれるLet’s Encryptを使って、自宅サーバー(CentOS)で構築したWEBサーバーのSSL(HTTPS)化を試みていますが、いつも失敗に終わっていました。。
しかし、遂に無料ドメインの自動更新とSSL化に成功しました!
まずは、過去の記事を参照しながら、実現するために必要な材料を集めましょう。
作業前に必要な4つの準備
余談ですが、自宅サーバーの環境としては、無料のダイナミックDNS(DDNS)と、非固定IPを自動更新してくれるDICEを利用しています。
それでは、WEBサーバーをSSL化する前に、以下の4つを準備しておきましょう。
(GitやPHPのインストール等は割愛させていただきます)
1. CentOSにNginxをインストール
以下を参考にNginxをインストールすれば、特に問題ないと思います。
気をつけるのは[nginx.conf]の設定の[server_name]の箇所です。
SSL証明書を取得したいドメインを書いておきましょう。
1 |
server_name sampledomain.com; |
wwwも付けたい場合はスペース区切りです。
1 |
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]コマンドで取得して、Let’s Encryptのインストーラーを実行します。
正常にインストールされたかヘルプを実行して確認します。
1 2 3 |
git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt/ ./letsencrypt-auto --help |
正常にインストールできた場合には、Let’s Encryptのヘルプが表示されますが、表示されなかった場合の対処法はわかりません。
Let’s Encryptクライアントの実行
実行する際のオプションは参考にしたサイトによって異なり、何故かどれも上手く行かなかったので、オプションを最小限まで減らしています。
1 |
./letsencrypt-auto -w [Nginxのルートディレクトリ] -d [ドメイン名] |
実行例
1 |
./letsencrypt-auto -w /usr/share/nginx/html -d sampledomain.com |
wwwも一緒なら更に-dを追加してください。
1 |
./letsencrypt-auto -w /usr/share/nginx/html -d sampledomain.com -d www.sampledomain.com |
実行中も参考サイトとは異なり、利用規約に同意する(Agree)と言った内容が表示されず、代わりに以下のような問いがありました。
1 2 3 4 5 6 |
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の使用を明示したり、公開鍵と秘密鍵の場所を記載する場面が見られますが、自動で記載されていましたので、私の場合はこれで完了になります。
試してみると正常に動作しました。
Let’s Encryptのインストーラーのバージョンが違うのでしょうか?
CronでSSL証明書の自動更新
過去の記事でも紹介しましたが、Let’s encryptのSSL証明書の有効期間は3ヶ月です。
毎回更新するのは面倒なので、Cronを使ってSSL証明書を自動更新します。
1 |
0 5 1 * * /path/to/letsencrypt/letsencrypt-auto -w [Nginxのルートディレクトリ] -d [ドメイン名] renew --force-renew && systemctl restart nginx |
最後に
これでLet’s EncryptによるSSL化の手順は以上になります。
簡単過ぎましたね。
英語で良ければこちらがとても詳しかったですのでどうぞ。
ムフフッ!
さて、どうしてくれよう。
セキュアな環境ができたことだし、自分専用のオンラインストレージでも作ろうかな?
夢が広がりますね!
コメント
コメント一覧 (1件)
[…] Nginx+Let’s Encryptで自宅WEBサーバーをSSL(HTTP)化 […]