После настройки двухфакторной аутентификации в домене на Windows pc, решил проверить а можно ли JaCarta использовать и для аутентификации в Linux среде. В качестве примера буду проводить тестирование на пользователи root, хотя по хорошему ему вообще надо закрыть удаленный доступ.
Итак имеем:
- Centos 7
- JaCarta PKI
- Единый клиент JaCarta
- Putty-cac 0.62
- MS CA (но можно использовать любой центр сертификации)
Заходим на Linux сервер и генерируем пару ключей (private и public):
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/id_rsa.
Your public key has been saved in /root/id_rsa.pub.
В каталоге /root видим два новых файлика id_rsa — приватный ключ и id_rsa.pub — публичный ключ.
Следующим шагом сгенерируем запрос на сертификат, используя приватный ключ и пароль от него:
# openssl req -new -out cert.req -key id_rsa
Enter pass phrase for id_rsa:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:RU
State or Province Name (full name) []:Moscow
Locality Name (eg, city) [Default City]:Moscow
Organization Name (eg, company) [Default Company Ltd]:Company
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:test.company.com
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Далее используя центр сертификации (Microsoft Certification Authority) сгенерируем сертификат используя запрос.
Для этого откроем web интерфейс MS CA:
http://ip_ms_ca/certsrv/certrqxt.asp
В поле «Сохраненный запрос» вставим текст из файла cert.req (можно открыть блокнотом), в качестве шаблона можно выбрать «Пользователь» или как использую я «Проверенный сеанс». И нажимаем кнопку «Выдать». После генерации сертификата, скачиваем его, выбрав «Base64 шифрование».
На следующем шаге соберем из ключа и сертификата pfx контейнер, для этого переместим полученный на прошлом шаге сертификат на Linux сервер и выполним команду:
# openssl pkcs12 -export -in linux.cer -inkey id_rsa -out linux.pfx
Enter pass phrase for id_rsa:
Enter Export Password:
Verifying - Enter Export Password:
Мы получили контейнер с сертификатом и ключом, который, используя Единый клиент JaCarta, импортируем на токен JaCarta.
Осталось настроить Linux сервер.
Для этого публичный ключ запишем в файл authorized_keys:
# cat id_rsa.pub >> ~/.ssh/authorized_keys
После этого все ключи, запросы и сертификаты с Linux сервера можно удалить, для работоспособности хватит только файла authorized_keys.
Теперь настроим права и откорректируем конфигурационный файл /etc/ssh/sshd_config:
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys
# vim /etc/ssh/sshd_config
В нем добавим следующие строки:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no # Эта строка запрещает вход по паролю, её лучше прописать, после того, как проверите работоспособность аутентификации по сертификату
# systemctl restart sshd
Настало время все проверить. В качестве клиента подключения по SSH будем использовать Putty-cac 0.62 — эта версия позволяет обращаться к токенам и использовать сертификаты, расположенные на нем. Использование сертификата настраивается в Connection -> SSH -> CAPI
В итоге у вас должен запроситься пин от токена:
P.s. Возможные проблемы:
1) У меня не работала такая схема аутентификации, если на токен до этого были записаны какие-либо сертификаты. Для меня решением стало записать этот сертификат первым на токен, а уже после записать остальные.
2) Возможно чем-то вам поможет руководство от Aladdin, но в нем много ошибок и неточностей!