Files
Dmitriy Fofanov 491db2d5bf
Синхронизация Wiki / Синхронизация Wiki (push) Successful in 2s
Исправлены опечатки и улучшена читаемость документации
2026-02-25 07:54:18 +03:00

12 KiB
Raw Permalink Blame History

Тестирование

Главная цель тестовых режимов — не упереться в лимиты Lets Encrypt и быстро проверять интеграции.

Лимиты Lets Encrypt

  • production: обычно 5 сертификатов/неделю на домен
  • при частых ошибках можно быстро исчерпать лимит

Варианты тестирования

1) Самоподписанный сертификат (рекомендуется для разработки)

  • letsencrypt-regru --test-cert

Плюсы:

  • мгновенно (12 секунды)
  • без интернета
  • без DNS
  • структура файлов совпадает с Lets Encrypt (cert.pem, fullchain.pem, …)

Минусы:

  • браузер не доверяет сертификату

2) Lets Encrypt staging

  • letsencrypt-regru --staging

Плюсы:

  • полностью реальный процесс ACME
  • нет лимитов
  • проверяет DNS хуки и certbot

Минусы:

  • staging сертификаты не доверяются браузером

3) Диагностика API и DNS

  • letsencrypt-regru --test-api -v
  • letsencrypt-regru --test-dns -v

Рекомендуется прогонять перед production получением.

Переход тест → production

  1. убедиться что всё работает на --staging или --test-cert
  2. затем выполнить --obtain

Если ранее создавался тестовый сертификат и вы хотите «чисто» перейти на production, иногда удобно удалить старую папку сертификата для домена в cert_dir/<domain>/ (аккуратно).


Appendix (migrated from docs/TESTING_GUIDE.md)

🧪 Руководство по тестированию SSL сертификатов

Зачем нужны тестовые сертификаты?

Let's Encrypt имеет строгие ограничения:

  • ⚠️ Максимум 5 сертификатов в неделю на один домен
  • ⚠️ Максимум 50 сертификатов в неделю на аккаунт
  • ⚠️ Бан на 1 неделю при превышении лимита

Решение: Используйте самоподписанные тестовые сертификаты для разработки!


Быстрый старт

Вариант 1: Через Makefile (рекомендуется)

## После установки скрипта (make install)
sudo make test-cert

Результат: Создан сертификат в /etc/letsencrypt/live/your-domain/

Вариант 2: Через Python скрипт

sudo python3 letsencrypt_regru_api.py \
    --config /etc/letsencrypt/regru_config.json \
    --test-cert -v

Вариант 3: Через Bash скрипт (автономный)

## Простой домен
sudo ./test_certificate.sh example.com no

## С wildcard
sudo ./test_certificate.sh example.com yes

Сравнение методов

Метод Скорость Требования NPM интеграция Лимиты
Let's Encrypt 2-5 минут Internet, DNS Да ⚠️ 5/неделю
Тестовый (Python) 1-2 секунды Только Python Да Нет
Тестовый (Bash) 1-2 секунды Только OpenSSL Ручная Нет

Детальная инструкция

1. Подготовка конфигурации

## Создать конфигурацию
sudo nano /etc/letsencrypt/regru_config.json
{
    "domain": "test.example.com",
    "wildcard": true,
    "cert_dir": "/etc/letsencrypt/live",
    "npm_enabled": true,
    "npm_host": "https://npm.example.com",
    "npm_email": "admin@example.com",
    "npm_password": "your_password"
}

2. Создание тестового сертификата

sudo make test-cert

3. Проверка созданных файлов

ls -la /etc/letsencrypt/live/test.example.com/
## Должны быть:
## - privkey.pem     (приватный ключ)
## - cert.pem        (сертификат)
## - fullchain.pem   (полная цепочка)
## - chain.pem       (CA цепочка)

4. Просмотр информации о сертификате

openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -text -noout

Использование в Nginx

Прямое использование

server {
    listen 443 ssl;
    server_name test.example.com;

    ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test.example.com/privkey.pem;

    # ... остальная конфигурация
}

Через Nginx Proxy Manager

Если npm_enabled: true в конфигурации, сертификат автоматически загрузится в NPM.

Проверка в NPM:

  1. Откройте веб-интерфейс NPM
  2. Перейдите в SSL Certificates
  3. Найдите ваш домен в списке
  4. ⚠️ Будет помечен как "Custom" (не Let's Encrypt)

Автоматизация тестирования

Скрипт для CI/CD

#!/bin/bash
## test_ssl_integration.sh

set -e

echo "🧪 Тестирование SSL интеграции..."

## 1. Создать тестовый сертификат
sudo python3 letsencrypt_regru_api.py \
    --config test_config.json \
    --test-cert

## 2. Проверить файлы
if [ ! -f "/etc/letsencrypt/live/test.example.com/fullchain.pem" ]; then
    echo "❌ Сертификат не создан"
    exit 1
fi

## 3. Проверить валидность
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -checkend 0
if [ $? -eq 0 ]; then
    echo "✅ Сертификат валиден"
else
    echo "❌ Сертификат невалиден"
    exit 1
fi

## 4. Проверить загрузку в NPM (опционально)
## ... ваша проверка через API NPM

echo "✅ Все тесты пройдены"

Makefile для тестирования

.PHONY: test-ssl test-npm test-all

test-ssl:
	@echo "Создание тестового сертификата..."
	sudo make test-cert
	@echo "Проверка файлов..."
	test -f /etc/letsencrypt/live/$(DOMAIN)/fullchain.pem
	@echo "✅ SSL тест пройден"

test-npm:
	@echo "Проверка интеграции с NPM..."
	# Ваши проверки API NPM
	@echo "✅ NPM тест пройден"

test-all: test-ssl test-npm
	@echo "✅ Все тесты пройдены"

Переход на production

Шаг 1: Тестирование

## 1. Создать тестовый сертификат
sudo make test-cert

## 2. Проверить работу с NPM
## Открыть https://your-domain и проверить

## 3. Убедиться что все работает

Шаг 2: Переключение на Let's Encrypt

## 1. Удалить тестовый сертификат
sudo rm -rf /etc/letsencrypt/live/your-domain/

## 2. Получить настоящий сертификат
sudo make obtain

## 3. Проверить обновление в NPM
sudo make status

Частые вопросы

Q: Почему браузер показывает предупреждение?

A: Самоподписанные сертификаты не доверяются браузерами. Это нормально для тестирования.

Чтобы избежать предупреждения в браузере (только для локального тестирования):

  1. Chrome: chrome://flags/#allow-insecure-localhost
  2. Firefox: Нажмите "Advanced" → "Accept the Risk"

Q: Можно ли использовать для production?

A: НЕТ! Тестовые сертификаты только для разработки и тестирования.

Q: Как часто можно создавать тестовые сертификаты?

A: Неограниченно! Нет никаких лимитов.

Q: Загружаются ли в NPM автоматически?

A: Да, если npm_enabled: true в конфигурации.

Q: Работают ли с wildcard доменами?

A: Да! Просто установите "wildcard": true в конфигурации.

Q: Как проверить срок действия?

openssl x509 -in /etc/letsencrypt/live/your-domain/cert.pem -noout -dates

Q: Как изменить срок действия?

Отредактируйте validity_days в функции generate_self_signed_certificate():

validity_days: int = 365  # Изменить на нужное количество дней

Устранение проблем

Ошибка: Permission denied

## Запускайте с sudo
sudo make test-cert

Ошибка: Module 'cryptography' not found

## Установите зависимости
sudo pip3 install cryptography

NPM не показывает сертификат

  1. Проверьте настройки NPM в конфигурации
  2. Проверьте логи: sudo make logs
  3. Попробуйте загрузить вручную через веб-интерфейс NPM

Сертификат не создается

## Проверьте права
ls -la /etc/letsencrypt/live/

## Создайте директорию вручную
sudo mkdir -p /etc/letsencrypt/live/

## Проверьте конфигурацию
sudo make check-config

Примеры использования

Разработка с Docker

FROM nginx:alpine

## Копировать тестовый сертификат
COPY test-certs/ /etc/nginx/ssl/

## Конфигурация nginx
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 443

Локальное тестирование

## Создать сертификат для localhost
sudo python3 letsencrypt_regru_api.py --test-cert

## Добавить в /etc/hosts
echo "127.0.0.1 test.example.com" | sudo tee -a /etc/hosts

## Запустить nginx
sudo nginx -t && sudo nginx -s reload

## Открыть в браузере
open https://test.example.com

Автоматическое тестирование перед deployment

#!/bin/bash
## pre-deploy.sh

## Тестовая проверка SSL
sudo make test-cert
if [ $? -eq 0 ]; then
    echo "✅ Тестовый сертификат создан успешно"
    echo "✅ Готово к созданию production сертификата"
    sudo make obtain
else
    echo "❌ Ошибка при создании тестового сертификата"
    exit 1
fi

Дополнительные ресурсы


Итоговая шпаргалка

## Установка
sudo make install

## Конфигурация
sudo nano /etc/letsencrypt/regru_config.json

## Создать тестовый сертификат
sudo make test-cert

## Проверить
sudo make check-config
sudo make status

## Переход на production
sudo rm -rf /etc/letsencrypt/live/your-domain/
sudo make obtain

## Автоматическое обновление
sudo make run

Готово! 🎉 Теперь вы можете тестировать SSL сертификаты без ограничений!