Node.jsで証明書チェーンの検証をおこなう(jsrsasign編)

Node.jsでnode-forgeを使って証明書チェーンの検証をおこなう実装を前に書きました(Node.jsで証明書チェーンの検証をおこなう - Qiita)が、jsrsasignを使うことが多くなったのでその方法についてもメモしておく。

実装は例によってjsrsasignのGitHubリポジトリのissueに挙げられていたので、ちょっと改変して載せておきます。

Verify Certificate against a root Cert · Issue #176 · kjur/jsrsasign

実装

先に書いたように今回はjsrsasignを利用します(前回はnode-forgeモジュール)。

実装は以下のとおりです。

証明書A -> 証明書B -> ルート証明書という順に上位の証明書になっていきます。 証明書の中身は実際に検証した証明書に変えてください。サンプルでは開発のときに試したFIDO Allianceの証明書を使っています。

下にも同じコードを置きました。

nodejs-module-labo/verify-certificate-chain.js at main · s1r-J/nodejs-module-labo

おわり

jsrsasignのほうがX509証明書から拡張設定の情報を確認したり、JWSの検証ができたりと使いたい機能があって最近よく使っています。また、ドキュメント(jsrsasign JavaScript API Reference)が充実しています。

証明書の有効期限を確認するNotBeforeとNotAfterの返却値の形式がちょっと慣れていない形式(RFC5280で定義されている形式)なので戸惑いました。
RFC5280では時間をYYMMDDHHMMSSZという形式で表します。つまり、UTC時刻で2022年1月29日12時34分56秒は220129123456Zとなります。これについては、jsrsasignから使いやすいUNIX時刻(秒)に変換できるzulutosecというメソッドが用意されています。同じくミリ秒またはJSのDateオブジェクトに変換するメソッドも用意されています。

最後に前回と同じく注意点ですが、実装例の証明書は有効期限や何らかの要因で使えなくなる可能性があります。 その際は、何かしら別の証明書チェーンの証明書に差し替えてお試しください。