По директориям раскидал

This commit is contained in:
2025-05-20 20:16:22 +05:00
parent cab906cff1
commit 332e1b84e9
18 changed files with 1920 additions and 1460 deletions

View File

@ -0,0 +1,140 @@
## Подключаемся к инфраструктуре
```sh
wsl
```
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
ls
```
# Создадим корневой ключ и сертификат:
Create root certificate
```sh
openssl genrsa -out rootCA.key 4096 &&
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt
```
Add root certificate to trusted
```sh
cd /mnt/o/MyDocuments/projects/_Doc/Certificates &&
sudo cp rootCA.crt /usr/local/share/ca-certificates/ &&
sudo update-ca-certificates
```
## Отдельные сертификаты для каждого домена
Отдельно для домена "ccalm.test" можно создать сертификат так:
```sh
openssl genrsa -out ccalm.test.key 2048
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test"
```
Подписать сертификат корневым CA
```sh
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256
```
## Если домены связаны то можно создать один wildcard-сертификат (*.test)
Так как это все мои домены для тестированя системы то мне легче создать единый сертификат
***Внимание: для поддоменов не работает!***
Создать ключ и CSR для *.test
```sh
openssl version &&
openssl genrsa -out ccalm.test.key 2048 &&
openssl req -new -key ccalm.test.key -out ccalm.test.csr -subj "/CN=ccalm.test" -addext "subjectAltName=DNS:ccalm.test" &&
openssl x509 -req -in ccalm.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out ccalm.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in ccalm.test.crt -text -noout
```
```sh
openssl version &&
openssl genrsa -out wildcard.test.key 2048 &&
openssl req -new -key wildcard.test.key -out wildcard.test.csr -subj "/CN=*.test" -addext "subjectAltName=DNS:*.test" &&
openssl x509 -req -in wildcard.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.test.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.test.crt -text -noout
```
## Создаём ключ и сертификат для *.local потом подписываем корневым
Создаю:
```sh
openssl version &&
openssl genrsa -out wildcard.local.key 2048 &&
openssl req -new -key wildcard.local.key -out wildcard.local.csr -subj "/CN=*.local" -addext "subjectAltName=DNS:*.local" &&
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in wildcard.local.crt -text -noout
```
Создаём и подписываем одной группой команд:
```sh
openssl version &&
openssl genrsa -out powerdns.local.key 2048 &&
openssl req -new -key powerdns.local.key -out powerdns.local.csr -subj "/CN=powerdns.local" -addext "subjectAltName=DNS:powerdns.local" &&
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256 -copy_extensions copy
openssl x509 -in powerdns.local.crt -text -noout
```
Создаём и подписываем одной группой команд:
```sh
openssl version &&
openssl genrsa -out gotify.local.key 2048 &&
openssl req -new -key gotify.local.key -out gotify.local.csr -subj "/CN=gotify.local" -addext "subjectAltName=DNS:gotify.local" &&
openssl x509 -req -in gotify.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out gotify.local.crt -days 365 -sha256 -copy_extensions copy &&
openssl x509 -in gotify.local.crt -text -noout &&
cat gotify.local.crt gotify.local.key > gotify.local.pem
```
Теперь можно устанавливать в HAProxy этот gotify.local.pem сертификат
Подписать корневым CA:
```sh
openssl x509 -req -in wildcard.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out wildcard.local.crt -days 365 -sha256
```
```sh
openssl x509 -req -in powerdns.local.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out powerdns.local.crt -days 365 -sha256
```
## Один сертификат с SAN (Subject Alternative Names)
Написать san.cnf
```conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = ccalm.test
DNS.2 = git.test
DNS.3 = geoserver.ccalm.test
DNS.4 = another.domain
```
Генерировать CSR и подписать:
```sh
openssl req -new -key multi.test.key -out multi.test.csr -config san.cnf
openssl x509 -req -in multi.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out multi.test.crt -days 365 -sha256 -extfile san.cnf -extensions v3_req
```
Как использовать:
Подходит, если у вас несколько несвязанных доменов.
Можно защитить корневой домен и поддомены (example.com + www.example.com).
### Проверка
```sh
openssl x509 -in rootCA.crt -text -noout
```
```sh
openssl x509 -in powerdns.local.crt -text -noout
```

View File

@ -0,0 +1,361 @@
# Установка HashiCorp Vault на Ubuntu
Vault — это инструмент от HashiCorp для безопасного хранения секретов и управления ими.
## 1. Установка Vault
Открываю нужный сервер
```sh
wsl
```
Похоже vault из Москвы недоступен:
```sh
ssh root@45.144.64.218 -p 2200
```
### 1.1. Добавление репозитория HashiCorp
1. Установите необходимые пакеты:
```sh
sudo apt update && sudo apt install -y gnupg software-properties-common curl
```
2. Добавьте официальный GPG-ключ HashiCorp:
```sh
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
3. Добавьте репозиторий HashiCorp в систему:
```sh
sudo mcedit /etc/apt/sources.list.d/hashicorp.list
```
Заменяем на:
```text
deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com noble main
```
Где noble это кодовое имя Ubuntu 24.04
4. Обновите списки пакетов:
```sh
sudo apt update
```
5. Установите Vault:
```sh
sudo apt install -y vault
```
6. Проверьте, что Vault установлен правильно:
```sh
vault --version
```
Выдало: Vault v1.18.5 (2cb3755273dbd63f5b0f8ec50089b57ffd3fa330), built 2025-02-24T09:40:28Z
## 2. Запуск Vault
### 2.1. Запуск в Dev-режиме (только для тестирования)
If work stop it:
```sh
sudo pkill vault
```
If need delete old data:
```sh
sudo rm -rf ~/.vault-token ~/.vault/
```
For find where stored data read file:
```sh
sudo mcedit /etc/vault/config.hcl
```
In config file find this path: /opt/vault/data
После удаления базы нужно инициализировать Vault заново:
```sh
sudo vault operator init
```
Run in developer mode (in dev mode data stored in RAM):
```sh
vault server -dev
```
```text
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variables:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: TMb6A3QI3wJ9kaEeTYo5wEviP23lugJ3Asek2la6V4s=
Root Token: hvs.GsWHRR7ne7gMTZhuPgZdh91w
Development mode should NOT be used in production installations!
```
Теперь Vault работает по адресу:
```sh
start http://127.0.0.1:8200
```
Останавливаю нажатием Ctrl + C
### 2.2. Настройка Vault в режиме сервера
1. Создайте конфигурационный файл:
```sh
sudo mkdir -p /etc/vault &&
sudo mcedit /etc/vault/config.hcl
```
2. Добавьте следующий конфиг:
```text
storage "file" {
path = "/opt/vault/data"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
disable_mlock = true
ui = true
```
3. Создайте папку для хранения данных:
```sh
sudo mkdir -p /opt/vault/data &&
sudo chown vault:vault /opt/vault/data
```
4. Создайте systemd-сервис для Vault:
```sh
sudo tee /etc/systemd/system/vault.service > /dev/null <<'EOF'
[Unit]
Description=HashiCorp Vault
After=network-online.target
Requires=network-online.target
[Service]
User=vault
Group=vault
ExecStart=/usr/bin/vault server -config=/etc/vault/config.hcl
ExecReload=/bin/kill --signal HUP \$MAINPID
KillSignal=SIGTERM
Restart=on-failure
LimitMEMLOCK=infinity
ProtectSystem=full
CapabilityBoundingSet=CAP_IPC_LOCK CAP_SETGID CAP_SETUID CAP_SYSLOG CAP_CHOWN
NoNewPrivileges=yes
[Install]
WantedBy=multi-user.target
EOF
```
Проверяем всё ли записалось:
```sh
sudo mcedit /etc/systemd/system/vault.service
```
5. Перезапустите systemd и включите Vault:
```sh
sudo systemctl daemon-reload &&
sudo systemctl enable vault &&
sudo systemctl start vault
```
7. Проверьте статус:
```sh
sudo systemctl status vault
```
---
## 3. Инициализация и разлочка Vault
1. Экспортируйте переменную окружения:
```sh
export VAULT_ADDR='http://127.0.0.1:8200'
```
2. Инициализируйте хранилище (сохраните ключи!):
```sh
vault operator init
```
Выдало:
```text
Unseal Key 1: lQlJsb9RI8rSzLrc5iPnx1qJkWZbbXIkrEgnQGe5R6uO
Unseal Key 2: 0qJJXRo570jlH/0Qs/wodXHNI2SF5VgL4jE04JawSPSB
Unseal Key 3: VuYkOkQ8qmwofDmjqsTRQoMqGAH3Jv+nqQylL7Uibbtp
Unseal Key 4: JJJ8Nqj00qzS9u5wNtTtExL/jWlJF9fgaBsiuaf0kFxC
Unseal Key 5: L6lZMp/l7s24EZJAFnWS4Py5jsWOuMioC41g5LhUJKWL
Initial Root Token: hvs.o07DY7tnSPcufxk60pjCXDzn
Vault initialized with 5 key shares and a key threshold of 3. Please securely
distribute the key shares printed above. When the Vault is re-sealed,
restarted, or stopped, you must supply at least 3 of these keys to unseal it
before it can start servicing requests.
Vault does not store the generated root key. Without at least 3 keys to
reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
```
3. Разблокируйте Vault, используя один из ключей (потом ещё 3 раза выполнить эту команду):
```sh
vault operator unseal
```
4. Авторизуйтесь с root-токеном:
```sh
vault login hvs.MTFV72PjKXCVh5ZL6yCVE3Yw
```
5. Создаём(включаем) новое хранилище ключ-значение через ssh
```sh
vault secrets enable -path=org-ccalm kv-v2
```
5. Writing to the kv storage (добавил префикс vault. чтобы значения самому подставлять в нужные места в spring)
Заменит(создаст) значение:
```sh
vault kv put org-ccalm/jwt vault.server.ssl.key-store-password=MFNX344yh4
```
Добавит (обновит):
```sh
vault kv patch org-ccalm/jwt vault.test=test2
```
```sh
vault kv put org-ccalm/public vault.personal_data.key=7dd2Nek1
```
6. Read data from the kv
```sh
vault kv get org-ccalm/jwt
```
Должно вывести:
```text
Key Value
--- -----
server.ssl.key-store-password M4yh4
```
6. Включаем AppRole для доступа из приложения
```sh
vault auth enable approle
```
7. Добавляем политики потом создаём ключ для этой политикиполитики
Создаю файл политик
```sh
cd ~ &&
sudo tee jwt-policy.hcl > /dev/null <<'EOF'
path "org-ccalm/data/jwt" {
capabilities = ["create", "read", "update", "delete", "list"]
}
path "org-ccalm/data/public" {
capabilities = ["read", "list"]
}
EOF
```
Apply and delete configiration file:
```sh
vault policy write jwt-policy ~/jwt-policy.hcl &&
rm -f jwt-policy.hcl
```
Создаём AppRole (на 10 лет)
```sh
vault write auth/approle/role/org-ccalm-jwt \
secret_id_ttl=0 \
token_ttl=87600h \
token_max_ttl=87600h \
policies="jwt-policy,another-policy,third-policy"
```
Получаем role_id и secret_id
```sh
vault read auth/approle/role/org-ccalm-jwt/role-id
```
Выдало
```text
Key Value
--- -----
role_id c0064fe2-8f0e-b317-7fe7-66f7405b45a1
```
На команду
```sh
vault write -f auth/approle/role/org-ccalm-jwt/secret-id
```
Выдало:
```text
Key Value
--- -----
secret_id 24f31c88-7185-0d93-9a51-e221c2925265
secret_id_accessor 22fa68e3-fc73-2008-0a34-3506630b6693
secret_id_num_uses 0
secret_id_ttl 0s
```
Сохрани role_id и secret_id, они понадобятся Spring Boot.
Хранить ключи лучьше в переменных окружения
```sh
export VAULT_ROLE_ID="your-role-id" &&
export VAULT_SECRET_ID="your-secret-id"
```
Проверяем не больше какого значения можно задать время жизни кокена:
```sh
vault read sys/mounts/auth/token/tune
```
По умолчанию max_lease_ttl равен 32 дня!
На год можно увеличить так:
```sh
vault write sys/mounts/auth/token/tune max_lease_ttl=8760h
```
Create data access token with set politics:
```sh
vault token create -policy=jwt-policy -ttl=0
```
Продлевать токен можно так:
```sh
vault token renew <твой-токен>
```
Проверяем зранятся ли токены в хранилище а не в памяти
```sh
vault read sys/auth/token/tune
```
token_type = default-service, значит Vault не хранит токены
Включаем хранение токенов:
```sh
vault write sys/auth/token/tune token_type=service
```
---
Теперь HashiCorp Vault установлен и готов к использованию! 🚀

View File

@ -0,0 +1,136 @@
Загрузить в HashiCorp Vault настройки можно так:
```sh
vault kv put secret/org-ccalm-jwt \
jwt.secret=my-secret-value \
db.user=admin \
db.pass=123456
```
Разбор параметров:
1. vault kv put команда для записи ключей и значений в KV-хранилище Vault.
2. secret/org-ccalm-jwt путь к секрету.
* secret/ это backend-хранилище (оно должно быть включено в Vault).
* org-ccalm-jwt имя секрета, под которым сохраняются параметры.
3. jwt.secret=my-secret-value ключ jwt.secret со значением my-secret-value.
4. db.user=admin ключ db.user со значением admin.
5. db.pass=123456 ключ db.pass со значением 123456.
# 🚀 Установка и настройка HashiCorp Vault на Windows
## 📌 1. Установка HashiCorp Vault
1. **Скачайте Vault CLI** с официального сайта:
🔗 [https://developer.hashicorp.com/vault/downloads](https://developer.hashicorp.com/vault/downloads)
2. Распакуйте архив и **добавьте путь к `vault.exe` в `PATH`**:
- Кликните **ПКМ → Этот компьютер → Свойства → Дополнительные параметры системы**.
- В **Переменные среды** добавьте путь к папке с `vault.exe`.
3. Откройте **cmd** или **PowerShell** и проверьте установку командой:
```sh
vault --version
```
Если всё ОК, увидите версию Vault. Примерно такую: Vault v1.18.4 (503be623a3697e8c10c254dc87d26492c46753e1), built 2025-01-29T13:57:54Z
---
## 📌 2. Запуск Vault-сервера (разработческий режим)
Чтобы локально запустить Vault в **dev-режиме** (без авторизации), выполните:
```sh
vault server -dev
```
После запуска он покажет **root-токен** (сохраните его!):
```plaintext
Unseal Key: x1jUXpLJREI6M1+Qm6m/h3NLEhaEmBageqw0v+dSSKo=
Root Token: hvs.V7Rc8uJ8YJ0AASKZfep6oYNe
```
Теперь Vault работает по адресу:
```sh
start http://127.0.0.1:8200
```
---
## 📌 3. Экспорт токена (чтобы не вводить каждый раз)
Откройте **PowerShell** и выполните:
```sh
$env:VAULT_ADDR="http://127.0.0.1:8200"
$env:VAULT_TOKEN="hvs.JDIyKgDMagA0WyIhLFQ4mAjZ"
```
(Замените `hvs.JDIyKgDMagA0WyIhLFQ4mAjZ` на свой токен.)
Теперь можно работать с Vault без ввода токена каждый раз.
---
## 📌 4. Запись значений в Vault на Windows
Значения разделенные пробелами можно записать в вольт так:
```sh
vault kv put secret/kz-istransit-jwt server.ssl.key-store-password=MFNX344yh4
```
Выдаст примерно такое:
======== Secret Path ========
secret/data/kz-istransit-jwt
======= Metadata =======
Key Value
--- -----
created_time 2025-02-24T12:49:45.7630328Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
---
## 📌 5. Проверка сохранённых данных
Чтобы посмотреть, что записано в Vault:
```sh
vault kv get secret/kz-istransit-jwt
```
Если всё настроено правильно, вы увидите примерно такой вывод:
```plaintext
====== Metadata ======
Key Value
--- -----
created_time 2025-02-24T12:00:00Z
version 1
====== Data ======
Key Value
--- -----
db.pass 123456
db.user admin
jwt.secret my-secret-value
```
---
## 📌 6. Удаление данных из Vault
Удаление данных:
```sh
vault kv delete secret/org-ccalm-jwt
```
Полное уничтожение (без возможности восстановления):
```sh
vault kv destroy -versions=1 secret/org-ccalm-jwt
```
---
## 🎯 Итог
✅ Установили Vault CLI
✅ Запустили Vault сервер (`vault server -dev`)
✅ Экспортировали `VAULT_ADDR` и `VAULT_TOKEN`
✅ Записали настройки в Vault
✅ Проверили данные
Теперь можно интегрировать Vault в Spring Boot 🚀