У меня есть частный сервер дома, который запускает экземпляр 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, сертификатами и т. Д., Поэтому я все еще изучаю этот материал.