bg-tutorials

Как сгенерировать CSR на Apache

В этом руководстве показано, как сгенерировать CSR на Apache с помощью командной строки OpenSSL на том же сервере, на котором работает Apache HTTP Server. Вы создадите два файла одной командой: новый приватный ключ и соответствующий CSR (Certificate Signing Request), который вы отправите в свой Центр сертификации.

Приведённые ниже шаги работают в любом современном дистрибутиве Linux, на котором работает Apache (Ubuntu, Debian, RHEL, AlmaLinux, Rocky Linux, Amazon Linux 2023), поскольку каждый из них поставляется с OpenSSL 1.1.1 или OpenSSL 3.x. Обе версии по умолчанию подписывают запрос с помощью SHA-256, поэтому добавлять флаг дайджеста не нужно. Та же команда работает и на FreeBSD, и на macOS с Apache.

Шаг 1: Подключитесь к серверу Apache

Откройте Terminal на macOS или Linux, или PowerShell либо Windows Terminal на Windows, и подключитесь к серверу по SSH. Замените имя пользователя и хост на свои:

ssh your-user@your-apache-server

Генерируйте CSR на том же сервере, на котором будет размещён сертификат. Приватный ключ создаётся рядом с CSR и должен оставаться именно на этом сервере, поэтому выполнение команды на ноутбуке с последующим переносом ключа на сервер лишено смысла. Также рекомендуется выполнять работу в отдельном каталоге, который вы легко сможете найти позже, например:

sudo mkdir -p /etc/ssl/yourdomain
cd /etc/ssl/yourdomain

Шаг 2: Сгенерируйте приватный ключ и CSR

Если вы уже сгенерировали CSR с помощью другого инструмента, переходите к разделу установка сертификата на Apache.

Выполните следующую команду OpenSSL. Она за один шаг создаёт RSA-ключ длиной 2048 бит и CSR, при этом субъект и Subject Alternative Names (SAN) указываются прямо в команде, поэтому OpenSSL не будет задавать дополнительные вопросы:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

Что делает каждая часть:

  • -newkey rsa:2048 генерирует новый RSA-ключ длиной 2048 бит. 2048 бит — это текущий минимум для публичных сертификатов; вы можете использовать rsa:4096 для более длинного ключа, либо перейти на ECDSA (см. ниже).
  • -nodes оставляет приватный ключ незашифрованным, чтобы Apache мог считывать его при запуске без запроса пароля.
  • -keyout и -out задают имена файлов приватного ключа и CSR.
  • -subj указывает субъект сертификата. Введите здесь реальное название вашей компании, штат и город, а не значения-заполнители. CN (Common Name) — это ваш основной домен.
  • -addext «subjectAltName=…» перечисляет все имена хостов, которые должен покрывать сертификат. Публичные CA проверяют запрос по списку SAN, поэтому включите сюда и Common Name.

Замените yourdomain.com на ваш реальный домен во всех местах. Чтобы покрыть дополнительные имена хостов, добавьте их в список SAN через запятую, например DNS:api.yourdomain.com. Для сертификата с wildcard включите и wildcard-имя, и обычный домен: DNS:*.yourdomain.com,DNS:yourdomain.com. Используйте только буквенно-цифровые символы в полях субъекта и укажите официальный двухбуквенный код страны в поле C.

Если вы предпочитаете ключ ECDSA (более компактный и быстрый, с широко поддерживаемой кривой P-256), сгенерируйте ключ и CSR так:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

Если вы предпочитаете отвечать на запросы поочерёдно для каждого поля, выполните openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr без -subj и без -addext. OpenSSL по очереди запросит каждое поле. Когда это произойдёт:

  • Country Name (C): двухбуквенный код ISO вашей страны, например US или GB. Для сертификатов Business Validation или Extended Validation это должна быть официальная страна регистрации вашей организации.
  • State or Province Name (ST): полное название, например California. Не сокращайте.
  • Locality Name (L): город или населённый пункт, например San Francisco.
  • Organization Name (O): официальное зарегистрированное название вашей компании, например GPI Holding LLC. Для сертификатов Domain Validation можно указать NA.
  • Organizational Unit Name (OU): это поле устарело и игнорируется публичными CA. Оставьте его пустым, нажав Enter.
  • Common Name (CN): полное доменное имя (Fully Qualified Domain Name), для которого выпускается сертификат, например www.yourdomain.com. Для wildcard используйте *.yourdomain.com.
  • Email Address: необязательно и не используется публичными CA. Можно оставить пустым.
  • A challenge password и An optional company name: оба этих атрибута устарели, и публичные CA их игнорируют. Оставьте их пустыми.

Без флага -addext итоговый CSR не будет содержать записей SAN. Публичные CA проверяют запрос по списку SAN и отклонят (или незаметно переопределят) запрос без него, поэтому рекомендуемый путь — это команда с указанием -subj и -addext, приведённая выше.

Шаг 3: Найдите созданные файлы

Выведите содержимое текущего каталога, чтобы убедиться, что оба файла были созданы:

ls

Вы увидите два новых файла:

  • yourdomain.key: ваш приватный ключ. Храните его на сервере, делайте надёжные резервные копии и никогда никому не отправляйте, включая Центр сертификации. Тот, кто владеет ключом, может выдать себя за ваш сайт.
  • yourdomain.csr: ваш Certificate Signing Request. Именно этот файл вы отправляете провайдеру SSL.

Ограничьте доступ к приватному ключу, чтобы читать его мог только владелец файла:

chmod 600 yourdomain.key

Шаг 4: Проверьте CSR (необязательно, но рекомендуется)

Перед отправкой убедитесь, что CSR содержит верный субъект и SAN и что его подпись действительна. Эта команда расшифровывает запрос локально с помощью OpenSSL:

openssl req -noout -text -verify -in yourdomain.csr

Убедитесь, что строка Subject отображает ваши данные, что X509v3 Subject Alternative Name перечисляет все ожидаемые имена хостов, а проверка подписи выводит verify OK. Алгоритм подписи должен быть указан как sha256WithRSAEncryption (или ecdsa-with-SHA256 для ключа ECDSA). Если вы предпочитаете не работать с командной строкой, вставьте CSR в наш онлайн-инструмент CSR decoder, чтобы посмотреть те же поля в браузере.

Шаг 5: Отправьте свой CSR

Чтобы скопировать CSR для оформления заказа, выведите его содержимое:

cat yourdomain.csr

Вы увидите блок текста, похожий на этот:

-----BEGIN CERTIFICATE REQUEST-----
MIICyzCCAbMCAQAwTDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw...
...(many more lines of base64 characters)...
-----END CERTIFICATE REQUEST-----

Скопируйте весь блок, включая строки ——BEGIN CERTIFICATE REQUEST—— и ——END CERTIFICATE REQUEST—— (у каждого маркера по пять дефисов с обеих сторон). Именно этот блок целиком является вашим CSR. Вставьте его в форму заказа при оформлении покупки и оставьте соответствующий приватный ключ на месте, на сервере.

Если вы предпочитаете не работать с командной строкой, вы также можете сформировать запрос с помощью нашего онлайн-инструмента CSR Generator. Обратите внимание, что он генерирует приватный ключ в вашем браузере, поэтому сохраните этот ключ самостоятельно и перенесите его на сервер.

После того как ваш CA проверит запрос, вы получите сертификат. В зависимости от уровня проверки это занимает несколько минут для Domain Validation, либо до нескольких рабочих дней для Business Validation и Extended Validation.

Шаг 6: Установите сертификат на Apache

Когда сертификат придёт, разместите выпущенный сертификат (включая все промежуточные сертификаты, объединённые в один файл fullchain) и приватный ключ на сервере, а затем укажите на них Apache в конфигурации virtual host вашего сайта:

SSLCertificateFile    /etc/ssl/yourdomain/fullchain.crt
SSLCertificateKeyFile /etc/ssl/yourdomain/yourdomain.key

Современный Apache (версии 2.4.8 и новее) считывает конечный сертификат и все промежуточные из одного файла, переданного директиве SSLCertificateFile, поэтому объедините ваш сертификат и пакет CA в один файл. Устаревшая директива SSLCertificateChainFile не рекомендуется к использованию в текущих версиях Apache. Проверьте конфигурацию командой apachectl configtest и перезагрузите Apache, чтобы применить изменения. Полный порядок действий описан в нашем руководстве как установить SSL-сертификат на Apache.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.