УНИТе

Портал > Документация > Използване на ключове от PKCS#12 контейнери, X.509 сертификати и OpenPGP ключове в SSH под Linux и Mac OS X

Използване на ключове от PKCS#12 контейнери, X.509 сертификати и OpenPGP ключове в SSH под Linux и Mac OS X

Съдържание:

  1. Предварителна информация
  2. Конвертиране на двойката ключове от PKCS#12 контейнер във формата поддържан от OpenSSH клиента
  3. Извличане на публчния ключ от X.509 сертификат и форматирането му в OpenSSH формат
  4. Конвертиране на OpenPGP ключове в OpenSSH формат

 

1. Предварителна информация

За да се избегне генерирането на много двойки ключове от потребителя (което понякога е не само объркващо, но и води до занижени мерки за опазване на частния ключ), е добре една двойка ключове (частен и публичен), да се използва за много услуги (например SSH, Web-удостоверяване, подписване и криптиране на електронна поща и др). Този документ е в помощ на потребителите на HPC инфраструктурни портали и целта му е да им покаже как да използват своята X.509 или OpenPGP двойка за работа с SSH.

ВНИМАНИЕ! Този документ не покрива случая, в който частния ключ на двойката, на която е базиран сертификата, се намира съхранен върху хардуерен токен!

 

2. Конвертиране на двойката ключове от PKCS#12 контейнер във формата поддържан от OpenSSH клиента

Когато притежавате индивидуален/потребителски X.509 сертификат и той, частния ключ към него и веригата от сертификати, служеща за проверка на валидността на сертификата, са достъпни в PKCS#12 контейнер, може да използвате частния ключ като инструмент за удостоверяване в OpenSSH. За да извлечете частния ключ от PKCS#12 файла използвайте следния команден ред:

$ openssl pkcs12 -in user.p12 -out user_key.pem -nocerts

След като въведете правилната парола за декриптиране на съдържанието на файла user.p12, ще намерите ключа в user_key.pem. За да може правилно да идентифицирате алгоритъма, по който е създаден и работи ключа, ще се наложи да извлечете и X.509 сертификата:

$ openssl pkcs12 -in user.p12 -out user_crt.pem -clcerts -nokeys

На база на съдържанието във файла user_crt.pem ще определите алгоритъма на ключа по следния начин:

$ openssl x509 -text -in user_cert.pem | grep "Public Key Algorithm"

В зависимост от резултата на тази проверка, ще конвертирате специфично частния ключ от user_key.pem:

  • Public Key Algorithm: id-ecPublicKey

    В този случай алгоритъма на ключа е ECDSA и конвертирането трябва да се направи по следния начин:

    $ touch id_ecdsa && chmod 600 id_ecdsa
    $ openssl ec -aes256 -in admin_key.pem -out id_ecdsa
  • Public Key Algorithm: rsaEncryption

    В този случай алгоритъма на ключа е RSA и конвертирането трябва да се направи по следния начин:

    $ touch id_rsa && chmod 600 id_rsa
    $ openssl rsa -aes256 -in admin_key.pem -out id_rsa

Така полученият след конверсията файл (id_ecdsa или id_rsa), съдържащ ключа, може да се използва за OpenSSH удостоверяване и за целта той трябва да се постави в директория ~/.ssh (поддиректория .ssh на вашата домашна директория). Ако тези дирекория не е създадена все още, създайте я (направете това като потребител, все пак тази директория ще е част от вашата домашна директория, върху която вие имате права за достъп и собственост върху обектите в нея):

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

Публичният ключ, който трява да поставите в authorized_keys файла на отдалечените системи, достъп до които ще осъществявате на база на ключа, може да извлечете от файла user_crt.pem така:

$ openssl x509 -pubkey -in user_cert.pem -noout > pubkey.pem
$ ssh-keygen -i -m PKCS8 -f pubkey.pem > openssh.pub

След това копирайте съдържанието на openssh.pub в authorized_keys. Ако HPC инфраструктурата поддържа централизирано съхранение на публичните OpenSSH ключове, трябва да поставите ключа в съответното хранилище. Пример за такова може да видите в документа "Създаване на POSIX потребители в LDAP директорията на 389 директориен сървър под CentOS 7 и Scientific Linux 7 и управлението им".

ВНИМАНИЕ! Прочетете документа "Използване на SSH ключове за достъп до отдалечени SSH сървъри под Linux и Mac OS X" за да се запознаете с манипулацията на OpenSSH ключовете

 

3. Извличане на публчния ключ от X.509 сертификат и форматирането му в OpenSSH формат

Тази процедура е полезна в случая, в който потребител ви изпрати копие от своя X.509 сертификат и вие (като администратор) трябва да извлечете от него публичния ключ, да го форматирате като OpenSSH публичен ключ и да го поставите в съответния authorized_keys файл. Предоставеното ви копие на потребителския X.509 сертификат трябва да е под формата на файл, читаем от OpenSSL.

OpenSSL чете X.509 сертификати във формат "PEM" или "DER". За да определите в кой от тези два формата е копието на X.509 сертификата, който имате, използвайте "Приложение 1: Как да определим дали един X.509 сертификат е във формат PEM или DER" от документа "LDAP клиентски софтуер за достъп до LDAP сървъра". Ако е в "DER", конвертирайте го до "PEM" съгласно инструкциите в "Приложение 2: Конвертиране на X.509 сертификат от PEM в DER и обратно" от документа "LDAP клиентски софтуер за достъп до LDAP сървъра".

Ако файлът със сертификата в "PEM" формат е user_cert.pem, конвертирайте публичния ключ в него в OpenSSH формат по следния начин:

$ openssl x509 -pubkey -in user_cert.pem -noout > pubkey.pem
$ ssh-keygen -i -m PKCS8 -f pubkey.pem > openssh.pub

След това копирайте съдържанието на openssh.pub в authorized_keys. Ако HPC инфраструктурата поддържа централизирано съхранение на публичните OpenSSH ключове, трябва да поставите ключа в съответното хранилище. Пример за такова може да видите в документа "Създаване на POSIX потребители в LDAP директорията на 389 директориен сървър под CentOS 7 и Scientific Linux 7 и управлението им".

ВНИМАНИЕ! Прочетете документа "Използване на SSH ключове за достъп до отдалечени SSH сървъри под Linux и Mac OS X" за да се запознаете с манипулацията на OpenSSH ключовете

 

4. Конвертиране на OpenPGP ключове в OpenSSH формат

Конвертирането на OpenPGP частен ключ до OpenSSH формат изисква инсталирането на пакета monkeysphere. В CentOS 7 и Scientific Linux 7 този пакет се намира в хранилището EPEL. Инсталирането му ства по следния начин:

# yum install epel-release
# yum --enablerepo=epel install monkeysphere

Под Mac OS X може да го инсталирате с Homebrew.

За да видите списъка с частни OpenPGP ключове, които имате на разположение в локалното ви хранилище на GnuPG, изпълнете:

$ gpg --list-secret-keys

По подобен начин може да изведете и списъка с публични OpenPGP ключове:

$ gpg --list-keys

След като имате яснота кой точно ключ ще конвертирате, можете да пристъпите към процеса на конвертиране. Имате две възможности:

  • да конвертирате частен OpenPGP ключ в OpenSSH формат:

    В този случай имате вашия частен OpenPGP ключ и искате да направите така, че с него да може да влизате отдалечено в системи на база на протокола SSH. За да конвертирате ключа трябва да премахнете паролата, за която той е защитен, защото инструмента openpgp2ssh все още не работи с криптирани OpenPGP ключове. След като знаете ID на ключа (за примера по-долу то е 2670057E, но във вашия случай ще е друго), изпълнете:

    $ gpg --edit-key 2670057E

    В командния интерпретатор на GnuPG въведете командата passwd и натиснете "Enter":

    gpg> passwd
    gpg> save

    Сега вече може да пристъпите към конвертирането на ключа в OpenSSH формат (заменете ID на ключа 2670057E с вашия):

    $ gpg --export-secret-keys 2670057E | openpgp2ssh 2670057E | openssl rsa -aes-256-cbc -out id_rsa

    Ще бъде поискано да въведете (двукратно) паролата за криптиране на ключа, който ще бъде записан във файла id_rsa.

    След като завършите с тази операция, трябва отново да криптирате частния ключ в GnuPG хранилището, т.е. трябва да повторите тези операции:

    $ gpg --edit-key 2670057E
    gpg> passwd
    gpg> save
  • да конвертирате публичен OpenPGP ключ в OpenSSH формат:

    В този случай вие имате OpenPGP публичния ключ на доверен кореспондент (чиято идентичност сте проверили) и искате да му дадете достъп до HPC инфраструктурните портали на база на OpenSSH ключ. За да направите това трябва да извадите публичния RSA ключ от OpenPGP публичния ключ и да го конвертирате до OpenSSH формата, използвай за записите в съответния authorized_keys файл. Преди да започнете с конвертирането трябва да знаете ID на публичния ключ във вашето локално хранилище на GnuPG (предполага се, че копието от публичния OpenPGP ключ в инсталирано там). Ако това ID е 2670057E (при вас със сигурност ще е друго), конвертирането става така:

    $ gpg --export 2670057E | openpgp2ssh 2670057E > openssh.pub

    Поставете съдържанието от openssh.pub в authorized_keys на потребителя (този файл се намира на съответните портални сървъри). Покажете на потребителя как да конвертира частния си OpenPGP ключ в OpenSSH формат и да го използва за отдалечено влизане чрез SSH (както е описано по-горе).

 


Последна актуализация: 21 април 2019

2019 УНИТе, Веселин Колев