DigiCertでTLS(SSL)証明書の更新

目次

はじめに

ずっと利用させてもらっているdigicertのTLS(SSL)証明書ですが、あと90日で切れると連絡が来たので更新した手順を記します。

毎年CSRやpfx作成の度にネット検索しているので、自分用のエントリです。

DigiCertのTLS証明書

以下に公開情報がありますが、Microsoft MVP受賞者にはサードパーティーからの特典として、DigiCertのTLS証明書が無料で発行されますのでこちらを有効活用します(ただしテスト、個人用途)

DigiCert MVP Program

今回はDigiCertの傘下となっているGeoTrust Cloud DVによるドメイン認証の証明書を取得します。

DigiCertのアカウントが有効になっていれば特にGeoTrustで別途アカウントを取得する必要はありません。

CSR(署名リクエスト)

まずはCertificate Signing Request(CSR)を準備します。

ここから先の操作は基本的にLinux(Ubuntu)上での操作となります。opensslが動作するOSであれば基本同じと考えます。

以前のCSR内容確認

前回どういった内容でCSRを作成したのかを確認します。

openssl req -in <以前作成した.csr> -text | head
$ openssl req -in server.csr -text | head
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = JP, ST = Kanagawa-ken, L = Kawasaki-shi, O = Yoshimasa Katakura, CN = *.nya-n.net, emailAddress = XXXX
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
    :   :   :   :

C, ST, L, O, CNなどは前回同様で良さそうですね。

CSRの新規作成

いつ作成したCSRだか判るようにファイル名にも今年の西暦を付けて以下の感じで実行しました。

openssl req -new -newkey rsa:2048 -nodes -keyout server-2023.key -out server-2023.csr
$ openssl req -new -newkey rsa:2048 -nodes -keyout server-2023.key -out server-2023.csr
:   :   :
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP (**入力**)
State or Province Name (full name) [Some-State]:Kanagawa-ken (**入力**)
Locality Name (eg, city) []:Kawasaki-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]: (**個人なので空**)
Organizational Unit Name (eg, section) []:Yoshimasa Katakura (**入力**)
Common Name (e.g. server FQDN or YOUR name) []:*.nya-n.net (**入力**)
Email Address []:xxxxx@xxx (**入力**)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: (**入力**)
An optional company name []: (**空**)

無事に申請用のCSRと共に、Server Keyファイルも作成されました。

$ ls -l
-rwxrwxrwx 1 yotan yotan  1110 Jul 31 08:37 server-2023.csr
-rwxrwxrwx 1 yotan yotan  1704 Jul 31 08:37 server-2023.key

CSRもそうですが、Keyファイルはパスワード設定をしたとはいえ、とても大切なファイルになるので取り扱いには注意しましょう。

って言っても、実際にはWebサーバを立てるときに必要になる元ネタになるので、サーバを立てるときに管理を厳重にしましょう。

この後、DigiCertに対してはCSRのみを送信します。

DigiCertへの更新申請

サインイン後、概要ブレードを見ると要更新が上がっているのでこちらをクリック。

overview

「今すぐ再発行する」をクリック。ここから行くと少しだけ入力項目を減らせるので。

update

先ほど作ったCSRをアップロードするか、テキストフィールドにペーストする。

コモンネーム(CN)には既に更新したいドメインの情報が入っているので修正不要。

csr

有効期限は業界推奨の1年(とちょっと)が設定されているので、そのままで。

ドメイン認証方式には「DNS TXT Record」による認証を行うことにします。

period

最後に「申請を送信」をクリックします。

ちょっとダイアログの意味が不明ですが、同じCNを使っているので既存の証明書は失効せずに新たなものを追加で作成してくれるようです。

send

ドメイン認証

オーダー一覧画面では、オーダーステータスが「再発行保留中」となります。

下の対処一覧を見ると、「ドメイン名の利用券を証明する」がありますので、ここをクリックします。

domain

DNSに指定したTXTレコードを追加せよとの事です。

txtrecord

私はAzure DNS ZoneでDNSレコードを管理していますので、Azure portalからゾーンを選びます。

私は既に@に対するTXTレコードが存在しているのでこちらの行をクリックします。新規の場合は「+レコードセット」から追加します。

azuredns

DigiCertから指定された文字列を入力して、「保存」をクリックします。

addtxt

無事発行されました。

申請日が開始日となり、そこから13ヵ月利用可能となります。

dekita

元々発行された証明書も失効はしていないのですが、成るべく早めにサーバ側のサーバ証明書ファイルも更新しましょう。

pemからpfxへの変換

DigiCertからメールでpemファイルが送られてきます。

こちらのpemファイルとCSR作成時に生成されたServer Keyファイルを一緒に指定して、pfxファイルを作成します。

openssl pkcs12 -export -in <送られてきたPEM>.pem -inkey <先に生成されたKEY>.key -out <出力するPFX>.pfx

無事できましたね。

$ openssl pkcs12 -export -in wildcard.nya-n.net.pem -inkey server-2023.key -out wildcard.nya-n
.net.pfx
Enter Export Password:
Verifying - Enter Export Password:
$ ls -l *.pfx
-rwxrwxrwx 1 yotan yotan 5475 Jul 31 11:27 wildcard.nya-n.net.pfx

pfx形式にすることで、Windowsの「証明書の管理」や「Azure Key Vault」へのインポートが楽になりますね。

dekita

おわりに

証明書の操作(特にpfxへの変換など)にWindowsの証明書管理を使って行う記事は良く見かけますが、今回はopensslだけを使ってCSR作成とpfx変換を行いました。

今はWindows Subsystem for Linux(WSL)もあるし、MacOSはそもそもUnixベースなので、opensslの利用のハードルは少ないと思います(GUIでないとNGな人には微妙か)。

また来年の今頃、私もこのエントリーを参考にTLS証明書の更新を行う事でしょうw