本文へスキップ
ecdsa.com
OpenSSL CLI (openssl pkey / ec / rsa / dgst)OpenSSL CLI

エラーメッセージ

unable to load Public Key

OpenSSL 1.1.x の文言で、現在も最もよく引用される形です。OpenSSL 3.0 は「Could not read key of Public Key from cert.pem」、OpenSSL 3.5 以降は「Could not find private key of Public Key from cert.pem」と出力します(3.0.2 と 3.6.4 で再現)。失敗の内容は同じで、文言だけが新しくなっています。

このエラーの意味

openssl コマンドは、指定されたファイルから公開鍵を読み込もうとしましたが、公開鍵と認識できるものを見つけられませんでした。ファイルは存在しており、問題はその内容です。別の種類のオブジェクト(証明書、秘密鍵、SSH 鍵)であるか、エンコーディングが違うか、そもそも鍵ではないかのいずれかです。

発生する理由

修正方法

  1. 1.

    証明書から鍵を取り出す

    1 つのコマンドで、-pubin を使うコマンドが想定する SPKI 形式の公開鍵 PEM を生成できます。

    bash
    openssl x509 -in cert.pem -pubkey -noout > pubkey.pem
    openssl pkey -pubin -in pubkey.pem -noout -text   # now loads
  2. 2.

    OpenSSH の鍵を PEM に変換する

    ssh-keygen は、authorized_keys 形式のエントリを標準的な BEGIN PUBLIC KEY(SPKI)の PEM としてエクスポートできます。ssh-keygen では、この形式を PKCS8 と呼びます。

    bash
    ssh-keygen -f id_ecdsa.pub -e -m pkcs8 > pubkey.pem
  3. 3.

    秘密鍵から公開鍵部分を導出する

    ファイルが実際には秘密鍵である場合は、-pubin を使わずに公開鍵を導出してください。

    bash
    openssl pkey -in private.pem -pubout -out pubkey.pem

関連するエラー

署名エラーデータベースをすべて見る