Добавлены новые документы и инструкции по настройке, использованию и тестированию SSL сертификатов Let's Encrypt с использованием API reg.ru. Обновлены зависимости в requirements.txt для поддержки новых функций. Включены подробные шаги по автоматизации, созданию и продлению сертификатов, а также интеграции с Nginx Proxy Manager.
This commit is contained in:
382
docs/ru/TESTING_GUIDE.md
Normal file
382
docs/ru/TESTING_GUIDE.md
Normal file
@@ -0,0 +1,382 @@
|
||||
# 🧪 Руководство по тестированию SSL сертификатов
|
||||
|
||||
## Зачем нужны тестовые сертификаты?
|
||||
|
||||
Let's Encrypt имеет **строгие ограничения**:
|
||||
- ⚠️ Максимум **5 сертификатов в неделю** на один домен
|
||||
- ⚠️ Максимум **50 сертификатов в неделю** на аккаунт
|
||||
- ⚠️ **Бан на 1 неделю** при превышении лимита
|
||||
|
||||
**Решение**: Используйте самоподписанные тестовые сертификаты для разработки!
|
||||
|
||||
---
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
### Вариант 1: Через Makefile (рекомендуется)
|
||||
|
||||
```bash
|
||||
# После установки скрипта (make install)
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
**Результат**: Создан сертификат в `/etc/letsencrypt/live/ваш-домен/`
|
||||
|
||||
### Вариант 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://ваш-домен и проверить
|
||||
|
||||
# 3. Убедиться что все работает
|
||||
```
|
||||
|
||||
### Шаг 2: Переключение на Let's Encrypt
|
||||
|
||||
```bash
|
||||
# 1. Удалить тестовый сертификат
|
||||
sudo rm -rf /etc/letsencrypt/live/ваш-домен/
|
||||
|
||||
# 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/ваш-домен/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/домен/
|
||||
sudo make obtain
|
||||
|
||||
# Автоматическое обновление
|
||||
sudo make run
|
||||
```
|
||||
|
||||
**Готово!** 🎉 Теперь вы можете тестировать SSL сертификаты без ограничений!
|
||||
Reference in New Issue
Block a user