Ключи SSH - это просто пары асимметричных ключей RSA, DSA или ECDSA. Такая пара ключей, сгенерированная OpenSSH, уже может использоваться OpenSSL и большинством других программ.
( .pub
Файл выводится ssh-keygen
в формате, специфичном для OpenSSH, но это не имеет значения, поскольку «закрытый» файл уже содержит как закрытые, так и открытые ключи.)
Другое программное обеспечение SSH может иметь свои собственные форматы хранения, такие как RFC 4716 или PPK PuTTY , но они хранят ту же информацию RSA / DSA / ECDSA.
X.509 (используется SSL, S / MIME) немного сложнее: «закрытый» ключ остается тем же, но вместо чистого файла открытого ключа у вас есть «сертификат» - структура ASN.1, содержащая открытый ключ, имя субъекта и эмитента, сроки действия. В сертификатах X.509 v3 будут присутствовать такие расширения, как «использование ключа» и «альтернативное имя субъекта». Весь сертификат подписывается ключом эмитента (или самозаверяющим, если отдельного эмитента нет).
Вы можете легко использовать файл «закрытого ключа» X.509 для SSH - OpenSSH даже использует тот же формат.
Вы можете создать сертификат X.509 из простой пары ключей, а затем самостоятельно подписать его, или вы можете создать «запрос сертификата» и отправить его для подписи в ЦС (центр сертификации).
Чтобы отобразить информацию в сертификате X.509, используйте:
certtool -i < foo.pem
certtool -i --inder < foo.crt
openssl x509 -noout -text < foo.pem
openssl x509 -noout -text -inform der < foo.crt
( certtool
является частью GnuTLS.)
Ключи OpenPGP (используемые GPG) являются наиболее сложными. То, что вы называете «ключом PGP» или «парой ключей PGP», представляет собой сложную структуру, называемую «сертификат OpenPGP», содержащую:
- один «первичный ключ» - пара асимметричных ключей, обычно используемая для подписи
- один или несколько «идентификаторов пользователя» - текстовые метки, обычно в форме «Имя <адрес электронной почты @»>
- по крайней мере один из них помечен как «основной идентификатор пользователя»
- для каждого идентификатора пользователя «самоподпись» - подпись под собственным первичным ключом
- для каждого идентификатора пользователя ноль или более «подписей» других пользователей
- пакеты самоподписи также содержат ваши предпочтительные алгоритмы (SHA-1, AES и т. д.)
- один или несколько «подразделов» - дополнительные пары ключей, первый обычно для шифрования
- для каждого подключа подпись по первичному ключу
- ноль или более «идентификаторов фотографий» - вложения в формате JPEG или PNG, содержащие ваше лицо
- подписан так же, как идентификаторы пользователей
- ноль или более сертификатов X.509
Все пары ключей имеют даты истечения срока действия и биты использования: подписывать данные, сертифицировать (подписывать) ключи, шифровать, аутентифицировать сервисы. Первичный ключ по умолчанию имеет биты "sign" и "certify", а первый подраздел должен "шифровать". Если вы добавите подраздел «аутентификация», вы можете использовать его gpg-agent
для аутентификации SSH.
Чтобы увидеть, что содержит ваш сертификат:
gpg --export joe@example.com | gpg -vv
gpg --export joe@example.com | certtool --pgp-certificate-info
( certtool
является частью GnuTLS.)
Сертификаты X.509 и связанные с ними закрытые ключи представлены в нескольких форматах:
DER - это двоичное кодирование структуры сертификата ASN.1. Такие файлы обычно имеют .crt
или .cer
расширения имени файла ( .der
менее распространено, но невидимо).
Файлы формата «PEM» содержат те же данные в кодировке DER, но дополнительно кодируются с использованием Base64 и между заголовками «BEGIN THIS» и «END THAT». Распространенным расширением имени файла является .pem
, хотя оба .crt
и .cer
иногда используются и здесь (но никогда .der
).
Для закрытых ключей, принадлежащих сертификатам, обычно используется формат «PEM» - Base64, окруженный заголовками «BEGIN PRIVATE KEY» (ключ в структуре PKCS # 7) или «BEGIN RSA (или DSA) PRIVATE KEY» (голый ключ, OpenSSL формат). Иногда ключ находится в отдельном .key
файле, иногда он связан с сертификатом.
PKCS # 12 и несколько более старый PFX - это зашифрованные контейнеры, в которых хранятся как сертификат, так и закрытый ключ (часто также сертификат эмитента). Этот формат используется большинством программного обеспечения при экспорте или «резервном копировании» сертификатов с закрытыми ключами.
Менее запутанная ситуация в OpenPGP: все данные следуют одному и тому же двоичному формату и могут быть «защищены» (закодированы с помощью Radix64 и между PEM-подобными заголовками).