# Тестирование Главная цель тестовых режимов — не упереться в лимиты Let’s Encrypt и быстро проверять интеграции. ## Лимиты Let’s Encrypt - production: обычно 5 сертификатов/неделю на домен - при частых ошибках можно быстро исчерпать лимит ## Варианты тестирования ### 1) Самоподписанный сертификат (рекомендуется для разработки) - `letsencrypt-regru --test-cert` Плюсы: - мгновенно (1–2 секунды) - без интернета - без DNS - структура файлов совпадает с Let’s Encrypt (`cert.pem`, `fullchain.pem`, …) Минусы: - браузер не доверяет сертификату ### 2) Let’s 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//` (аккуратно). --- ## Appendix (migrated from docs/TESTING_GUIDE.md) ## 🧪 Руководство по тестированию SSL сертификатов ### Зачем нужны тестовые сертификаты? Let's Encrypt имеет **строгие ограничения**: - ⚠️ Максимум **5 сертификатов в неделю** на один домен - ⚠️ Максимум **50 сертификатов в неделю** на аккаунт - ⚠️ **Бан на 1 неделю** при превышении лимита **Решение**: Используйте самоподписанные тестовые сертификаты для разработки! --- ### Быстрый старт #### Вариант 1: Через Makefile (рекомендуется) ```bash ## После установки скрипта (make install) sudo make test-cert ``` **Результат**: Создан сертификат в `/etc/letsencrypt/live/your-domain/` #### Вариант 2: Через Python скрипт ```bash sudo python3 letsencrypt_regru_api.py \ --config /etc/letsencrypt/regru_config.json \ --test-cert -v ``` #### Вариант 3: Через Bash скрипт (автономный) ```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. Подготовка конфигурации ```bash ## Создать конфигурацию sudo nano /etc/letsencrypt/regru_config.json ``` ```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. Создание тестового сертификата ```bash sudo make test-cert ``` #### 3. Проверка созданных файлов ```bash ls -la /etc/letsencrypt/live/test.example.com/ ## Должны быть: ## - privkey.pem (приватный ключ) ## - cert.pem (сертификат) ## - fullchain.pem (полная цепочка) ## - chain.pem (CA цепочка) ``` #### 4. Просмотр информации о сертификате ```bash openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -text -noout ``` --- ### Использование в Nginx #### Прямое использование ```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 ```bash #!/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 для тестирования ```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: Тестирование ```bash ## 1. Создать тестовый сертификат sudo make test-cert ## 2. Проверить работу с NPM ## Открыть https://your-domain и проверить ## 3. Убедиться что все работает ``` #### Шаг 2: Переключение на Let's Encrypt ```bash ## 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: Как проверить срок действия? ```bash openssl x509 -in /etc/letsencrypt/live/your-domain/cert.pem -noout -dates ``` #### Q: Как изменить срок действия? Отредактируйте `validity_days` в функции `generate_self_signed_certificate()`: ```python validity_days: int = 365 # Изменить на нужное количество дней ``` --- ### Устранение проблем #### Ошибка: Permission denied ```bash ## Запускайте с sudo sudo make test-cert ``` #### Ошибка: Module 'cryptography' not found ```bash ## Установите зависимости sudo pip3 install cryptography ``` #### NPM не показывает сертификат 1. Проверьте настройки NPM в конфигурации 2. Проверьте логи: `sudo make logs` 3. Попробуйте загрузить вручную через веб-интерфейс NPM #### Сертификат не создается ```bash ## Проверьте права ls -la /etc/letsencrypt/live/ ## Создайте директорию вручную sudo mkdir -p /etc/letsencrypt/live/ ## Проверьте конфигурацию sudo make check-config ``` --- ### Примеры использования #### Разработка с Docker ```dockerfile FROM nginx:alpine ## Копировать тестовый сертификат COPY test-certs/ /etc/nginx/ssl/ ## Конфигурация nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 443 ``` #### Локальное тестирование ```bash ## Создать сертификат для 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 ```bash #!/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 ``` --- ### Дополнительные ресурсы - 📘 [Let's Encrypt Rate Limits](https://letsencrypt.org/docs/rate-limits/) - 📘 [OpenSSL Documentation](https://www.openssl.org/docs/) - 📘 [Nginx Proxy Manager Docs](https://nginxproxymanager.com/guide/) --- ### Итоговая шпаргалка ```bash ## Установка 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 сертификаты без ограничений!