手動で自分のドメインのSSL/TLS証明書を更新する

はじめに

こちらの雑記サイトはAzure App Service上で独自ドメイン「nya-n.net」で運営されていますが、SSL/TLS証明書が来月で切れるので更新しました。

利用サービス

  • ドメイン名はvalue domain管理ですが、DNSの名前解決にはAzure DNS Zoneを利用
  • *.nya-n.netのワイルドカード証明書は、digicertの「GeoTrust Cloud DV」を利用
    詳しく知りませんが、1つ目のドメインに対する証明書発行は無料っぽいです

証明書の更新

デジサートジャパンのサイトがいい感じに日本語で操作できるので私にはお勧め。ログインを済ませておきましょう

デジサート・ジャパン – Official Home Page

概要を見ると、棒グラフで有効期限切れまで30日を切っているところがあるので、クリックします。

「今すぐ更新する」をクリックします

「CSRをアップロード」を選び、ローカルPCに大事に保存してあるCSRのファイルを設定します。

証明書プランの期間は、何を選んでも証明書自身の有効期限は1年であるのと、どの期間を選んでも無料っぽかったのですが、とりあえず1年にしました。

こちらの証明書はドメイン認証なのですが、検証方法としては推奨であるDNS TXTを選択しておきます。

最後にサービス規約の同意にチェックを付けて、申請します。

オーダーの画面に遷移すると、お客様(お前)が次に実行するアクションとして「ドメイン名の利用権を証明する」をクリックします。

DNSのTXTレコードにこちらの表示されるランダムな文字列を設定する必要があるので、コピーしておきます。

Azure DNS ZoneへのTXTレコード追加

私は既に@.nya-n.netのTXTレコードにいくつかの値が設定されているので、すでにあるTXTレコードを選択します。

先ほどコピーしたランダムな文字列をTXTレコードに追加して、保存します。

これで、Azure DNS Zone側の設定は以上です。

証明書のダウンロード

しばらく待つと、オーダー一覧に先ほど申請した証明書が発行済みになります。こちらの「クイックビュー」をクリックします。

「証明書のダウンロード形式」で「crt (Apache/Linuxに最適)」を今回は選びました。

zipファイルがダウンロードされるので、解凍しておきます。

pfxファイルの作成

Azure WebappsにローカルPCの証明書をインポートする場合、PKCS#12形式(pfx)にする必要があるので、一時的にlinux上のワークディレクトリにプライベートキー(private.key)と先ほど受け取った公開鍵(star_nya-n_net.crt)をコピーしてきて、以下のコマンドで変換しました。

openssl pkcs12 -export -inkey private.key -in star_nya-n_net.crt -out star_nya-n_net.pfx

実行例は以下です。private.keyにもパスワード設定されているので、それを入力。その後pfxファイルにも新たにパスワード設定を行いました。

Azure Web Appsの証明書更新

まずは、証明書更新前の有効期間を確認しておきます。来月切れそうですね。

Azureポータルから該当のApp Serviceを開き、「TLS/SSLの設定」メニューから、「秘密キー証明書(.pfx)」のタブをクリック後、「+証明書のアップロード」をクリックします。

PFX証明書ファイルには先ほどopensslコマンドで作成したpfxファイルを、証明書のパスワードにもその時設定したパスワードを入力後、「アップロード」をクリックします。

アップロード直後には反映されないので、何度か「最新の情報に更新」をクリックすることで、一覧に追加した証明書の情報が現れます。この例ではサムプリントの先頭が「85」で始まるものが追加されたやつですね。
(「8B」ではじまるものが来月有効期限が切れる証明書)

続いて「バインド」タブをクリックして、すべてのホスト名にバインドされている証明書を新しいものに変更します。一覧から対象のホスト名を選択後、「TLS/SSLバインディング」画面のプルダウンメニューから先ほどアップロードした証明書(サムプリントの先頭が「85」のやつ)を選択後、「バインディングの追加」をクリックします。

環境によって異なると思いますが、私は「www.nya-n.net」「zakki.nya-n.net」をカスタムドメインとして登録しているので、こちらの二つの証明書新しいものに変更しました。

確認

特にApp Serviceの再起動をしなくても、しばらく待つとブラウザからも新しい有効期限の証明書に入れ替わったことが確認できました。

おわりに

個人環境なので、毎年こちらの作業を実施しているわけですけど、面倒くさくなってきたら色々自動化についても考えていきたいと思います。