Перейти к содержимому
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.

    Извлеките ключ из сертификата

    Одна команда выдаёт открытый ключ SPKI в формате PEM, который ожидают команды с -pubin.

    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 как стандартный открытый ключ PEM с меткой BEGIN PUBLIC KEY (SPKI); в 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

Связанные ошибки

Открыть всю базу ошибок подписей