mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 01:29:55 +00:00
Исправления в ветке auth-feature
This commit is contained in:
199
docs/SECURITY_FEATURES.md
Normal file
199
docs/SECURITY_FEATURES.md
Normal file
@@ -0,0 +1,199 @@
|
||||
# 🔒 Функции безопасности LCG
|
||||
|
||||
## 🛡️ Автоматическое принуждение к HTTPS
|
||||
|
||||
### Логика безопасности
|
||||
|
||||
Приложение автоматически определяет, нужно ли использовать HTTPS:
|
||||
|
||||
1. **Небезопасные хосты** (не localhost/127.0.0.1) → **принудительно HTTPS**
|
||||
2. **Безопасные хосты** (localhost/127.0.0.1) → HTTP (если не указано иное)
|
||||
3. **Переменная `LCG_SERVER_ALLOW_HTTP=true`** → разрешает HTTP для любых хостов
|
||||
|
||||
### Примеры
|
||||
|
||||
```bash
|
||||
# Небезопасно - принудительно HTTPS
|
||||
LCG_SERVER_HOST=192.168.1.100 lcg serve
|
||||
# Результат: https://192.168.1.100:8080
|
||||
|
||||
# Безопасно - HTTP по умолчанию
|
||||
LCG_SERVER_HOST=localhost lcg serve
|
||||
# Результат: http://localhost:8080
|
||||
|
||||
# Принудительно HTTP для любого хоста
|
||||
LCG_SERVER_HOST=192.168.1.100 LCG_SERVER_ALLOW_HTTP=true lcg serve
|
||||
# Результат: http://192.168.1.100:8080
|
||||
```
|
||||
|
||||
## 🔐 SSL/TLS сертификаты
|
||||
|
||||
### Автоматическая генерация
|
||||
|
||||
Приложение автоматически генерирует самоподписанный сертификат если:
|
||||
|
||||
1. Не указаны переменные `LCG_SERVER_SSL_CERT_FILE` и `LCG_SERVER_SSL_KEY_FILE`
|
||||
2. Не найдены файлы в `~/.config/lcg/server/ssl/cert.pem` и `~/.config/lcg/server/ssl/key.pem`
|
||||
|
||||
### Расположение сертификатов
|
||||
|
||||
``` text
|
||||
~/.config/lcg/
|
||||
├── config/
|
||||
│ └── server/
|
||||
│ └── ssl/
|
||||
│ ├── cert.pem # Сертификат
|
||||
│ └── key.pem # Приватный ключ
|
||||
```
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
| Переменная | Описание | По умолчанию |
|
||||
|------------|----------|--------------|
|
||||
| `LCG_CONFIG_FOLDER` | Папка конфигурации | `~/.config/lcg/config` |
|
||||
| `LCG_SERVER_ALLOW_HTTP` | Разрешить HTTP для любых хостов | `false` |
|
||||
| `LCG_SERVER_SSL_CERT_FILE` | Путь к сертификату | `""` (авто) |
|
||||
| `LCG_SERVER_SSL_KEY_FILE` | Путь к ключу | `""` (авто) |
|
||||
|
||||
## 🚀 Примеры использования
|
||||
|
||||
### Безопасный режим (по умолчанию)
|
||||
|
||||
```bash
|
||||
# Локальный сервер - HTTP
|
||||
lcg serve
|
||||
|
||||
# Внешний сервер - принудительно HTTPS
|
||||
LCG_SERVER_HOST=192.168.1.100 lcg serve
|
||||
```
|
||||
|
||||
### Настройка SSL сертификатов
|
||||
|
||||
```bash
|
||||
# Использовать собственные сертификаты
|
||||
LCG_SERVER_SSL_CERT_FILE=/path/to/cert.pem \
|
||||
LCG_SERVER_SSL_KEY_FILE=/path/to/key.pem \
|
||||
lcg serve
|
||||
|
||||
# Разрешить HTTP для внешних хостов
|
||||
LCG_SERVER_HOST=192.168.1.100 \
|
||||
LCG_SERVER_ALLOW_HTTP=true \
|
||||
lcg serve
|
||||
```
|
||||
|
||||
### Docker контейнер
|
||||
|
||||
```dockerfile
|
||||
FROM golang:1.21-alpine AS builder
|
||||
# ... build steps ...
|
||||
|
||||
FROM alpine:latest
|
||||
COPY --from=builder /app/lcg /usr/local/bin/
|
||||
ENV LCG_SERVER_HOST=0.0.0.0
|
||||
ENV LCG_SERVER_ALLOW_HTTP=false
|
||||
CMD ["lcg", "serve"]
|
||||
```
|
||||
|
||||
### Systemd сервис
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=LCG Server
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=lcg
|
||||
WorkingDirectory=/opt/lcg
|
||||
ExecStart=/opt/lcg/lcg serve
|
||||
Environment=LCG_SERVER_HOST=0.0.0.0
|
||||
Environment=LCG_SERVER_ALLOW_HTTP=false
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
## 🔧 Технические детали
|
||||
|
||||
### Генерация сертификата
|
||||
|
||||
Самоподписанный сертификат генерируется с:
|
||||
|
||||
- **Размер ключа**: 2048 бит RSA
|
||||
- **Срок действия**: 1 год
|
||||
- **Поддерживаемые хосты**: localhost, 127.0.0.1, указанный хост
|
||||
- **Использование**: Server Authentication
|
||||
|
||||
### Безопасные хосты
|
||||
|
||||
Следующие хосты считаются безопасными для HTTP:
|
||||
|
||||
- `localhost`
|
||||
- `127.0.0.1`
|
||||
- `::1` (IPv6 localhost)
|
||||
|
||||
### Проверка безопасности
|
||||
|
||||
```go
|
||||
// Проверка хоста
|
||||
if !ssl.IsSecureHost(host) {
|
||||
// Принудительно HTTPS
|
||||
useHTTPS = true
|
||||
}
|
||||
|
||||
// Проверка разрешения HTTP
|
||||
if config.AppConfig.Server.AllowHTTP {
|
||||
useHTTPS = false
|
||||
}
|
||||
```
|
||||
|
||||
## 🛠️ Отладка
|
||||
|
||||
### Проверка конфигурации
|
||||
|
||||
```bash
|
||||
# Показать текущую конфигурацию
|
||||
lcg config --full | jq '.server'
|
||||
|
||||
# Проверить SSL сертификаты
|
||||
ls -la ~/.config/lcg/config/server/ssl/
|
||||
|
||||
# Проверить переменные окружения
|
||||
env | grep LCG_SERVER
|
||||
```
|
||||
|
||||
### Логи безопасности
|
||||
|
||||
```bash
|
||||
# Запуск с отладкой
|
||||
LCG_SERVER_HOST=192.168.1.100 lcg serve --debug
|
||||
|
||||
# Проверка SSL
|
||||
openssl x509 -in ~/.config/lcg/config/server/ssl/cert.pem -text -noout
|
||||
```
|
||||
|
||||
## ⚠️ Важные замечания
|
||||
|
||||
### Безопасность
|
||||
|
||||
1. **Самоподписанные сертификаты** - браузеры будут показывать предупреждение
|
||||
2. **Продакшен** - используйте настоящие SSL сертификаты от CA
|
||||
3. **Сетевой доступ** - HTTPS защищает трафик, но не аутентификацию
|
||||
|
||||
### Производительность
|
||||
|
||||
1. **HTTPS** - небольшая нагрузка на CPU для шифрования
|
||||
2. **Сертификаты** - генерируются один раз, затем кэшируются
|
||||
3. **Память** - сертификаты загружаются в память при запуске
|
||||
|
||||
## 📚 Связанные файлы
|
||||
|
||||
- `config/config.go` - конфигурация безопасности
|
||||
- `ssl/ssl.go` - генерация и управление сертификатами
|
||||
- `serve/serve.go` - HTTP/HTTPS сервер
|
||||
- `SECURITY_FEATURES.md` - эта документация
|
||||
|
||||
---
|
||||
|
||||
**Результат**: Приложение теперь автоматически обеспечивает безопасность соединения в зависимости от конфигурации хоста!
|
||||
Reference in New Issue
Block a user