Я не уверен, что это причуда генерации ssh-ключей на macOS, но когда я использую ssh-keygen
для создания пары ключей, а затем добавляю пароль, я могу извлечь закрытый ключ, и у него нет заголовка с надписью ENCRYPTED
.
Когда я следую инструкциям, обычно файл начинается как:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
если он зашифрован, но у моего нет такого заголовка. Ключ просто запускается сразу. У меня спрашивают пароль, когда я хочу добавить его в клиент с помощью ssh-add
, но меня раздражает отсутствие заголовка ENCRYPTED. Это нормальное поведение на macos?
Руководства, которые вы прочитали, демонстрируют формат ключа, который OpenSSH ssh-keygen
использовал в то время. Это не означает, что это единственный формат или что он всегда будет одним и тем же форматом.
OpenSSH ранее использовал формат ключа PEM, но у него есть различные ограничения в том, как он обрабатывает шифрование, а также разные алгоритмы ключей. (Например, метод получения ключа слаб, и формат сначала не мог поддерживать ключи Ed25519.) Если вы видите BEGIN RSA PRIVATE KEY
(то же самое для ECDSA), это в формате PEM или PKCS#1 или «OpenSSL».
Программное обеспечение, связанное с TLS/SSL (например, инструмент openssl
), теперь чаще использует формат PKCS#8, который внешне очень похож, но сохраняет параметры шифрования как часть основной структуры, закодированной в Base64. Если вы видите заголовок BEGIN PRIVATE KEY
, значит он в формате PKCS#8 и openssl asn1parse -i
может его проверить.
В последних версиях OpenSSH используется собственный формат ключа «OpenSSH», среди прочего, чтобы избежать зависимости от OpenSSL (который ранее использовался для чтения/записи ключей в формате PEM и PKCS#8), а также для поддержки ключевых алгоритмов, которых не было в OpenSSL. в то время не поддерживался (в то время OID для Ed25519 еще не были назначены). Если вы видите заголовок BEGIN OPENSSH PRIVATE KEY
, он использует этот формат. Параметры шифрования снова сохраняются в основной части файла ключей; если вы декодируете его с помощью Base64, вы увидите слова «aes128-ctr bcrypt», если он был зашифрован, или «none none», если нет.