Справочная информация для правильной настройки файлов SSL-сертификатов.
Мы регулярно получаем вопросы о сообщениях об ошибках, связанных с проблемами SSL-сертификатов — чаще всего о том, что ваш сертификат не является доверенным.
В большинстве случаев основная причина заключается в том, что файл сертификата содержит только сертификат вашего сервера.
Обеспечение безопасности сертификата
При получении файлов сертификатов вам будет предоставлен файл публичного сертификата.
Если вы самостоятельно сгенерировали CSR (запрос на подпись сертификата), файл закрытого ключа уже у вас. В противном случае поставщик сертификатов также предоставит закрытый ключ.
Закрытый ключ начинается с “—–BEGIN PRIVATE KEY—–“ и заканчивается на “—–END PRIVATE KEY—–“.
Этот файл, а также любой файл, который может содержать этот закрытый ключ, НИКОГДА не должен передаваться кому-либо или загружаться куда-либо. Он должен быть настроен ТОЛЬКО на сервере, который он предназначен защищать.
Ни один легитимный инструмент или система никогда не запросит информацию о закрытом ключе.
Как это работает
Когда клиент пытается установить SSL-сессию с сервером, сертификат сервера должен быть проверен через цепочку доверия. От сервера клиент получает публичный сертификат (часто называемый Leaf Certificate) и пакет промежуточных сертификатов. Далее клиент:
- Изучает Leaf Certificate и видит, что он подписан промежуточным сертификатом, находящимся выше по цепочке
- Этот второй сертификат, в свою очередь, также будет подписан еще одним центром сертификации, находящимся выше по цепочке
- …до тех пор, пока не будет достигнут сертификат, подписанный Корневым центром сертификации (Root authority).
- Клиент ищет сертификат Корневого центра в своем внутреннем хранилище; эти корневые сертификаты хранятся в Windows, macOS, iOS и Android
- Если клиент находит корневой сертификат в своем хранилище, цепочка считается действительной
- Клиент отправляет небольшой фрагмент зашифрованных данных на сервер. Если сервер может расшифровать данные, это доказывает, что сервер действительно обладает Закрытым ключом (Private Key) и является владельцем Leaf-сертификата
Почему сертификаты могут отображаться как недоверенные
Ваш сервер предоставляет Leaf-сертификат, но клиенты не знают обо всех промежуточных сертификатах. Без промежуточного сертификата клиент не сможет проверить цепочку, и соединение становится “недоверенным”.
Решение
Сервер должен предоставлять промежуточные сертификаты вместе с Leaf-сертификатом. Для этого необходимо убедиться, что файл сертификата, который вы развертываете на сервере, содержит не только Leaf-сертификат, но и промежуточные сертификаты.
Нужно отредактировать PEM-файл сертификата с помощью текстового редактора и убедиться, что окончательный формат выглядит следующим образом:
----BEGIN CERTIFICATE-----
[Your Domain/Server (Leaf) Certificate ]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Intermediate CA Certificate]
-----END CERTIFICATE-----
В файле сертификата могут потребоваться дополнительные Промежуточные сертификаты для завершения цепочки.
Права доступа к файлам в Linux
Убедитесь, что файлы сертификатов имеют правильные права доступа после сохранения их в нужное место:
sudo chown phonesystem:phonesystem /var/lib/3cxpbx/Bin/nginx/conf/Instance1/.pem
sudo chmod 640 /var/lib/3cxpbx/Bin/nginx/conf/Instance1/.pem
Где находятся мои промежуточные сертификаты?
Поставщик сертификатов должен предоставить все необходимые промежуточные сертификаты, и фактически большинство предоставляет файлы, которые можно просто “вставить” в систему.
Если по какой-либо причине их нужно воссоздать, для этого существует ряд онлайн-инструментов; один из примеров — https://whatsmychaincert.com/#generate.
Убедитесь, что вы никогда не загружаете файл закрытого ключа.
Примечание о включении Корневого сертификата
Большинство системных администраторов для удобства добавляют Корневой сертификат в конец PEM-файла сертификата, но имейте в виду следующие моменты:
- Как правило, в этом нет необходимости; хранилище клиента (обычно из операционной системы) уже имеет его предустановленным
- Если у клиента еще нет Корневого сертификата, он не должен доверять серверу, даже если тот отправляет Корневой сертификат
- Если сервер отправляет Корневой сертификат для каждого SSL-рукопожатия (handshake), это добавляет от 1 КБ до 2 КБ к каждому новому рукопожатию соединения, без какой-либо функциональной пользы
Присоединяйтесь к обсуждению
Присоединяйтесь к обсуждению на нашем форуме. Подписывайтесь на нас в X и LinkedIn, чтобы быть в курсе последних новостей и релизов функций.



