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-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.