バッチファイルは「システムは指定されたレジストリ キーまたは値を見つけられませんでした」というメッセージで停止しますが、誰もが認証局が壊れたと考えます。そうではありません、少なくともまだ: スクリプトはソフトウェアを探している途中で失敗しており、Easy-RSA に鍵を扱うよう頼む前でした。この順序は重要です、つまり修復すべきは検索の問題であり、PKI は傍観者だということだからです。失敗した行を読むことが診断のすべてであり、どの回避策よりも短時間で済みます。

エラーは CA に触れる前に起きます

古い Easy-RSA 2 のバッチファイルは、レジストリに問い合わせて OpenSSL や OpenVPN のインストール先を特定し、見つけた内容から変数を設定します。問い合わせが何も返さない場合、証明書操作が実行される前にスクリプトは中断します。

したがって、レジストリ キーに関するメッセージはスクリプトの環境についての証拠であり、CA ディレクトリについての証拠ではありません。

二つのレジストリビュー、一つのバッチファイル

32 ビットのプロセスと 64 ビットのプロセスは異なるレジストリビューを見ることがあり、一方を前提とするバッチファイルはもう一方に存在するエントリを見落とす可能性があります。これらの読み取り専用の比較は、一部の古いスクリプトが使う旧キーの違いを示します:

reg query "HKLM\SOFTWARE\OpenVPN" /reg:32
reg query "HKLM\SOFTWARE\OpenVPN" /reg:64

Microsoft の reg query リファレンス がビューのセレクターを説明しています。失敗したスクリプトと同じコンテキストで両方を実行してください。ビューはプロセスの起動方法とフラグの両方に依存するためです。エントリが片方のビューにしかない場合は、何かを変更する前に、それが指すパスをインストール済みのツールと比較してください。存在しても古いインストール先を指すキーは、存在しないキーとは別の不具合です。

どちらのビューにもエントリがない場合、インストーラーがそれを作成したことはなく、値を手作業で作ってもツールは動きません。

/reg:64 を無条件に追加しないでください

魅力的な修正は、すべての問い合わせに 64 ビットのセレクターを付け足して先に進むことです。一部のインストールでは正しく、別の環境では何もないビューへスクリプトを送ってしまいます。

期待する値がどのビューにあるかを見てから、検索を変更してください。

発見は PKI の修復ではありません

このエラーは、CA 証明書、署名鍵、シリアルファイル、失効データベースが破損していることを証明しません。古いチュートリアルからコピーした clean-all を実行すると、まったく別のオブジェクト群を破壊したまま検索は壊れたままになります。二つの作業を頭の中でもチケットでも分けてください。後で証明書操作が失敗した場合は、それ自体の証拠で評価してください。

実験の前には必ず CA ディレクトリをバックアップしてください。読み取り専用だと確信している実験でも同じです。

Easy-RSA 3 への移行はマイグレーションです

保守された構成では、現在のパッケージ自身のランチャーと構成モデルを使うべきであり、Easy-RSA 3 は Easy-RSA 2 と同じバッチファイルのワークフローではありません。新しい PKI のクイックスタートは、既存の認証局のための移行手順ではありません。バージョンを変える前に、CA の素材と発行・失効の記録を保存し、そのバージョンのアップグレード手順に従ってください。ツール検出のエラーを消すために権威ディレクトリ内で代替 CA を初期化するのは、このリストで最悪の選択です。

バージョンの変更はプロジェクトであり、レジストリのエラーは半日です。

実際に解決する比較

四つのことを書き出して直接比較してください:

  • どのスクリプトが実行され、どの行が失敗したか。
  • その行がどのレジストリビューに問い合わせたか。
  • スクリプトがどの実行ファイルのパスを期待していたか。
  • 実際にマシンにあるのはどのインストールか。

この四つが一致すればエラーは消え、残った証明書の問題は CA のせいにするのではなく、それ自体の証拠で読むことができます。

関連記事