【KUSANAGI】DNS切り替え前に手動でSSL化を完了する方法

一般的なKUSANAGIコマンドによるSSL証明書の取得はDNS認証となるため、ドメインのDNS設定を切り替えた後でないと取得できません。

そこで、KUSANAGIコマンドと「SSLなうで取得したLet’s Encryptの証明書」を利用して、DNS切り替え前にサイトのSSL化を完了し、また自動更新を設定する方法を紹介します。

SSLなうでLet’s Encryptの証明書を取得

SSLなう」にアクセスして、ドメインのSSL証明書を取得します。

KUSANAGIでは、必ず「wwwあり」、「wwwなし」両方に対応したSSL証明書が必要です。

sslなうでwwwあり、なし両方の証明書を取得

ドメインの確認方法については、FTPなどでテキストファイルをアップロードする方法、またはDNSのTXTレコードを編集する方法があります。

この手順は他のサイトで詳しく解説されているのでそちらを参考にしてください。

ドメインの所有権を確認したら「RSA」を「生成」し、文字列をコピーします。

SSLなうで秘密鍵を生成

コピーした文字列をテキストエディタ(必ずプレーンテキストにすること)に貼り付け、「半角英字.pem」という名前で保存します。

これが鍵ファイルになります。この記事では「privatekey.pem」という名前を利用しています。

次に「証明書を発行」し、「サーバー証明書 + 中間証明書」が一緒になったものを同様にコピペし、「fullchain.pem」という名前で保存します。

サーバー証明書と中間証明書が一緒になったものを利用

鍵ファイルと証明書をサーバーにアップロードしSSL化を行う

PCのデスクトップに鍵ファイルと証明書ファイルがあると仮定して、サーバーに2つのファイルを転送します。

ここではサーバーの /home/kusanagi ディレクトリにファイルをアップロードしてみます。もちろんサーバーにログインしていないターミナルでコマンドを入力します。

$ scp -P 54321 -i ~/.ssh/kusanagi.pem /Users/ログインユーザー名/Desktop/fullchain.pem kusanagi@IPアドレス:/home/kusanagi

#アップロード成功
fullchain.pem                                 100% 
 
$ scp -P 54321 -i ~/.ssh/kusanagi.pem /Users/ログインユーザー名/Desktop/privatekey.pem kusanagi@IPアドレス:/home/kusanagi

#アップロード成功
privatekey.pem                                100% 

サーバーにログインし、2つのファイルをアップロードしたkusanagiディレクトリに移動。

ちゃんとファイルが転送されていることを確認します。

# cd /home/kusanagi

# ls -l
-rw-r--r--. 1 kusanagi kusanagi  fullchain.pem
-rw-r--r--. 1 kusanagi kusanagi  privatekey.pem

いよいよkusanagiコマンドでSSL化を行います。

# kusanagi ssl --cert fullchain.pem --key privatekey.pem

SSL証明書設定を変更しました。
nginx/httpd の設定を変更し、再起動しました。
完了しました。

サイトに「https://独自ドメイン」でアクセスし、SSL化されていることを確認します。

2019年現在、wwwあり、なしは初期設定で登録した方に自動でリダイレクトされるようになっているようです。

サイトのSSL化が確認できたらhttp → httpsの恒久リダイレクトを設定します。

# kusanagi ssl --https redirect

独自ドメイン 上のすべてのトラフィックを永久的にHTTPSにリダイレクトするよう設定します。
nginx/httpd の設定を変更し、再起動しました。
完了しました。

リダイレクトを設定すると、WordPressのドメイン設定も自動でhttpsに書き換わります。

すべての作業が終了したらkusanagiディレクトリ内にある2つのファイルを削除しておきます。

# rm privatekey.pem
rm: 通常ファイル `privatekey.pem' を削除しますか? yes

# rm fullchain.pem
rm: 通常ファイル `fullchain.pem' を削除しますか? yes

手動でアップロードしたSSL証明書の自動更新を設定

自動更新する方法1:KUSANAGIのSSL手動更新コマンドをcrontabで自動化する

この記事で紹介したSSL証明書をアップロードする方法では、「kusanagi ssl –emailコマンド」の時とは違うディレクトリにSSL証明書が格納される。

したがってkusanagiコマンドの自動更新設定が効かない可能性がある(この方法を利用したサイトが3ヶ月経過したことがないので未確認)。

実際にkusanagiコマンドを打ってみると以下のように出力され、対象ディレクトリが見つからないのでおそらくこのままだと更新に失敗すると思われる。

# kusanagi ssl --auto on

find: ‘/etc/letsencrypt/live’: そのようなファイルやディレクトリはありません
証明書の自動更新は既に有効です。何もしません。
完了しました。

手動更新コマンドだとちゃんとこの方法でアップロードされたSSL証明書が認識される。

#手動でSSL証明書を更新
#kusanagi update cert

完了しました。

そこでcrontabを設定して「kusanagiのLet’s Encrypt手動更新コマンド」を自動で実行してくれるように設定しておく。

#rootのcrontabを編集
# crontab -u root -e

新しくrootユーザーのcrontabが作成されるので、コマンドを記述。

Let’s Encryptは3ヶ月毎の更新で残り期限30日を切ると更新できるようになるので、更新コマンドの間隔が30日を超えないように任意で設定する。

あまり頻繁だとサーバーに負荷がかかるので、ここでは例として週1でコマンドを実行するように設定しておく。

#毎週日曜の21時にSSLの更新コマンドを実行
0 21 * * sun /usr/bin/kusanagi update cert

#毎週日曜の21時1分にkusanagi pluginの更新コマンドを実行
1 21 * * sun /usr/bin/kusanagi update plugin

#毎週日曜の21時2分にnginxを再起動
2 21 * * sun /usr/bin/kusanagi nginx

保存してエディタを終了すると、rootユーザーのcrontabが設定される。

no crontab for root - using an empty one
crontab: installing new crontab

設定を確認。

# crontab -l

0 21 * * sun /usr/bin/kusanagi update cert
1 21 * * sun /usr/bin/kusanagi update plugin
2 21 * * sun /usr/bin/kusanagi nginx

今記述した内容が表示されればOK。

最後にnginxを再起動しておく。

# kusanagi nginx

自動更新する方法2:certbotで新しい証明書をインストールし直す

KUSANAGIのSSL周りの設定はリリース当初から色々と仕様が変わっており、上記の方法も上手く機能しなくなる可能性がある。

そこでkusanagi以外でも利用できる、より一般的なSSL証明書の取得とインストールも紹介しておく。

なおこちらの場合、5分くらいnginxを停止させる必要がある点は要注意。

まずサーバー上でLet’s Encryptを扱うのに必要なcertbotをインストール。

#certbotをインストール
# yum install certbot

次にnginxを一時的に停止して、SSL証明書を取得する。

#nginxを停止
# nginx -s stop

#ssl証明書を取得
# certbot certonly --agree-tos --standalone

#メールアドレスを入力
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): 受信可能なメールアドレス

#noを選択
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
(Y)es/(N)o: 

#Congratulationsと表示されたら取得成功
Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/独自ドメイン/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/独自ドメイン/privkey.pem

上記のディレクトリに秘密鍵と証明書が取得されるので、設定ファイルをこれらのファイルパスに書き換える。

#nginx設定ファイルを編集
#vim  /etc/nginx/conf.d/プロファイル名_ssl.conf

5行目辺りから始まるSSL証明書のファイルパスを変更する。

#証明書と鍵のファイルパスを /etc/letsencrypt/live/独自ドメイン/〜 に書き換え
server {
       listen    443 ssl http2;
       server_name 独自ドメイン;

       ssl_certficate    /etc/letsencrypt/live/独自ドメイン/fullchain.pem;
       ssl_certificate_key    /etc/letsencrypt/live/独自ドメイン/privkey.pem;

#nginxを再起動
# nginx

ファイルパスの記述が正しければnginxがちゃんと起動して新しいSSL証明書が適用されたサイトが表示されるようになる。

エラーが出る場合は記述にスペルミスなどがあるはずなので要確認。

最後にkusanagiコマンドでSSL証明書の自動更新をオンにすれば完了。

#自動更新を有効にする
# kusanagi ssl --auto on

証明書の自動更新を有効にします
完了しました。

crontabを調べると自動更新が設定されているはず。

#crontab -l
07 03 * * 0 /usr/bin/kusanagi update cert

シェアする