У меня есть частный сервер дома, который запускает экземпляр node.js и викенч. У меня также есть свой собственный домен, который я зарегистрировал на EuroDNS, а также сертификат AlphaSSL, также от EuroDNS.

Протокол ретрансляции Weechat и node.js настроены на использование TLS (node.js настроен на отказ от HTTP-запросов, разрешен только HTTPS). Что странно, так это то, что я могу получить доступ к серверу node.js через HTTPS без проблем, используя любой клиент HTTPS. openssl s_client также хорошо работает. Протокол ретрансляции Weechat, однако, не. По какой-то причине, когда я пытаюсь открыть для него сокет TLS, кажется, что промежуточный сертификат EuroDNS AlphaSSL CA отправляется неправильно, потому что клиенты сообщают об ошибках, которые они не могут проверить сертификат моего домена. Что еще более странно, так это то, что браузеры, похоже, не имеют этой проблемы, поскольку у Glowing Bear (клиент-ретранслятор HTML5 WeeChat) такой проблемы нет.

Мне пришлось вручную скопировать файл .crt сертификата intermedia CA в /usr/share/ca-certificates а затем запустить dpkg-reconfigure ca-certificates чтобы иметь возможность открыть сокет TLS для ретранслятора Weechat.

Я использовал openssl s_client -connect чтобы получить некоторую информацию. Вот что происходит, когда я получаю доступ к серверу node.js (слегка измененный по соображениям конфиденциальности):

CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = AlphaSSL CA - SHA256 - G2
verify return:1
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify return:1
---
Certificate chain
 0 s:/C=DE/OU=Domain Control Validated/CN=example.com
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
 1 s:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---

И вот что произойдет, если я попытаюсь открыть сокет TLS для реле Weechat:

CONNECTED(00000003)
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = DE, OU = Domain Control Validated, CN = example.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=DE/OU=Domain Control Validated/CN=example.com
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
---

Если я прочитал это правильно, то Weechat, очевидно, не отправляет промежуточный сертификат, в то время как node.js. И это, вероятно, не проблема в браузере, потому что он поставляется с этим промежуточным сертификатом. Это также объясняет, почему проблемы с подключением к реле исчезают, когда я добавляю промежуточный сертификат AlphaSSL к сертификатам системы.

Правильно ли мое предположение? Значит ли это, что у Weechat есть ошибка? Я довольно плохо знаком с CA, сертификатами и т.д., Поэтому я все еще изучаю этот материал.

1 ответ1

1

Конечно, вскоре после публикации вопроса я нашел ответ. Я все еще держу это здесь, чтобы другие могли извлечь уроки из этого.

Ответ состоял в том, что в файле .pem, который я добавил в weechat, два сертификата были связаны, но произошла ошибка - по неизвестным причинам промежуточный сертификат был недействительным. Я воссоздал цепочечный файл .pem с помощью cat my-domain.x509.crt intermediate.crt my-domain.priv.key > relay.pem , и теперь он работает нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .