10 KiB
🧪 Руководство по тестированию SSL сертификатов
Зачем нужны тестовые сертификаты?
Let's Encrypt имеет строгие ограничения:
- ⚠️ Максимум 5 сертификатов в неделю на один домен
- ⚠️ Максимум 50 сертификатов в неделю на аккаунт
- ⚠️ Бан на 1 неделю при превышении лимита
Решение: Используйте самоподписанные тестовые сертификаты для разработки!
Быстрый старт
Вариант 1: Через Makefile (рекомендуется)
# После установки скрипта (make install)
sudo make test-cert
Результат: Создан сертификат в /etc/letsencrypt/live/ваш-домен/
Вариант 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:
- Откройте веб-интерфейс NPM
- Перейдите в SSL Certificates
- Найдите ваш домен в списке
- ⚠️ Будет помечен как "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://ваш-домен и проверить
# 3. Убедиться что все работает
Шаг 2: Переключение на Let's Encrypt
# 1. Удалить тестовый сертификат
sudo rm -rf /etc/letsencrypt/live/ваш-домен/
# 2. Получить настоящий сертификат
sudo make obtain
# 3. Проверить обновление в NPM
sudo make status
Частые вопросы
Q: Почему браузер показывает предупреждение?
A: Самоподписанные сертификаты не доверяются браузерами. Это нормально для тестирования.
Чтобы избежать предупреждения в браузере (только для локального тестирования):
- Chrome:
chrome://flags/#allow-insecure-localhost - 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/ваш-домен/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 не показывает сертификат
- Проверьте настройки NPM в конфигурации
- Проверьте логи:
sudo make logs - Попробуйте загрузить вручную через веб-интерфейс 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/домен/
sudo make obtain
# Автоматическое обновление
sudo make run
Готово! 🎉 Теперь вы можете тестировать SSL сертификаты без ограничений!