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

下記のQiitaの記事と同じです。Gistがうまく貼れなかったのでこちらにも転載。

Node.jsで証明書チェーンの検証をおこなう - Qiita


Node.jsで証明書チェーンの検証をおこなうソースコードを実装したので、メモとして残しておく。

調べ方がわるかったのか、実装サンプルを見つけるのに苦労したのでここにまとめておく。
見つけた実装サンプルはStack Overflowにありました。

ssl - Using node.js to verify a X509 certificate with CA cert - Stack Overflow

証明書チェーンとは

そもそも証明書チェーンとは、ある証明書はより上位の証明書によって署名され、その上位の証明書はさらにその上位の証明書によって署名されているという証明書がチェーンのように紐付いている関係を指します。 最も上位の証明書のことをルート証明書と呼び、それ以外の証明書は中間証明書またはサーバ証明書と呼びます。

イメージ図(証明書チェーンの働き - IBM Documentationより)

そして、証明書チェーンの検証とは正しく署名によるつながりができていることを検証する、ということです。

参考サイト

実装

実装には最初に記載したStack Overflowの記事を参考にして、node-forgeモジュールを利用します。

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

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

おわり

ほとんどモジュールのおかげなので、深い理解はできていません。 しかし、実際に動くものがあると調べるポイントや理解しやすさがあがると思います。

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