Путаница между подписанным сертификатом и ошибкой: - x509: сертификат подписан неизвестным органом

Итак, я работаю над домашним сервером синапса matrix.org и пытаюсь объединиться.

Я получил сертификат для моего домашнего сервера, внутри него было 3 файла: chain.crt (двоичный), server.crt (небинарный) и server.key (небинарный).

server.crt имеет начальный сертификат, а server.key имеет закрытый ключ. Я выполняю обратное проксирование своего домашнего сервера с помощью веб-сервера Nginx, и в конфигурации Nginx я указал сертификат SSl на server.crt и ключ SSl на server.key.

Проблема, с которой я сталкиваюсь в https://federationtester.matrix.org/, заключается в том, что он показывает x509: сертификат подписан неизвестным авторитетом.

Нужно ли мне куда-то включать chain.crt (двоичный файл)?


person curious_21    schedule 20.11.2019    source источник


Ответы (2)


Обычно рекомендуется включать промежуточные сертификаты в конфигурацию TLS. Но сертификат обычно должен правильно проверяться в любом случае, потому что clienta обычно также имеет различные промежуточные сертификаты в своем хранилище и может таким образом строить цепочку.

Ваш сертификат подписан публичным центром сертификации? Synapse требует наличия такого сертификата уже пару версий. Сертификат по умолчанию, вероятно, самоподписанный, за исключением того, что вы настроили встроенный клиент ACME для получения одного из Let's Encrypt.

Один из способов проверить это - открыть URL-адрес федерации в вашем браузере и посмотреть, не выдает ли он ошибку проверки.

person lub    schedule 20.11.2019
comment
Сертификат подписан публичным центром сертификации thawte. Я не использую встроенный ACME, так как получил сертификат от центра сертификации. - person curious_21; 20.11.2019
comment
Является ли chain.crt промежуточным сертификатом, и если он промежуточный, то как включить его в веб-сервер nginx? - person curious_21; 20.11.2019
comment
Только браузеры имеют промежуточные сертификаты в своем магазине. Практически все остальное потребует настройки надлежащего сертификата цепочки. - person Tulir; 20.11.2019
comment
Сейчас он работает. Я использовал сайт whatsmychaincert.com, чтобы получить сертификат цепи и приложил его. Спасибо lub и Tulir. - person curious_21; 20.11.2019
comment
@ShreyasPandey Спасибо, что порекомендовали этот сайт! Я несколько дней застревал при настройке сервера Matrix (Construct вместо Synapse). - person stommestack; 05.02.2021

nginx требуется серверный (листовой) сертификат и цепочный (промежуточный) сертификат (и), оба в формате PEM (то, что вы называете небинарным) в том же файле, но то, что вы называете двоичным, почти наверняка является тем, что многие программы называют DER (это конкретная двоичная кодировка ASN.1, который использует X.509). Если у вас есть OpenSSL (или вы его получили), используйте

openssl x509 -in chain.binary -inform der -out chain.pem

затем добавьте chain.pem в конец server.crt; или вы можете сделать это за один шаг

openssl x509 -in chain.binary -inform der >>server.crt

Если это не сработает, возможно ваш chain.crt - это что-то более странное, например PKCS7 / CMS в двоичном / DER. Опубликуйте шестнадцатеричный дамп или сделайте точный файл доступным где-нибудь, например, pastebin.

Если у вас нет / нет OpenSSL, есть другие инструменты, которые можно использовать в зависимости от вашей среды. Укажите свою операционную систему (-ы) и все основные инструменты, такие как Java.

person dave_thompson_085    schedule 20.11.2019
comment
Спасибо за помощь, Дэйв! Поэтому я использовал whatsmychaincert.com этот сайт, чтобы получить сертификат цепочки, а затем добавить его в конец server.crt и это сработало.Просто было сомнение, насколько я знаю, что linux будет читать файл server.crt снизу вверх, значит ли это, что предыдущий контент server.crt является промежуточным, а полученный мной сертификат цепочки является корневым сертификатом? Если нет, то какой сертификат является корневым, а какой - промежуточным или конечным? - person curious_21; 20.11.2019
comment
«Linux» вообще не читает файлы сертификатов; некоторые программы в Linux и других системах, такие как nginx, делают это, но я не знаю ни одного (где-нибудь), где написано «снизу вверх» - где вы это взяли? Мне пришлось бы посмотреть, выполняет ли nginx какую-либо предварительную обработку, прежде чем передавать ее в OpenSSL, но безопаснее всего, если у вас сначала server = leaf = End-Entity, а затем chain = intermediate; вам вообще не нужен root. (Сервер SSL / TLS никогда не должен отправлять root, потому что клиент всегда должен иметь его уже, хотя некоторые отправляют его без необходимости, потому что это удобно и разрешено.) - person dave_thompson_085; 22.11.2019