This commit is contained in:
Igor I
2025-03-06 16:51:07 +05:00
parent caceeaefb7
commit 7da4dc698d
5 changed files with 10 additions and 156 deletions

View File

@ -1,128 +0,0 @@
Загрузить в 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: 9OSMJSPNCs9IT/H5OzLz17jW/vogeCAWQbXy2K7LRPQ=
Root Token: hvs.JDIyKgDMagA0WyIhLFQ4mAjZ
```
Теперь Vault работает по адресу:
```
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/org-ccalm-jwt jwt.secret=my-secret-value db.user=admin db.pass=123456
```
Если у вас **KV v1**, используйте:
```sh
vault write secret/org-ccalm-jwt jwt.secret=my-secret-value db.user=admin db.pass=123456
```
---
## 📌 5. Проверка сохранённых данных
Чтобы посмотреть, что записано в Vault:
```sh
vault kv get secret/org-ccalm-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 🚀

View File

@ -9,8 +9,8 @@ Refresh token токен действует 12 часов и за эти 12 ча
vault kv put secret/org-ccalm-jwt jwt.secret=my-secret-value db.user=admin db.pass=123456 vault kv put secret/org-ccalm-jwt jwt.secret=my-secret-value db.user=admin db.pass=123456
В базе есть поля такие как e_iin и они записываются так: pgp_sym_encrypt('Мои данные', 'пароль')
Читаются так: select pgp_sym_decrypt(e_name, 'пароль') from main.drivers;
____ ____

View File

@ -468,7 +468,7 @@ public class MainController implements ServletContextAware {
String sql = """ String sql = """
select select
name1 name
from from
main.get_access_list(:user_id) main.get_access_list(:user_id)
where where
@ -648,7 +648,7 @@ public class MainController implements ServletContextAware {
//parameters.addValue("phone",); //parameters.addValue("phone",);
parameters.addValue("email",newUserModel.getEmail()); parameters.addValue("email",newUserModel.getEmail());
parameters.addValue("e_iin",newUserModel.getIin()); //Для ЭЦП это поле обязательно parameters.addValue("e_iin",newUserModel.getIin()); //Для ЭЦП это поле обязательно
parameters.addValue("key",newUserModel.getIin()); parameters.addValue("key",personal_data_key);
parameters.addValue("password",password); parameters.addValue("password",password);
ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper());
@ -847,7 +847,7 @@ public class MainController implements ServletContextAware {
}catch (DataAccessException ex){ }catch (DataAccessException ex){
String uuid = UUID.randomUUID().toString(); String uuid = UUID.randomUUID().toString();
logger.error(uuid,ex); logger.error(uuid,ex);
throw new CustomException(10000, trt.trt("Error_executing_SQL_query"),uuid); throw new CustomException(10000, trt.trt("Internal_Server_Error"),uuid);
} }
if(json==null) { if(json==null) {
String msg = trt.trt("Invalid_username_and_or_password"); String msg = trt.trt("Invalid_username_and_or_password");
@ -1063,8 +1063,8 @@ public class MainController implements ServletContextAware {
} }
}catch (DataAccessException ex){ }catch (DataAccessException ex){
java.lang.String uuid = UUID.randomUUID().toString(); java.lang.String uuid = UUID.randomUUID().toString();
logger.error("Error executing SQL query", uuid, ex); logger.error(uuid, ex);
throw new CustomException(10000, trt.trt("Error_executing_SQL_query"),uuid); throw new CustomException(10000, trt.trt("Internal_Server_Error"),uuid);
}catch (Exception e) { }catch (Exception e) {
String uuid = UUID.randomUUID().toString(); String uuid = UUID.randomUUID().toString();
logger.error(uuid,e); logger.error(uuid,e);
@ -1240,12 +1240,8 @@ public class MainController implements ServletContextAware {
@RequestMapping(value = "/logout",method = {RequestMethod.POST,RequestMethod.GET},produces = "application/json;charset=utf-8") @RequestMapping(value = "/logout",method = {RequestMethod.POST,RequestMethod.GET},produces = "application/json;charset=utf-8")
@ResponseBody @ResponseBody
public String logout(HttpServletResponse response,HttpServletRequest request) { public String logout(HttpServletResponse response,HttpServletRequest request) {
//Устанавливает куки
setAccessCookie(response,""); setAccessCookie(response,"");
setRefreshCookie(response, request, ""); setRefreshCookie(response, request, "");
return createStrJSONError(0,"",(String)null,(String)null); return createStrJSONError(0,"",(String)null,(String)null);
} }
//------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------
@ -1634,20 +1630,7 @@ public class MainController implements ServletContextAware {
throw new CustomException(10000, Collections.singletonList(trt.trt("Please_log_in")),null); throw new CustomException(10000, Collections.singletonList(trt.trt("Please_log_in")),null);
} }
UserDetails userDetails = (UserDetails) authentication.getPrincipal(); UserDetails userDetails = (UserDetails) authentication.getPrincipal();
/*if(jwt_a.isEmpty() || countOccurrences(jwt_a, '.')!=2)
{
throw new CustomException(10000, Collections.singletonList(trt.trt("Please_log_in")),null);
}
//Checking the token signature
Jws<Claims> claims = null;
try {
claims = Jwts.parserBuilder()
.setSigningKey(getPublicKey()) //.setSigningKey(key_a)
.build()
.parseClaimsJws(jwt_a);
} catch (Exception e) {
throw new CustomException(10000, Arrays.asList(trt.trt("Please_log_in"), trt.trt("JWT_token_verification_error")),null);
}*/
//If this is a repeat authorization, then we inform the client about it //If this is a repeat authorization, then we inform the client about it
String result=null; String result=null;
try(Cache cache = new Cache(redis_host,redis_port,redis_password)) { try(Cache cache = new Cache(redis_host,redis_port,redis_password)) {

View File

@ -51,7 +51,7 @@ public class SecurityConfig {
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
String path = request.getRequestURI(); String path = request.getRequestURI();
System.out.println(path); // https://127.0.0.1:8082/logout System.out.println(path); // https://127.0.0.1:8082/logout
return path.equals("/") || path.equals("/login") || path.equals("/logout") || path.equals("/create"); return path.equals("/") || path.equals("/login") || path.equals("/logout") || path.equals("/create") || path.equals("/reset");
} }
@Override @Override

View File

@ -12,7 +12,6 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Properties; import java.util.Properties;
public class Cache implements AutoCloseable { public class Cache implements AutoCloseable {
private static final Logger logger = LogManager.getLogger(Cache.class); private static final Logger logger = LogManager.getLogger(Cache.class);