一般的なKUSANAGIコマンドによるSSL証明書の取得はDNS認証となるため、ドメインのDNS設定を切り替えた後でないと取得できません。
そこで、KUSANAGIコマンドと「SSLなうで取得したLet’s Encryptの証明書」を利用して、DNS切り替え前にサイトのSSL化を完了し、また自動更新を設定する方法を紹介します。
SSLなうでLet’s Encryptの証明書を取得
「SSLなう」にアクセスして、ドメインのSSL証明書を取得します。
KUSANAGIでは、必ず「wwwあり」、「wwwなし」両方に対応したSSL証明書が必要です。
ドメインの確認方法については、FTPなどでテキストファイルをアップロードする方法、またはDNSのTXTレコードを編集する方法があります。
この手順は他のサイトで詳しく解説されているのでそちらを参考にしてください。
ドメインの所有権を確認したら「RSA」を「生成」し、文字列をコピーします。
コピーした文字列をテキストエディタ(必ずプレーンテキストにすること)に貼り付け、「半角英字.pem」という名前で保存します。
これが鍵ファイルになります。この記事では「privatekey.pem」という名前を利用しています。
次に「証明書を発行」し、「サーバー証明書 + 中間証明書」が一緒になったものを同様にコピペし、「fullchain.pem」という名前で保存します。
鍵ファイルと証明書をサーバーにアップロードしSSL化を行う
PCのデスクトップに鍵ファイルと証明書ファイルがあると仮定して、サーバーに2つのファイルを転送します。
ここではサーバーの /home/kusanagi ディレクトリにファイルをアップロードしてみます。もちろんサーバーにログインしていないターミナルでコマンドを入力します。
- コマンド例
- 鍵認証有効化
- ポート番号 54321
- PCのデスクトップから転送
$ 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%
※ scpコマンドでポート番号を指定するとき「P」は大文字
サーバーにログインし、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証明書の自動更新を設定
自動更新の設定はDNS切り替え後に行ったほうが確実です。
自動更新する方法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
- KUSANAGI参考書籍
- ゼロからはじめるLinuxサーバー構築・運用ガイド 動かしながら学ぶWebサーバーの作り方
- 新しいLinuxの教科書
- 入門者のLinux 素朴な疑問を解消しながら学ぶ (ブルーバックス)
- 標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド
- プロに管理してもらえるKUSANAGI搭載サーバー
- カゴヤ・ジャパンの「WordPress専用サーバー」
- CloudGarage(旧エクスクラウド)の「WordPressプラン」