2016-01-04 4 views
0

Я установил zulip server, и у меня возникла проблема с сертификатом сервера.Ошибка: ssl3_get_server_certificate: проверка сертификата не удалась при использовании самозаверяющего сертификата

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

Еще одна проблема возникает, когда я пытаюсь послать сообщение через бота (не имеет значения, что это значит). Я получаю эту ошибку:

requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

В руководстве по установке она гласит:

Install SSL certs

Zulip requires HTTPS, so you need to install an SSL certificate here: 
/etc/ssl/private/zulip.key 
/etc/ssl/certs/zulip.combined-chain.crt 

If you don't know how to generate an SSL certificate, you, you can do the following to generate a self-signed certificate:

apt-get install openssl 
openssl genrsa -des3 -passout pass:x -out server.pass.key 4096 
openssl rsa -passin pass:x -in server.pass.key -out zulip.key 
rm server.pass.key 
openssl req -new -key zulip.key -out server.csr 
openssl x509 -req -days 365 -in server.csr -signkey zulip.key -out zulip.combined-chain.crt 
rm server.csr 
cp zulip.key /etc/ssl/private/zulip.key 
cp zulip.combined-chain.crt /etc/ssl/certs/zulip.combined-chain.crt 

Я сделал, как мне было предложено (я сделал самостоятельно подписанный сертификат). Ниже этого раздела есть примечание:

You will eventually want to get a properly signed certificate (and note that at present the Zulip desktop app doesn't support self-signed certificates), but this will let you finish the installation process.

Может быть, причина моих проблем?

Если все в порядке, я также хотел бы получить краткое пояснение о том, какой сертификат.


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

ответ

0

Что такое (SSL/TLS) сертификат? В очень короткий цифровой сертификат (publickey) предоставляет возможность проверить, что публикация принадлежит сущности, такой как сервер, и используется, чтобы убедиться, что вы подключаетесь к законному серверу, а не к самозванцу, например мошенничество или шпионское агентство. (И иногда спорные различия между теми, оффтоп здесь.)

Хотя есть (и в прошлом) несколько видов цифровых сертификатов, SSL/TLS использует тип, определенный X.509 стандарт и связанных с такими стандартами, как "PKIX" (Internet Public Key Infrastructure - X.509). Как часто, Википедия - это хорошее место для начала: https://en.wikipedia.org/wiki/X.509 довольно тщательно (но не кратковременно) для самого сертификата; https://en.wikipedia.org/wiki/Certificate_authority Хорошо, как вы получаете сертификат (или нет). (Технические nitpicks: спецификации TLS позволяют использовать другие виды сертификатов, но никто на самом деле не делает этого, они также допускают возможность «анонимных» соединений без сертификата сервера, но поскольку на практике они обычно небезопасны, большинство программ и в частности, веб-браузеры не позволяют их.)

Использование «реального» сертификата. Большинство клиентов SSL/TLS настроены на первоначальное доверие к набору из примерно 100 известных так называемых ЦС, таких как Symantec и Comodo и GoDaddy, и некоторые правительственные, которые не так хорошо известны, кроме стран, в которых они работают , Точный набор немного меняется на разных платформах и изменяется со временем, когда устанавливаются новые центры сертификации, а старые отключены или сгруппированы или изредка сбой (например, DigiNotar). Если вы получите сертификат своего сервера, выпущенный одним из этих установленных центров сертификации, большинство клиентов, вероятно, примет его автоматически.Важное ограничение: вы можете получить только «настоящий» сертификат для доменного имени, которое принадлежит вам (или несколько имен, которые все принадлежат вам); то, как определяется «принадлежит», зависит от ЦС, но обычно это означает управление DNS, электронной почтой и/или общедоступным веб-сервером. Если сервер, который вы хотите настроить, использует только имя внутреннего домена (или не domain) или частный (rfc1918) адрес, так как может быть иметь дело с вашей «закрытой сетью», вы не можете получить «реальную "cert для него.

Использование самозаверяющего сертификата. Поскольку вы не установили для всех поставщиков браузеров и клиентов и ОС, которым можно доверять безопасность большинства стран мира, ваш самозаверяющий сертификат - , а не - в магазинах по умолчанию практически любого программного обеспечения, поэтому вы необходимо, чтобы добавить его в доверительный магазин. Как вы это делаете: в зависимости от клиента (-ов) вы используете. Обратите внимание, что вы должны добавить только сертификат, как «доверенный корень» или «доверенный орган», а не закрытый ключ; к счастью, почти ничего не принимает файлы privatekey OpenSSL-формата «PEM». Просто не копируйте приватную клавишу в любом месте, кроме вашего сервера (и желательно, чтобы это было безопасно в автономном режиме, если вы этого хотите).

  • IE (и я считаю, что Edge) и Chrome/Windows используют хранилище Windows. К этому можно получить доступ (и, в частности, вы можете добавить свой сертификат) в IE из «Инструменты/Параметры в Контенте в качестве сертификатов», в «Хром/Продвинутый», как «Управление сертификатами», или непосредственно из «Панели управления» - «Интернет» под Контентом в качестве сертификатов.

  • В Firefox (на всей ОС) используется собственный магазин, доступ к которому осуществляется в разделе «Инструменты/Параметры/Дополнительно».

  • Chrome (НМУ)/Unix я не знаю

  • Java: установленная JRE поставляется с cacerts файла по умолчанию в JRE/lib/security. Приложение Java может переопределить это, но не так много, поэтому обычно достаточно добавить свой сертификат в cacerts, за исключением того, что установка новой версии JRE сбрасывает cacerts - и вы часто можете установить новые версии JRE из-за уязвимостей безопасности. Вы можете избежать этого, используя вместо этого jssecacerts; настроить его с помощью ЦС, которые вы хотите - вероятно, некоторые, но не обязательно все из них в cacerts, плюс ваши собственные; затем сохраните копию jssecacerts в другом месте и просто скопируйте ее в любую новую JRE.

  • OpenSSL (on Unix). Из формата ошибки ваш «бот» явно использует OpenSSL (или вилку вроде LibreSSL). OpenSSL сам определяет местоположение доверия по умолчанию, но не предоставляет никаких сертификатов. Тем не менее, многие упаковщики OpenSSL добавляют набор сертификатов CA, которые часто называются «ca-certificate» или «pki-certs». Вы не указываете ОС, но ваше использование apt-get предлагает Debian или Ubuntu; если это так, я не знаю, что вы, вероятно, установили, но что-то, связанное с dpkg -l, apt-cache, или aptitude может работать. Если это так, возможно, документированный процесс добавления ваших собственных сертификатов в распределенный набор; проверьте свои страницы.

    Однако OpenSSL упрощает использование приложения (или промежуточного программного обеспечения) другого магазина доверия, чем значение по умолчанию.Например, curl - это обычный инструмент командной строки, который обычно использует OpenSSL (хотя он может использовать другие реализации) и имеет опции командной строки --cacert --capath для использования настраиваемого магазина доверия. В зависимости от того, что ваш «бот», он может иметь или не иметь похожих или разных вариантов или ни одного.

  • OpenSSL на Windows имеет в принципе аналогичные варианты, но на практике это гораздо более запутанно. В Windows нет единой системы упаковки или файловой иерархии, поскольку обычно используется данный вариант Unix или дистрибутив Linux, вместо этого существуют сотни или тысячи более или менее совершенно разных методов, изобретенных множеством и множеством людей. Если вам это нужно, задайте более конкретный и полный вопрос.

Смежные вопросы