Как преобразовать открытый ключ ssh-keygen в формат, который открывает функцию PEM_read_bio_RSA_PUBKEY ()?

У меня возникла проблема с созданием открытого ключа, который может использовать функция openssl PEM_read_bio_RSA_PUBKEY() . Я продолжаю получать ошибки.

Очевидно, я не могу просто использовать строку ASCII в файле ключа ssh-keygen <>.pub SubjectPublicKeyInfo как это есть в формате файла SSH, или, возможно, в структуре SubjectPublicKeyInfo .

Вот код кода ключа: ssh-keygen -t rsa -b 1024 -C "Test Key"

Я нашел конвертер в php в Интернете, который преобразует содержимое открытого ключа в формат строки base64 PEM ASCII. Однако функция все еще не нравится.

Документация Openssl гласит:

  1. «RSA_PUBKEY (), которая обрабатывает открытый ключ с использованием структуры EVP_PKEY"
  2. «Функции RSA_PUBKEY также обрабатывают открытый ключ RSA с использованием структуры RSA»

Как получить открытый ключ OpenSSH в любом формате, который будет использовать функция OpenSSL?

  • почему сообщение postfix smtp отключено?
  • Получить общее имя (CN) из сертификата SSL?
  • Как сканировать уязвимость с учетом черной дыры с помощью nmap от Ubuntu 12.04?
  • Ключевые слова конфигурации Apache / OpenSSL `SSLProtocol` против` SSLCipherSuite`
  • CentOS 6.6: версия OpenSSL
  • Отсутствует модуль AES-NI в Fedora
  • KEY_CONFIG указывает на неправильную версию openssl.cnf
  • Как проверить sslv2 с удаленного сервера?
  • 5 Solutions collect form web for “Как преобразовать открытый ключ ssh-keygen в формат, который открывает функцию PEM_read_bio_RSA_PUBKEY ()?”

    ОК!

    Поэтому я вошел в это мышление «Легко, я получил это». Оказывается, это намного больше, чем я думал.

    Итак, первая проблема заключается в том, что (согласно man-страницам OpenSSL (man 3 pem)), OpenSSL ожидает, что ключ RSA будет в формате PKCS # 1. Очевидно, что это не то, с чем работает ssh-keygen. У вас есть два варианта (от поиска).

    Если у вас есть OpenSSH v 5.6 или новее (я не на своем ноутбуке), вы можете запустить это:

     ssh-keygen -f key.pub -e -m pem 

    Более длинный способ сделать это состоит в том, чтобы разбить ваш SSH-ключ на его различные компоненты ( запись в блоге, в которой я нашел некоторые из них, обвиняет OpenSSH в том, что он «проприетарный», я предпочитаю называть его «уникальным»), а затем использовать библиотеку ASN1 поменять местами.

    К счастью для вас, кто-то написал код, чтобы сделать это:

    https://gist.github.com/1024558

    Подобно методу Амала Чаудхури ниже, это то, что сработало для меня. Мне нужно было создать файл pem из открытого ключа ssh, который я создал для моего SFTP-клиента (Cyberduck).

     openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem 

    Предполагая, что у вас есть закрытый ключ SSH id_rsa , вы можете извлечь из него открытый ключ следующим образом:

     openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem 

    Я понимаю, что ОП задал вопрос о преобразовании открытого ключа, так что это не совсем ответит на вопрос, однако я подумал, что это будет полезно для кого-то в любом случае.

    Также обратите внимание, что эта команда приводит к формату открытого ключа PEM, который, как правило, ожидает OpenSSL. С другой стороны, ответ Брайана приводит к файлу в формате RSAPublicKey, который не является нормальным форматом, ожидаемым OpenSSL (хотя более поздние версии могут, по-видимому, читать его через флаг -RSAPublicKey_in ). Для преобразования вы можете сделать это:

     openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem 

    Формат, который вы хотите, это то, что ssh-keygen вызывает PKCS8 . Таким образом, следующая команда выдаст желаемый результат:

     ssh-keygen -f key.pub -e -m pkcs8 

    Другой способ сделать это с другого сайта. Проводя это, если вам нужен другой метод. Работает очень хорошо. http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html

     openssl dsa -in ~/.ssh/id_dsa -outform pem > id_dsa.pem 
    Linux и Unix - лучшая ОС в мире.