Найти в Дзене
Игорь Сотников

SSL+Vault+Servers. Часть 2 Сертификаты.

В прошлой части, статьи мы получили цепочку сертификатов, pfx сертификат.

У нас все готово , к использованию. Мы определили, что данные сертификаты, ключи, pfx сертификат и.т.д мы будем хранить в замечательном сервисе , который называется Hashicorp Vault. Данный проект находится по адресу https://www.vaultproject.io/

Я буду использовать локально развернутый в тестовом окружении. Еще одно препятствие ,чтобы взять и использовать vault. Мы не можем поместить сертификат целиком, как файл. В Vault мы можем поместить текстовую сущность. А для этого необходимо полученные файлы преобразовать в строку, а когда мы будем извлекать необходимо преобразовать обратно из строки в файл. Будем использовать base64 преобразование.

Посмотрим , как это можно сделать из разных операционных систем.

Linux Ubuntu:

Для кодирования и декодирования сертификатов будем использовать 2 достаточно простых команды:

cat fullchain.pem | base64 -w 0 > fullchainb64

-2

Мы командой преобразовали в base64 в строку и сохранили результат в файл.

Готовая строка может быть помещена в хранилище vault , как пара ключ-значение. Для обратного преобразования можно использовать следующую команду:

cat fullchainb64 | base64 -d

Windows:

В ОС Windows подобное преобразование делается с помощью следующего командлета Powershell.

[convert]::ToBase64String((Get-Content -path "C:\ssl\fullchain.pem" -Encoding byte)) > fullchane64win

-3

Выводы команд можно сравнить по скриншотам. Добавляя перенаправление в файл сохраняем в файл.

И обратное преобразование в ОС Windows с сохранением в файл

[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("yoursBase64string")) > "pathToFile"

Так с сертификатами и манипуляциями думаю все понятно , теперь надо посмотреть как эту информацию можно сохранить и передавать через vault.

С сервером Vault можно работать несколькими способами, два самых распространенных рассмотрим.

Способ 1. Работа с сервером Vault с помощью утилиты.

Установка утилиты Ubuntu:

sudo apt update && sudo apt install gpg wget

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update && sudo apt install vault

Установка Утилиты Windows:

Официально HashiCorp поддерживает установку vault с помощью пакетного менеджера chocolatey.

choco install vault

!!! Из РФ hashicorp блокирует доступ к репозиториям , используйте прокси !!!

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

export VAULT_ADDR=https://fqdn_server_vault

Можно это сделать при подключении , когда вводим команду , добавить ключ

vault login -address=https://fqdn_server_vault

Как можно понять из контекста, первое что нам необходимо сделать это залогинится. Для того , чтобы залогинится нам необходим токен, можно использовать токен от root , который мы получили при инициализации сервера vault ( установку и инициализацию специально опустил, это не тема данной статьи.)

Далее как с волтом работать можно почитать в официальной документации.

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

vault kv get -mount=path_secret Name_secret - после ввода такой команды будет выдан ответ

-4

Далее останется только обработать ответ.

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

vault kv put -mount=path_secret Name_secret fullchain64="base64"

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

Способ 2. Работа с сервером Vault с помощью CURL.

Это еще один способ работы с сервером Vault

Читаем Секреты из Vault:

curl -H "X-Vault-Token: Vault_Token" -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1

В данном запросе Vault_Token - токен под которым логинимся.

https://vault.example.lan/v1/kv/postgresql/192.168.0.1 - URL по которому располагается секрет.

С помощью jq мы можем отфильтровывать вывод json. Добавляем curl -H "X-Vault-Token: Vault_Token" -X GET https://vault.example.lan/v1/kv/postgresql/192.168.0.1 2>/dev/null | jq .data.data.Login -r

И получем содержимое Login.

Просматриваем список секретов:

curl -H "X-Vault-Token: Vault_Token" -X LIST https://vault.example.lan/v1/kv/postgresql/

Добавляем секреты:

curl -H "X-Vault-Token: Vault_Token" -H "Content-Type: application/json" -X POST -d '{"value":"bar"}' https://vault.example.lan/v1/kv/postgresql/192.168.0.2

, где {"value":"bar"} - пара ключ\значение которые помещаем в Vault

Удаляем Секреты:

curl -H "X-Vault-Token: Vault_Token" -X DELETE https://vault.example.lan/v1/kv/postgresql/192.168.0.2

#DevOPs #OpenSource #SSL #vault #hashicorp