CSR (Certificate Signing Request — запрос на подпись сертификата) — это блок закодированных данных, который вы отправляете удостоверяющему центру (CA) для получения SSL-сертификата. Он содержит ваш открытый ключ и информацию о домене. CA использует его для создания вашего сертификата.
Что содержится в CSR
| Поле | Пример | Обязательно? |
|---|---|---|
| Common Name (CN) | example.com | Да |
| Открытый ключ | Ваш открытый ключ RSA или ECDSA | Да |
| Алгоритм ключа | ECDSA P-256 или RSA 2048 | Да |
| Организация | Your Company LLC | Опционально для DV |
| Страна | US | Опционально для DV |
| SAN | www.example.com, api.example.com | Для мультидоменных |
Для DV-сертификатов (таких как Let’s Encrypt) имеют значение только доменное имя (имена) и открытый ключ. Поля организации игнорируются.
Как работает генерация CSR
- Генерация пары ключей — закрытый ключ и открытый ключ
- Создание CSR — кодирование открытого ключа + информации о домене в стандартный формат (PKCS#10)
- Подписание CSR — подпись закрытым ключом (доказывает, что у вас есть соответствующий закрытый ключ)
- Отправка в CA — CA проверяет вашу принадлежность домена, затем использует CSR для создания сертификата
Закрытый ключ никогда не покидает вашу систему. CSR содержит только открытый ключ.
GetHTTPS обрабатывает CSR автоматически
С традиционными инструментами вам пришлось бы вручную генерировать CSR через OpenSSL:
# Ручной способ (не нужен с GetHTTPS)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
С GetHTTPS вы никогда не видите и не касаетесь CSR. Инструмент:
- Генерирует пару ключей в вашем браузере (Web Crypto API)
- Автоматически создает CSR на основе введенного домена
- Отправляет его в Let’s Encrypt как часть ACME-процесса
- Предоставляет вам подписанный сертификат для скачивания
CSR — это внутренний шаг: вы просто вводите домен и получаете сертификат.
Генерация CSR вручную (когда это необходимо)
Если вам нужен отдельный CSR (для коммерческого CA или платформы, требующей загрузки CSR), вот как это сделать:
ECDSA P-256 (рекомендуется)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
RSA 2048
openssl req -new -newkey rsa:2048 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com"
С несколькими доменами (SAN)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com"
Проверка CSR
openssl req -in csr.pem -noout -text
Это покажет доменное имя (имена), алгоритм ключа и размер ключа, содержащиеся в CSR.
CSR в протоколе ACME
В протоколе ACME (используемом Let’s Encrypt) CSR отправляется на этапе финализации — после прохождения валидации домена. CA использует открытый ключ из CSR для создания вашего сертификата. Формат CSR — PKCS#10, закодированный в base64url в ACME JSON-сообщении.
В GetHTTPS весь этот процесс выполняется на JavaScript с использованием Web Crypto API и библиотеки pkijs. Вы никогда не видите сырые байты CSR.
Часто задаваемые вопросы
Нужно ли хранить файл CSR?
Нет. CSR используется только во время запроса сертификата. После того как CA выдаст ваш сертификат, CSR больше не нужен. Храните ваш закрытый ключ и сертификат — CSR можно удалить.
Можно ли повторно использовать CSR при обновлении?
Технически да, но лучше генерировать новую пару ключей и CSR при каждом обновлении. Это соответствует принципу ротации ключей и ограничивает последствия в случае компрометации ключа.
В чем разница между CSR и сертификатом?
CSR — это запрос: он содержит ваш открытый ключ и просит CA подписать его. Сертификат — это результат: подписанное CA заявление о том, что ваш открытый ключ принадлежит вашему домену. CSR — это входные данные; сертификат — это выходные данные.
Можно ли сгенерировать CSR для wildcard-домена?
Да. Используйте *.example.com в качестве Common Name:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
-keyout privkey.pem -out csr.pem -nodes \
-subj "/CN=*.example.com"
С GetHTTPS вам не нужно генерировать CSR вручную — введите *.example.com в качестве домена, и GetHTTPS обработает CSR автоматически.
Что означает «key usage» в CSR?
Расширения key usage указывают, для чего может использоваться сертификат — обычно «Digital Signature» и «Key Encipherment» для TLS-сертификатов. GetHTTPS и большинство ACME-клиентов устанавливают их правильно по умолчанию. Вам нужно заботиться о key usage только при ручной генерации CSR для коммерческого CA с особыми требованиями.