mirror of
https://github.com/Direct-Dev-Ru/go-lcg.git
synced 2025-11-16 01:29:55 +00:00
6.2 KiB
6.2 KiB
🔒 Функции безопасности LCG
🛡️ Автоматическое принуждение к HTTPS
Логика безопасности
Приложение автоматически определяет, нужно ли использовать HTTPS:
- Небезопасные хосты (не localhost/127.0.0.1) → принудительно HTTPS
- Безопасные хосты (localhost/127.0.0.1) → HTTP (если не указано иное)
- Переменная
LCG_SERVER_ALLOW_HTTP=true→ разрешает HTTP для любых хостов
Примеры
# Небезопасно - принудительно 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 сертификаты
Автоматическая генерация
Приложение автоматически генерирует самоподписанный сертификат если:
- Не указаны переменные
LCG_SERVER_SSL_CERT_FILEиLCG_SERVER_SSL_KEY_FILE - Не найдены файлы в
~/.config/lcg/server/ssl/cert.pemи~/.config/lcg/server/ssl/key.pem
Расположение сертификатов
~/.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 |
Путь к ключу | "" (авто) |
🚀 Примеры использования
Безопасный режим (по умолчанию)
# Локальный сервер - HTTP
lcg serve
# Внешний сервер - принудительно HTTPS
LCG_SERVER_HOST=192.168.1.100 lcg serve
Настройка SSL сертификатов
# Использовать собственные сертификаты
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 контейнер
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 сервис
[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:
localhost127.0.0.1::1(IPv6 localhost)
Проверка безопасности
// Проверка хоста
if !ssl.IsSecureHost(host) {
// Принудительно HTTPS
useHTTPS = true
}
// Проверка разрешения HTTP
if config.AppConfig.Server.AllowHTTP {
useHTTPS = false
}
🛠️ Отладка
Проверка конфигурации
# Показать текущую конфигурацию
lcg config --full | jq '.server'
# Проверить SSL сертификаты
ls -la ~/.config/lcg/config/server/ssl/
# Проверить переменные окружения
env | grep LCG_SERVER
Логи безопасности
# Запуск с отладкой
LCG_SERVER_HOST=192.168.1.100 lcg serve --debug
# Проверка SSL
openssl x509 -in ~/.config/lcg/config/server/ssl/cert.pem -text -noout
⚠️ Важные замечания
Безопасность
- Самоподписанные сертификаты - браузеры будут показывать предупреждение
- Продакшен - используйте настоящие SSL сертификаты от CA
- Сетевой доступ - HTTPS защищает трафик, но не аутентификацию
Производительность
- HTTPS - небольшая нагрузка на CPU для шифрования
- Сертификаты - генерируются один раз, затем кэшируются
- Память - сертификаты загружаются в память при запуске
📚 Связанные файлы
config/config.go- конфигурация безопасностиssl/ssl.go- генерация и управление сертификатамиserve/serve.go- HTTP/HTTPS серверSECURITY_FEATURES.md- эта документация
Результат: Приложение теперь автоматически обеспечивает безопасность соединения в зависимости от конфигурации хоста!