Подключение к Gmail с помощью Mailkit ImapClient с использованием TLS, а не SSL - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь опросить учетную запись Gmail в коде C #.Я использую библиотеки Mailkit (https://github.com/jstedfast/MailKit). Я могу успешно подключиться, когда говорю клиенту использовать SSL:

using (var client = new ImapClient ()) 
{
    client.Connect ("imap.friends.com", 993, true);
    client.Authenticate ("joey", "password");
    client.Disconnect (true);
}

Но я понимаю (возможно, неправильно), что SSL небезопасен, и мы не должныЯ не пытаюсь использовать соединение TLS:

using (var client = new ImapClient ()) 
{
    client.Connect ("imap.friends.com", 993, SecureSocketOptions.StartTls);
    client.Authenticate ("joey", "password");
    client.Disconnect (true);
}

Но эти ошибки в строке client.connect:

Message: The IMAP Server has unexpectedly disconnected
Stack Trace: 
   at MailKit.Net.Imap.ImapStream.<ReadAheadAsync>d__54.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MailKit.Net.Imap.ImapStream.<ReadTokenAsync>d__69.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MailKit.Net.Imap.ImapEngine.<ConnectAsync>d__140.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at MailKit.Net.Imap.ImapClient.<ConnectAsync>d__81.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at MailKit.Net.Imap.ImapClient.Connect(String host, Int32 port, SecureSocketOptions options, CancellationToken cancellationToken)

Я работаю срегистратор протоколов, но это не говорит мне много, он содержит только 1 строку:

Connected to imap://imap.gmail.com:993/?starttls=always

Так что я думаю, мои вопросы:

1) Должен ли я беспокоиться об использовании небезопасного SSL 3.0получить доступ к Gmail?Мне трудно поверить, что они заставляют меня использовать устаревший протокол безопасности.

2) Если это так, как я могу принудительно установить соединение TLS, чтобы я мог отключить SSL3.0 для клиентов на моем компьютере?сервер приложений?

1 Ответ

0 голосов
/ 04 октября 2018

MailKit имеет 2 различных способа выполнения SSL / TLS:

  1. Используйте SSL / TLS сразу после подключения к удаленному серверу
  2. Используйте команду STARTTLS для переключения на SSL / TLSрежим после подключения и чтения приветствия, чтобы проверить, поддерживает ли его сервер

Вы пытаетесь использовать второй режим, но вы подключаетесь к порту (993), который требуетпервый режим.

Какая версия SSL против TLS используется в любом из этих режимов, полностью зависит от того, что поддерживает сервер (фактически, MailKit по умолчанию не поддерживает ни одну версию SSL, это только поддерживает TLSv1.0, TLSv1.1 и TLSv1.2 - я удалил SSLv3 по умолчанию несколько лет назад).

Способ изменения поддерживаемых версий SSL и / или TLSчто вы хотите ограничить MailKit можно сделать, установив свойство client.SslProtocols.

...