Node.jsで証明書チェーンの検証をおこなうソースコードを実装したので、メモとして残しておく。
調べ方がわるかったのか、実装サンプルを見つけるのに苦労したのでここにまとめておく。
見つけた実装サンプルはStack Overflowにありました。
ssl - Using node.js to verify a X509 certificate with CA cert - Stack Overflow
証明書チェーンとは
そもそも証明書チェーンとは、ある証明書はより上位の証明書によって署名され、その上位の証明書はさらにその上位の証明書によって署名されているという証明書がチェーンのように紐付いている関係を指します。
最も上位の証明書のことをルート証明書と呼び、それ以外の証明書は中間証明書またはサーバ証明書と呼びます。
イメージ図(証明書チェーンの働き - IBM Documentationより)
そして、証明書チェーンの検証とは正しく署名によるつながりができていることを検証する、ということです。
参考サイト
- サーバー証明書/中間CA証明書/ルート証明書の違いとは? | さくらのSSL
- 【初心者向け】サーバ証明書の検証の流れについてまとめてみた - サーバーワークスエンジニアブログ
- 証明書チェーンの働き - IBM Documentation
実装
実装には最初に記載したStack Overflowの記事を参考にして、node-forgeモジュールを利用します。
実装は以下のとおりです。
証明書A -> 証明書B -> ルート証明書
という順に上位の証明書になっていきます。
証明書の中身は実際に検証した証明書に変えてください。サンプルでは開発のときに試したFIDO Allianceの証明書を使っています。
おわり
ほとんどモジュールのおかげなので、深い理解はできていません。
しかし、実際に動くものがあると調べるポイントや理解しやすさがあがると思います。
最後に注意点ですが、実装例の証明書は有効期限や何らかの要因で使えなくなる可能性があります。
その際は、何かしら別の証明書チェーンの証明書に差し替えてお試しください。