跳到主要内容
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.

    从证书中提取密钥

    一条命令就能生成 -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

相关错误

浏览完整的签名错误库