444 lines
12 KiB
Markdown
444 lines
12 KiB
Markdown
# Тестирование
|
||
|
||
Главная цель тестовых режимов — не упереться в лимиты 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/<domain>/` (аккуратно).
|
||
|
||
|
||
---
|
||
|
||
## Appendix (migrated from docs/TESTING_GUIDE.md)
|
||
<!-- 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 сертификаты без ограничений!
|
||
|