ConoHa VPSのKUSANAGIにワイルドカードSSL証明書を設定した手順とつまづいたポイントについて。 基本的には下記記事にしたがって設定しました。
kusanagi ConoHa環境でサブドメインを含むワイルドカードSSL証明書を取得・自動更新する方法 | Will feel Tips
kusanagi ConoHa環境でサブドメインを含むワイルドカードSSL証明書を取得・自動更新する方法 | Will feel Tips
(C)GMO Internet, Inc.
ichitaso.com
以下、上記記事に沿って補足する形で記述していきます。
certbotのインストールは省略
下記コマンドを試して、バージョンが出てくるか確認。出てきたらインストール済なので省略。
$ certbot --version
ConoHa VPSのDNSにはAレコードで_acme-challengeを設定できない
冒頭で参考記事として紹介した kusanagi ConoHa環境でサブドメインを含むワイルドカードSSL証明書を取得・自動更新する方法 | Will feel Tips の記事では
Conoha DNS設定にて「_acme-challenge」をAレコードでIPアドレスに向ける。
と紹介されていますが、現在ではConoHaのDNSに上記の設定をしようとすると「予期せぬエラーが発生しました。お問い合わせください」とエラー表示となります。
この点、ConoHaにメールで問い合わせてみたところ、下記回答を得られました。
お問い合わせの件につきまして、ConoHaのDNSの仕様上 名称(ホスト名)に[_]を含む文字列は登録ができかねるものと なっております。
ConoHa DNSの仕様により、Aレコードに _ を含む文字列が登録できないようになっているようです。後述しますが、TXTレコードには _acme-challengeとして _ を含む文字列を登録できたので、上記仕様はAレコード等のレコード種別に適用される仕様なのでしょう。
そこで、Aレコードを変更するDNS設定は省略して作業を続けます。実際に進めたところAレコードに _acme-challengeを登録する作業は不要で、後に説明するTXTレコードにのみ登録することで問題なくワイルドカードSSL証明書の取得と設定を行うことができました。
Aレコードでワイルドカード設定を行うときはCNAMEレコードはすべて空にする
上記に関連して、Aレコードにワイルドカードを設定するためには、CNAMEレコードを空にする必要があります。
ConoHaの仕様上、該当のドメインに何らかのCNAMEレコードが設定されている場合には、Aレコードにワイルドカード(*)を設定できないようになっているようです。
一旦、
CNAMEを全て消去 → Aレコードにワイルドカードを設定 → CNAMEにレコードを再設定
というようにしてください。
CNAMEの正確な動作は保証できませんが、恐らくAレコードのワイルドカードよりもCNAMEに設定した値が優先されます。(すべてのレコード値が別名で書き換えられるため)
let's encryptのコマンドを実行してからDNSにTXTレコードを追記
certbotコマンドに—manualオプションをつけ、ワイルドカードSSL証明書を取得
下記コマンドを実行。
$ certbot certonly --manual \
--preferred-challenges dns-01 \
--server https://acme-v02.api.letsencrypt.org/directory \
-m [あなたのEmailアドレス] \
-d [あなたのドメイン名] \
-d *.[あなたのドメイン名]
kusanagi ConoHa環境でサブドメインを含むワイルドカードSSL証明書を取得・自動更新する方法 | Will feel Tips
—preferred-challangesオプションでdns-01によるチャレンジをつけないと、HTTP-01によるチャレンジとなってしまい、HTTP-01による認証方法ではワイルドカード証明書は取得できません。
チャレンジのタイプ - Let's Encrypt - フリーな SSL/TLS 証明書
また、 2つ目の-dオプションでワイルドカード.ドメインのように指定しないと、ルートドメインのみ適用となり、ワイルドカードSSL証明書とはならないので注意。
あとは対話式で設定先ドメイン名を聞かれるので、答えていきます。
DNSのTXTレコードにワンタイムトークンを設置
すると下記の表示が。
Please deploy a DNS TXT record under the name
_acme-challenge.articul.world with the following value:
<text-token>
Before continuing, verify the record is deployed.
<text-token>の場所に表示された文字列を、DNSのTXTレコードの値に追加します。TXTレコードの名称は_acme-challengeにします。
DNSレコード変更は、各地のDNSサーバーに認識されるのに時間がかかるので、少し待ちます。(数分〜20分程度)
TXTレコードが反映されているかどうかは、新規ターミナルから下記コマンドを実行することで調べられます。
$ dig -t txt _acme-challenge.yourdomain.com @8.8.8.8
上記で返ってくる ANSWER SECTIONに、DNS上のTXTレコードに設定したワンタイムトークンが返ってきたらチャレンジを進めてOK。
Ubuntu+nginxの組み合わせで、Let's encryptのワイルドカード証明書取得 - Qiita
または、下記DNSチェックツールなどでもTXTレコードの内容が反映されているか確認できます。
DNS Checker - DNS Check Propagation Tool
DNS Checker - DNS Check Propagation Tool
DNS propagation is the time DNS changes take to be updated across the internet on the globe. It can take up to 72 hours to propagate worldwide. You can check your DNS propagation results from here. When you update your DNS records, it may take up to 72 hours for the changes to take effect.
dnschecker.org
TXTレコードを選択し、_acme-challange.yourdomain.comで調べられます。
DNSへのTXTレコード反映を確認したら、ターミナルでEnterしてチャレンジを実行。
なお、チャレンジに失敗した場合、再度発行されるトークン文字列は異なるものが発行されます。(ワンタイムトークン)
そのため、チャレンジに失敗した場合は新たに発行されたトークンの文字列でDNSのTXTレコードを書き換えてください。
残りは参考記事のとおりに進める。NginxのSSL設定ファイル変更
残りはkusanagi ConoHa環境でサブドメインを含むワイルドカードSSL証明書を取得・自動更新する方法 | Will feel Tips の記事のとおりに進めてください。
ただし、cert:に記述する鍵のパスは
/etc/letsencrypt/live/example.com/fullchain.pem
が正しいのでご注意。(リンク先の記事に一部誤りあり)
私の場合だと、vimで /etc/nginx/conf.d/[your-profile]_ssl.conf の内容を下記のように編集します。
1 #=======================================
2 # test-again.site SSL
3 #---------------------------------------
4
5 server {
6 listen 443 ssl http2;
7 server_name your.siteurl www.your.siteurl;
8
# 9行目と10行目を編集
9 ssl_certificate /etc/letsencrypt/live/[your.siteurl]/fullchain.pem;
10 ssl_certificate_key /etc/letsencrypt/live/[your.siteurl]/privkey.pem;
11 ssl_dhparam /etc/kusanagi.d/ssl/dhparam.key;
このあたりは先程certbotコマンド成功時にでてきたimportantの内容にパスが記述してありましたね。
Nginx設定ファイルの変更が完了したら、Nginxを再起動して反映させます。
$ nginx -t # Nginxの設定が正しく通っているかチェック
$ nginx -s reload
$ kusanagi restart
cronでcertbotを実行させ、SSL証明書を自動更新
certbot公式ドキュメントに記述があります。詳細は ConoHa VPSのAPI利用でワイルドカードSSL証明書を自動更新 を参照。
その他追加で設定したこと: 常時SSL化
KUSANAGIでは、下記コマンドでかんたんに常時SSL化の設定を行うことができます。
$ kusanagi ssl --https redirect <プロファイル名>
KUSANAGI の プロファイル設定を確認しLets Encrypt SSL証明書の更新を行う|プログラムメモ
なお、プロファイル名は下記コマンドで確認できます。
$ kusanagi status
参考: HTTP-01チャレンジでワンタイムトークンが書き込めないとき
下記コマンドでlet's encryptを実行。HTTP-01によるチャレンジを行います。
$ certbot certonly --manual
あとは対話式で設定先ドメイン名、登録メールアドレスを聞かれるので、答えていきます。
進めていくと
Create a file containing just this data:
9Fx.... (テキスト文字列)
And make it available on your web server at this URL:
http://yourdomain.com/.well-known/acme-challenge/9Fxk...文字列
のように表示されます。これは、「HTTP-01チャレンジ」と呼ばれる行為。
/etc/nginx/conf.d/_http.confに、下記設定を追加します。
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
}
Let's encrypt で 一時ファイルが作成できない時の対策 - Qiita
無料SSL証明書 Let's EncryptでサーバをHTTPS化する(Nginx + webrootプラグイン利用) - DevCast
下記コマンドでNginxの設定が正しいか確認できます。
$ nginx -t
WordPress