Я получаю эту ошибку:
Удаленный сертификат недействителен в соответствии с процедурой проверки.
всякий раз, когда я пытаюсь отправить электронную почту, используя SMTP-сервер Gmail в моем коде C #. Может кто-нибудь указать мне правильное направление для решения этой проблемы?
Ниже приведена трассировка стека ...
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.TlsStream.CallProcessAuthentication(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
at System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Mail.SmtpConnection.Flush()
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at BulkEmail.frmemail.mailsending(String toaddress, String fromaddress, String fromname, String subject, String pwd, String attachements, String mailmessage, String htmlmessage, Int32 i, Int32 j, String replytoaddress)
Ответы:
В качестве обходного пути вы можете отключить проверку сертификата. Только когда-либо сделайте это, чтобы получить подтверждение, что ошибка генерируется из-за плохого сертификата.
Вызовите этот метод перед вызовом
smtpclient.Send()
:источник
Ссылка здесь решила мою проблему.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
Я перешел по URL веб-службы (на сервере, на котором возникла проблема), щелкнул по маленькому значку безопасности в IE, который вызвал сертификат. Затем я нажал на вкладку «Подробности», нажал кнопку «Копировать в файл», что позволило мне экспортировать сертификат в виде файла .cer. Получив сертификат локально, я смог импортировать его в хранилище сертификатов на сервере, используя приведенные ниже инструкции.
Начать новую MMC. Файл -> Добавить / Удалить оснастку ... Нажмите Добавить ... Выберите Сертификаты и нажмите Добавить. Проверьте переключатель «Учетная запись компьютера». Нажмите кнопку "Далее.
Выберите клиентский компьютер на следующем экране. Нажмите Готово. Нажмите Закрыть. Нажмите ОК. СЕЙЧАС установите сертификат в хранилище сертификатов доверенных корневых центров сертификации. Это позволит всем пользователям доверять сертификату.
источник
certutil -f -p test -importPFX Root devcert.pfx
иcertutil -f -p test -importPFX MY devcert.pfx
. Необходимо запустить в командной строке администратора (при условии, что пароль PFX -test
)Вы можете улучшить код, спросив пользователя, когда сертификат недействителен, хочет ли он продолжить или нет. Вы хотите продолжить? Как показано ниже:
И добавьте такой метод:
источник
Немного опоздал на вечеринку, но если вы ищете решение, подобное Юрию, следующий код поможет вам определить, связана ли проблема с самозаверяющим сертификатом и, если это так, игнорировать ошибку самозаверяющего. Вы можете проверить другие ошибки SSL, если хотите.
Используемый нами код (любезно предоставленный Microsoft - http://msdn.microsoft.com/en-us/library/office/dd633677(v=exchg.80).aspx ) выглядит следующим образом:
источник
У меня была точно такая же проблема, и я понял, что по умолчанию на антивирусе Mail Shield от Avast активировано «Сканировать SSL-соединение» . Убедитесь, что выключили это .
Насколько мне известно, Avast "откроет" почту, проверит ее на наличие вирусов и затем подпишет ее, используя собственный сертификат, чтобы почта больше не была подписана сертификатом gmail, который вызывает эту ошибку.
Решение 1:
Решение 2 (Должно быть, если говорить о безопасности лучше):
источник
Получите ту же ошибку при отправке из outlook из-за ssl. Пробная установка EnableSSL = false решила проблему.
пример:
источник
Вы уверены, что используете правильный адрес SMTP-сервера?
Оба smtp.google.com и smtp.gmail.com работают, но SSL сертификат выдан для второго.
источник
У меня была такая же ошибка, когда я пытался отправить электронную почту, используя
SmtpClient
прокси-сервер (Usergate).Проверяет, что сертификат содержит адрес сервера, который не совпадает с адресом прокси-сервера, следовательно, ошибка. Мое решение: когда при проверке сертификата возникает ошибка, получите сертификат, экспортируйте его и проверьте.
Полный код моего класса отправителя электронной почты:
}
источник
Я знаю, что я довольно поздно в этой игре, но я не видел здесь ответа, указывающего на журналы system.diagnostics для TLS Stream.
Прежде чем вносить какие-либо изменения в свой код, убедитесь, что понимаете, в чем проблема. Это
AuthenticationException
одно из тех очень общих исключений, которое мало что говорит. Чтобы узнать, что происходит внутри, отредактируйте файл app.config для своего приложения (или создайте новое) и убедитесь, что в разделе включен источник трассировки System.Netsystem.diagnostics
, например:Перезапустите приложение и проверьте файл c: \ network.log. Там вы должны увидеть подробную информацию о вашем соединении TLS (SSL), например:
Зная, в чем причина проблемы, вы сможете решить ее или хотя бы сузить поиск в Google.
источник
Моя проблема была на Windows 2003 Server при вызове AuthenticateAsClient. Указанные выше решения (например, обход
ServicePointManager.ServerCertificateValidationCallback
) не сработали.Оказывается, это ошибка в Windows 2003, и есть исправление:
«Приложения, использующие API-интерфейс шифрования, не могут проверить сертификат X.509 в Windows Server 2003»
https://support.microsoft.com/en-us/kb/938397
Установка этого исправления решила мою проблему.
источник
Моя проблема была не в том, что я ссылался на сервер по IP-адресу, а не по URL-адресу. Я купил подписанный сертификат в ЦС для использования в частной сети. URL, указанный в сертификате, имеет значение при обращении к серверу. Как только я ссылался на сервер по URL в сертификате, все начало работать.
источник
Папка вашего сайта нуждается в безопасности сетевой службы. Особенно web.config. Он использует эту учетную запись для доступа к вашему реестру для сертификатов. Это избавит от необходимости добавлять хак в ваш код.
источник
Проверьте дату и время вашего компьютера. Если это не так, обновите его до текущего времени или установите его автоматически, чтобы получить время из Интернета.
Поскольку сертификаты привязаны к фиксированному периоду времени, если ваши часы неверны, вы, скорее всего, получите такие ошибки. В этом случае, установив время, проблема будет решена.
источник
Для тех, кто сталкивается с такой же ошибкой при подключении к локальному сайту с самозаверяющим сертификатом, мне помогло следующее сообщение в блоге.
http://brainof-dave.blogspot.com.au/2008/08/remote-certificate-is-invalid-according.html
источник
В нашем случае проблема была вызвана сертификатом сервера IIS. В качестве темы сертификата было указано имя DNS, и пользователи пытались получить доступ к веб-сайту по IP-адресу, поэтому проверка сертификата .NET не удалась. Проблема исчезла, когда пользователи начали использовать DNS-имя.
Поэтому вы должны изменить URL своего провайдера на https: //CertificateSubject/xxx/xxx.application
источник
В блоге MSDN есть статья о расследовании подобных проблем:
Устранение неполадок ASP.NET - удаленный сертификат является недействительным в соответствии с процедурой проверки: http://blogs.msdn.com/b/jpsanders/archive/2009/09/16/trou устранение неполадок-asp-net-the-remote-certificate-
является-инвалидом-по-до-проверка-procedure.aspx
источник
Добавление этой строки работало для меня. Это на самом деле доверяет всем сертификатам, как указано здесь . Тем не менее, это может быть использовано в первую очередь для устранения неполадок. Если это работает для вас, то это означает, что сертификат удаленного сервера не добавлен в качестве доверенного сертификата на вашем компьютере.
Полный код
источник
Это решило мою проблему
// Со ссылкой на // Проблема приходит только Используйте строку выше, чтобы установить false SSl для устранения ошибки, когда имя пользователя и пароль введены в настройках SMTP.
источник
вот решение, которое я решил использовать.
источник
Код из принятого ответа помог мне отладить проблему. Затем я понял, что поле SN
certificate
аргумента не совпадает с тем, что я думал, был мой SMTP-сервер. Установив дляHost
свойства экземпляра SmtpClient значение SN сертификата, я смог решить эту проблему.источник