Files
go-lcg/SECURITY_FEATURES.md

6.2 KiB
Raw Blame History

🔒 Функции безопасности LCG

🛡️ Автоматическое принуждение к HTTPS

Логика безопасности

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

  1. Небезопасные хосты (не localhost/127.0.0.1) → принудительно HTTPS
  2. Безопасные хосты (localhost/127.0.0.1) → HTTP (если не указано иное)
  3. Переменная 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 сертификаты

Автоматическая генерация

Приложение автоматически генерирует самоподписанный сертификат если:

  1. Не указаны переменные LCG_SERVER_SSL_CERT_FILE и LCG_SERVER_SSL_KEY_FILE
  2. Не найдены файлы в ~/.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:

  • localhost
  • 127.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

⚠️ Важные замечания

Безопасность

  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 - эта документация

Результат: Приложение теперь автоматически обеспечивает безопасность соединения в зависимости от конфигурации хоста!