OpenSSL не может загрузить открытый ключ

Попытка зашифровать текстовое сообщение через командную строку на OSX Yosomite 10.10.2

Созданная публика .pem ключ как это:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -t PKCS8 > id_rsa.pem

Если я пытаюсь зашифровать myMessage.txt

openssl rsautl -encrypt -inkey ~/.ssh/id_rsa.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt

я получил unable to load Public key

Если я тогда наберу:

openssl asn1parse -in id_rsa.pem

Возвращает: Error: offset too large

Но я понятия не имею, как это исправить. Что я должен изменить, чтобы это работало?

5 ответов

Решение

До сих пор не знаю, что пошло не так в моем вопросе, но нашел решение:

1) Создать ключ RSA:

$ openssl genrsa -out key.pem 1024 
$ openssl rsa -in key.pem -text -noout 

2) Сохраните открытый ключ в файле pub.pem:

$ openssl rsa -in key.pem -pubout -out pub.pem 
$ openssl rsa -in pub.pem -pubin -text -noout 

3) Зашифровать некоторые данные:

$ echo test test test > file.txt 
$ openssl rsautl -encrypt -inkey pub.pem -pubin -in file.txt -out file.bin 

4) Расшифровать зашифрованные данные:

$ openssl rsautl -decrypt -inkey key.pem -in file.bin 

Отлично работает

Спасибо Мареку Марколе за предоставление информации http://openssl.6102.n7.nabble.com/Re-Can-I-use-my-own-keys-with-openssl-for-RSA-enc-dec-td12506.html

Я столкнулся с этой проблемой также и думаю, что хороший совет здесь:

Как я могу преобразовать между двумя стилями формата открытого ключа, один "НАЧАЛО ПУБЛИЧНОГО КЛЮЧА RSA", другой "НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ"

Кажется, что команда шифрования OpenSSL хочет открытый ключ SSL вместо открытого ключа RSA.

Теперь мы знаем достаточно, чтобы настроить пример, чтобы он работал. Открытый ключ SSL может быть сгенерирован из открытого ключа RSA с

openssl rsa -in id_rsa.pem -RSAPublicKey_in -pubout > id_pub.pem

Затем можно выполнить этап шифрования с

openssl rsautl -encrypt -inkey id_pub.pem -pubin -in ~/Desktop/myMessage.txt -out ~/Desktop/encrypted.txt

Команда OpenSSL по умолчанию в MacOSX Yosemite на момент написания этой статьи выглядит как 0.9.8zg. Команда rsa в этой версии не поддерживает возможность запуска первой команды выше. Я работал над этим, установив OpenSSL 1.0.1p.

У меня была такая же проблема, когда я извлекал открытый ключ из сертификата.

openssl x509 -pubkey -noout -in cert.crt > pubKey.pem

После этого я хотел напечатать информацию о ключе с помощью команды ниже.

openssl rsa -text -pubin -in pubKey.pem

И получает ошибку: unable to load Public Key

Решение

Я открыл pubKey.pem в notepad++, и в меню " Кодирование" была выбрана LE BOM UCS-2. Поэтому я изменил его на кодировку UTF-8. Размер pubKey.pem после изменения кодировки составлял половину исходного. Тогда это работает как шарм.

Протестировано в Windows и powershell

Ваше первоначальное решение должно работать, у вас есть небольшая опечатка: чтобы указать формат ключа (PKCS8), используется параметр -m, а не параметр -t (он обозначает тип ключа: dsa, ecdsa, ed25519 или rsa). См. Справочную страницу ssh-keygen.

ssh-keygen -f ~ /.ssh / id_rsa.pub -e -m PKCS8> id_rsa.pem

Затем вы можете зашифровать, используя это:

openssl rsautl -encrypt -inkey ~ /.ssh / id_rsa.pem -pubin -in ~ / Desktop / myMessage.txt -out ~ / Desktop / encrypted.txt

И вы можете расшифровать, используя:

openssl rsautl -decrypt -inkey ~ /.ssh / id_rsa -in ~ / Desktop / encrypted.txt -out ~ / Desktop / decrypted.txt

Вы можете проверить разницу между исходными и расшифрованными файлами, используя текстовый редактор или эту команду diff:

diff ~ / Рабочий стол / myMessage.txt ~ / Рабочий стол / decrypted.txt

Фактически, команда openssl rsautl -encrypt ожидает открытый ключ с форматом кодировки "PEM PKCS8 public key", но ssh-keygen генерирует закрытый ключ в этом формате и открытый ключ в другом формате, адаптированном к файлу authorized_keys в~/.ssh каталог (вы можете открывать ключи в текстовом редакторе, чтобы увидеть разницу между форматами).

Мне пришлось бороться с этой темой на OSX (Ventura)

  • разрешения (неправильные разрешения, не удалось прочитать...)
  • неправильный формат (PEM/PKCS8 вместо «типа SSH»)

я пришел с этим решением

      # generate a PRIVATE KEY
openssl genpkey -algorithm RSA -aes-256-cbc -outform PEM -out private_key.pem -pkeyopt rsa_keygen_bits:2048
# create a passphrase made of 4 chars minimum

# SUDO ! change permissions to 600 at most
sudo chmod 600 private_key.pem
# but 400 should work and is event more secure
sudo chmod 400 private_key.pem

# SUDO again
# extract THE PUBLIC KEY in PKCS8 file format
sudo ssh-keygen -e -f private_key.pem -m PKCS8 > public_key.pem
# enter your passphrase

передайте открытый ключ тому, кто хочет защитить файл data.in.txt. Чтобы зашифровать его, он или она сделает следующее:

      # SUDO again
sudo openssl pkeyutl -encrypt -pubin -inkey public_key.pem -in data.in.txt -out data.enc.txt

Вы получаете зашифрованный файл (data.enc.txt) для расшифровки:

      # SUDO again
sudo openssl pkeyutl -decrypt -inkey private_key.pem -in data.enc.txt -out data.out.txt

# then you can read the confidential information
cat data.out.txt

вы можете сделать тот же метод, чтобы он/она извлекли свой открытый ключ, чтобы зашифровать ваш открытый ключ и защитить его перед отправкой.

Другие вопросы по тегам