If You’re Not Using SSH Certificates You’re Doing SSH Wrong | Smallstep Blog

If You're Not Using SSH Certificates You're Doing SSH Wrong | Smallstep Blog Сертификаты

An ideal ssh flow

SSH certificate authentication is the foundation of what I think is the ideal SSH flow.

Certificate authentication

Certificate authentication eliminates key approval and distribution. Instead of scattering public keys across static files, you bind a public key to a name with a certificate. A certificate is just a data structure that includes a public key, name, and ancillary data like an expiration date and permissions. The data structure is signed by a certificate authority (CA).

Certificate authentication improves operability

Eliminating key approval and distribution has immediate operational benefits. You’re no longer wasting ops cycles on mundane key management tasks, and you eliminate any ongoing costs associated with monitoring and maintaining homegrown machinery for adding, removing, synchronizing, and auditing static public key files across your fleet.

Certificate authentication improves security

While the SSH protocol itself is secure, public key authentication encourages a bunch of bad security practices and makes good security hygiene hard to achieve.

With public key authentication, keys are trusted permanently. A compromised private key or illegitimate key binding may go unnoticed or unreported for a long time. Key management oversight (e.g., forgetting to remove an ex-employee’s public keys from hosts) results in SSH failing open: unauthorized access without end.

Certificate authentication improves usability

With public key authentication, when you SSH to a remote host for the first time, you’ll be presented with a security warning like this:

Загрузка ssl на сервер

Файлы .CA и .CRT необходимо отправить на сервер. Часто Linux-серверы администрируют через терминал и GUI может отсутствовать. В этом случае можно отправить файлы на машину с другой ОС, а затем их перенести. Ниже мы расскажем, как это можно осуществить.

Важно: пара (закрытый и открытый ключи) должна быть сгенерирована там, куда устанавливаются сами сертификаты. Однако если они были созданы на другом компьютере, на ваш сервер следует отправить закрытый ключ (файл .key), в соответствии с описанными ниже действиями по копированию.

Про сертификаты:  Гудрон - Что такое Гудрон? - Техническая Библиотека Neftegaz.RU

Загрузка через операционную систему windows

Запускаем. Откроется окно, куда необходимо ввести параметры подключения по протоколу SSH.

Слева вы увидите папки и файлы локальной машины, справа — файлы рабочего сервера, к которому подключились. Следует выбрать (либо создать, если такового нет) место, куда отправятся сертификаты. Используя функцию drag-n-drop, зажав левую клавишу мышки, переносите файлы .CA и .CRT.

Важно: удобнее будет сохранить .key в том же месте, где уже лежат файлы сертификатов. Это необязательно, но тогда вам придется запоминать расположение этого файла и указывать этот путь при конфигурации Apache, а не путь с нашего примера.

Чтобы сделать копию .key и отправить в иную директорию, в случае генерации закрытого ключа на сервере, можно воспользоваться командой:

cp /home/root/private.key /etc/ssl/private.key

При этом:

cp — отвечает за копирование;/home/root/ — путь к файлу, если вы зашли «под рутом»;private.key — имя файла самого ключа;/etc/ssl/private.key — путь, куда мы хотим скопировать ключ.

Можно воспользоваться командой и удалить ключ в старой директории:

rm /home/root/private.key

Конфигурация nginx для ssl

Обратите внимание: на Ubuntu/Debian-дистрибутивах параметры веб-ресурсов Nginx обычно размещаются в директории /etc/nginx/sites-enabled/. В дистрибутиве CentOS стандартной директорией считается /etc/nginx/conf.d/.

Важно для дистрибутива CentOS: в случае отсутствия редактора nano, можно установить его следующим образом:

yum install nano

Добавьте параметры из примера к вашей конфигурации:

listen 443 ssl;
ssl_certificate /etc/ssl/testdomain.crt;
ssl_certificate_key /etc/ssl/test.key;

Не забудьте поменять на ваши:/etc/ssl/test.crt — прописать расположение ваших сертификатов;/etc/ssl/test.key — прописать расположение закрытого ключа.

Сделаем рестарт:

Рестарт на Debian и Ubuntu:

/etc/init.d/nginx restart

Рестарт на CentOS:

service nginx restart

Допустим, у вас есть настроенный iptables firewall. В этом случае следует открыть 443 порт. Просто обратитесь к документации той системы, которую используете. Различные дистрибутивы Linux могут работать с iptables по-своему. Вот пара примеров:

Для CentOS пишем:

iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Ubuntu 16.04 более лаконичен:

ufw allow 443/tcp

В Debian пишем следующее:

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

Логирование ssh подключений по сертификату

Мне необходимо знать, когда и какой сертификат подключался к серверу. По-умолчанию такой информации чаще всего в логах не остается. Исключение я заметил только в CentOS 7. Там с дефолтными настройками ssh и уровнем логирования INFO отображается отпечаток ключа в логе:

# cat /var/log/secure

Настройка ssh сертификатов на сервере

Выполним генерацию ключей SSH.

ssh-keygen -a 1000 -b 4096 -o -t rsa

Укажем путь хранения ключа и его имя

/root/.ssh/id_rsa

💡 В моем случае при создании сертификата для root оказалось важным указать жесткий путь /root/.ssh/, вместо относительного ~/.ssh/ чтобы избежать ошибки SSH Server refused our key.

Про сертификаты:  Сертификаты соответствия системы менеджмента качества ПАО «ММК»

Система так же создаст публичный ключ по данному пути.

Указываем ключевую фразу для доступа к приватному ключу.

Добавляем содержимое файла публичного ключа к файлу сертификата авторизации SSH.

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Перезапускаем SSH

sudo service ssh restart 

Настройка подключения putty с использованием ssh сертификата

Добавьте приватный сертификат в подключение:

Connection > SSH > Auth > Private key file for authentication

При успешном подключении после ввода имени пользователя, выйдет запрос ключевой фразы сертификата, после чего вход на сервер должен быть успешно выполнен.

Успешный вход c SSH сертификатом на Ubuntu сервер
Успешный вход на сервер с SSH сертификатами

💡 Если при входе на сервер вы получаете сообщение SSH Server refused our key, проверьте правильность прав на папку .ssh и файл authorized_keys, а так же что вы входите под тем именем пользователя, в authorized_keys которого добавлен ваш ключ.

Онлайн курс “sre практики и инструменты”

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с

онлайн-курсом “SRE практики и инструменты”

в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и Linux. Обучение длится 3 месяц, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

На курсе вы узнаете как:

  • Внедрить SRE практики в своей организации
  • Управлять надежностью, доступностью и эффективностью сервисов
  • Управлять изменениями
  • Осуществлять мониторинг
  • Реагировать на инциденты и производительность
  • Работать со следующим технологическим стеком: Linux, AWS, GCP, Kubernetes, Ansible, Terraform, Prometheus, Go, Python.


Проверьте себя на вступительном тесте и смотрите подробнее программу по

Перенос из unix-систем

В данном случае самым простым вариантом будет воспользоваться встроенной опцией терминала – SCP:

1. Файлы .CA и .CRT скачиваются из панели Serverspace на ваш компьютер.
2. Открываем терминал и переходим в место скачивания сертификатов, например:

cd ~/MyDownloadedFiles

Детальнее:

Подготовка к установке

В контексте данной инструкции полагается, что установка будет проходить на «чистом» сервере. Для корректной работы GitLab потребуются:

  • CentOS 6/7;
  • Postfix;
  • Open SSH;
  • Ruby;
  • Go;
  • Nodejs;
  • База данных (PostgreSQL или MySQL);
  • Redis;
  • Nginx.

Подготовка папок

Выполняем подготовку папок и файла ключа на сервере.

Важный момент при настройке авторизации SSH по ключам — это указать правильные Права доступа на папку и файл ключа.

Про сертификаты:  Безопасность продукции | Procter and Gamble

Выполните:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

Помогла статья? подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Предварительная настройка сервера

Разрешим вход с использованием публичного сертификата SHH на сервер и укажем путь до сертификата в настройках SSH, файл sshd_config.

nano /etc/ssh/sshd_config

Раскомментируйте или добавьте значения:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Преобразуем приватный ключ в формат ключа putty

💡 При попытке использовать скопированный ключ, PuTTY покажет ошибку: Unable to use key file (OpenSSH SSH-2 private key (new format)).

  1. Скопируйте приватный ключ id_rsa (или содержимое ключа в файл) на локальный компьютер;
  2. Запустите программу puttygen (из папки PuTTY);
  3. Нажмите кнопку Load и выберите файл приватного ключа;
  4. Введите пароль на приватный сертификат;
  5. Нажмите Save private key для сохранения приватного ключа в нужном формате (вы можете изменить Key comment, это не повлияет на работу ключа).
Как настроить SSH сертификаты для входа в putty
Загруженный RSA ключ в PuTTY Key Generator

Проверяем настройки

Подборки SSL-сертификатов: DV сертификат для домена, EV сертификат “зеленая строка”, WC сертификат для поддоменов, SAN мультидоменный сертификат.

Установка

Существует 3 способа установки GitLab:

  • Установка пакета;
  • Установка из репозитория;
  • Сборка и установка из исходников.

Рекомендуемым разработчиками вариантом является установка GitLab из репозитория. Для того чтобы установить GitLab из репозитория необходимо выполнить следующие действия:

Установим необходимые зависимости:

sudo yum install -y curl policycoreutils-python openssh-server

Данная команда установит следующие пакеты:

cURL, OpenSSH-Server и PolicyCoreUtils-Python

После установки данных пакетов необходимо запустить и включить в автозагрузку OpenSSH-Server. Для этого поочередно вводим следующие команды:

Включаем OpenSSH-Server в автозагрузку:

sudo systemctl enable sshd

Запускаем OpenSSH-Server:

sudo systemctl start sshd

Далее установим Postfix для отправки уведомлений на электронную почту. Для этого необходимо выполнить следующие команды:

Устанавливаем Postfix:

sudo yum install postfix

Добавляем Postfix в автозагрузку:

sudo systemctl enable postfix

Запускаем Postfix:

sudo systemctl start postfix

В процессе установки Postfix может открыть экран конфигурации. Вам необходимо выбрать «Internet-site» и нажать Enter. Для «mail name» необходимо указать внешний DNS вашего сервера, после чего нажать Enter. Если в процессе установки будут появляться дополнительные экраны, просто продолжайте нажимать Enter, чтобы установить значения по умолчанию.

Финальная настройка сервера

Последний шаг настройки SSH — отключение возможности входа на сервер по паролю, в файле конфигурации.

nano /etc/ssh/sshd_config

Раскомментируйте или добавьте значениe:

PasswordAuthentication no

После чего перезапустите службу SSH.

sudo service ssh restart

Настройка авторизации по сертификату SSH — завершена!

Оцените статью
Мой сертификат
Добавить комментарий