Как я могу заставить Pidgin всегда принимать просроченный сертификат?

8

Моя работа использует локальный сервер XMPP (Wildfire, теперь называется Openfire ). При использовании клиента Pidgin он всегда спрашивает меня, должен ли он принять недействительный (просроченный) сертификат.

введите описание изображения здесь

Я бы хотел, чтобы Пиджин всегда принимал это, не спрашивая меня. Как я могу сделать это без установки нового сертификата на XMPP-сервер?

Я попытался импортировать сертификат как в свое личное хранилище, так и в хранилище доверенных корней, но все равно получаю ту же подсказку. Сертификат также хранится в %APPDATA%\.purple\certificates\x509\tls_peers, но я все еще получаю подсказку.

Вот журнал отладки при подключении:

Pidgin Debug Log : 10/4/2016 12:05:16 PM
(12:05:05) account: Connecting to account example@192.168.1.21/.
(12:05:05) connection: Connecting. gc = 04528D78
(12:05:05) dnssrv: querying SRV record for 192.168.1.21: _xmpp-client._tcp.192.168.1.21
(12:05:05) dnssrv: Couldn't look up SRV record. The filename, directory name, or volume label syntax is incorrect. (123).
(12:05:05) dnsquery: Performing DNS lookup for 192.168.1.21
(12:05:05) dnsquery: IP resolved for 192.168.1.21
(12:05:05) proxy: Attempting connection to 192.168.1.21
(12:05:05) proxy: Connecting to 192.168.1.21:5222 with no proxy
(12:05:05) proxy: Connection in progress
(12:05:05) proxy: Connecting to 192.168.1.21:5222.
(12:05:05) proxy: Connected to 192.168.1.21:5222.
(12:05:05) jabber: Sending (example@192.168.1.21): <?xml version='1.0' ?>
(12:05:05) jabber: Sending (example@192.168.1.21): <stream:stream to='192.168.1.21' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
(12:05:05) jabber: Recv (579): <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="192.168.1.21" id="da08260e" xml:lang="en" version="1.0"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>CRAM-MD5</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>ANONYMOUS</mechanism></mechanisms><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
(12:05:05) jabber: Sending (example@192.168.1.21): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
(12:05:05) jabber: Recv (50): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
(12:05:05) nss: SSL version 3.1 using 128-bit AES with 160-bit SHA1 MAC
Server Auth: 2048-bit RSA, Key Exchange: 1024-bit DHE, Compression: NULL
Cipher Suite Name: TLS_DHE_RSA_WITH_AES_128_CBC_SHA
(12:05:05) nss: subject=CN=Unknown,OU=Unknown,O=REDACTED,L=REDACTED,ST=REDACTED,C=US issuer=CN=Unknown,OU=Unknown,O=REDACTED,L=REDACTED,ST=REDACTED,C=US
(12:05:05) certificate/x509/tls_cached: Starting verify for 192.168.1.21
(12:05:05) certificate/x509/tls_cached: Certificate 192.168.1.21 expired at Mon Aug 29 09:54:35 2016

(12:05:05) certificate/x509/tls_cached: Checking for cached cert...
(12:05:05) certificate/x509/tls_cached: ...Found cached cert
(12:05:05) nss/x509: Loading certificate from C:\Users\example\AppData\Roaming\.purple\certificates\x509\tls_peers\192.168.1.21
(12:05:05) certificate/x509/tls_cached: Peer cert matched cached
(12:05:07) util: Writing file accounts.xml to directory C:\Users\example\AppData\Roaming\.purple
(12:05:07) util: Writing file C:\Users\example\AppData\Roaming\.purple\accounts.xml
(12:05:07) util: Writing file blist.xml to directory C:\Users\example\AppData\Roaming\.purple
(12:05:07) util: Writing file C:\Users\example\AppData\Roaming\.purple\blist.xml
(12:05:07) certificate/x509/tls_cached: User ACCEPTED cert
Caching first in chain for future use as 192.168.1.21...
(12:05:07) nss/x509: Exporting certificate to C:\Users\example\AppData\Roaming\.purple\certificates\x509\tls_peers\192.168.1.21
(12:05:07) util: Writing file C:\Users\example\AppData\Roaming\.purple\certificates\x509\tls_peers\192.168.1.21
(12:05:07) nss: Trusting CN=Unknown,OU=Unknown,O=REDACTED,L=REDACTED,ST=REDACTED,C=US
(12:05:07) certificate: Successfully verified certificate for 192.168.1.21

источник
Вы пытались просмотреть сертификат и установить его в хранилище сертификатов Windows?
Эван Дарвин
Да, но Pidgin выдает то же сообщение об ошибке.
2
Откройте Debug Window(Справка -> Окно отладки), подключитесь к серверу и выберите Acceptв диалоговом окне сертификата. В окне отладки могут быть сообщения, связанные с сертификатами. Вы можете прикрепить журнал к исходному вопросу. Принятые сертификаты должны храниться в %APPDATA%\.purple\certificates\x509\tls_peers. Попробуйте посмотреть, есть ли файл с таким же именем, как у вашего сервера.
Ge0rdi
1
У меня плохие новости. Я просматриваю исходники Pidgin (ваш журнал очень помог сориентироваться в потоке кода), но кажется, что для сертификатов с истекшим сроком действия (или еще не действительными) всегда есть подсказка. О всех других ошибках сертификата не сообщается, если сертификат уже был принят. Я бы предложил сообщить об этой проблеме разработчикам Pidgin здесь .
Ge0rdi
1
На самом деле есть проблемы с просроченными сертификатами, о которых сообщалось в системе тикетов Pidgin . Обычно ответом является то, что сертификат сервера должен быть исправлен.
Ge0rdi

Ответы:

7

К сожалению, невозможно окончательно принять просроченный сертификат (по крайней мере, в Pidgin 2.11.0, который является последней версией на данный момент).

Есть много сообщений об этой проблеме в официальной системе отслеживания проблем Pigdin . Обычный ответ заключается в том, что сертификат сервера должен быть исправлен.

Подтвердить это можно также в источниках на пиджине :
проверка сертификата начинается с x509_tls_cached_start_verify. Для просроченного сертификата установлен флаг PURPLE_CERTIFICATE_EXPIRED.
Если сертификат был найден в кеше x509_tls_cached_cert_in_cache, называется. Он проверяет, что фактический отпечаток сертификата совпадает с отпечатком в кеше и вызовах x509_tls_cached_complete.
Эта функция выполняет одно из следующих действий:

  • уведомить пользователя о том, что сертификат недействителен (если произошла неустранимая проблема с сертификатом)
  • позволяет пользователю решить, принимать ли / отклонять сертификат (если возникла нефатальная проблема; это имеет место с сертификатом с истекшим сроком действия)
  • продолжается без запроса, если не было проблем с сертификатом

Нет способа пропустить предупреждение об истекшем сертификате (кроме исправления самого сертификата).

ge0rdi
источник
0

То, что сказал @ ge0rdi, верно, но вы можете попробовать загрузить сертификат SSL вручную. Это может привести к запуску pidgin без разрешения :)

Используйте следующую команду:

~/.purple/certificates/x509/tls_peers$ openssl s_client -connect YOUR_SERVER:PORTNUMBER 

Если это не помогло, добавьте команду с -starttls xmpp следующим образом:

~/.purple/certificates/x509/tls_peers$ openssl s_client -connect YOUR_SERVER:PORTNUMBER -starttls xmpp

Поместите файл в следующую папку:

~/.purple/certificates/x509/tls_peers

Запись! Убедитесь, что имя файла является DNS-именем сервера.

РЕДАКТИРОВАТЬ:

Угадайте, кто только что заметил, что вы используете компьютер с Windows ... ~ / это домашний раздел пользователя Linux. Согласно этой странице Windows Equivelant является% APPDATA%.

Рик ван Лисхаут
источник
Сертификат уже есть, но Пиджин все еще спрашивает, хочу ли я принимать его каждый раз. Это как в вопросе, так и в комментариях.