|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
А реально кодом побороть эту ошибку? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Код: vbnet 1. 2. 3. 4. 5.
Возникает например на агаве при любом коннекте по SSL(POP3, IMAP), на форумах здесь тема эта в бытовом смысле поднималась В почтовом клиенте типа OE чтобы обойти "принят недостоверный сертификат" надо нажать кнопку "Продолжить", часто один раз на всю дальнейшую жизнь. Нашел вот еще: https://msdn.microsoft.com/ru-ru/library/ee517298.aspx Ошибка при проверке SSL-сертификатаЧтобы воспроизвести ошибку при проверке SSL-сертификата, когда WinHTTP не предоставляется конфигурация прокси-сервера, выполните указанные ниже действия. 1. Установите приложение, которое подключается к веб-службе по протоколу SSL. Запустите приложение с учетной записью Network Service или Local System. Укажите в файле app.config приложения, что подключение осуществляется через прокси-сервер. 2. Приложение выдаст следующее исключение: Код: vbnet 1. 2. 3. 4.
Это происходит потому, что приложение предоставляет платформе .NET сведения о конфигурации прокси-сервера в файле app.config, а WinHTTP этих сведений не получает. Это приводит к сбою запросов AIA и промежуточных центров сертификации в процессе проверки допустимости цепочки сертификатов. Чтобы устранить эту проблему, настройте прокси-сервер WinHTTP в соответствии с конфигурации в файле app.config приложения с помощью программы proxycfg.exe или функции WinHttpSetDefaultProxyConfiguration. Меня интересует, можно ли это обойти кодом (желательно безусловно без msgbox-ов и без подстроек чего-то там в системе какими-то утилитами). Чтоб процесс автоматом пошел дальше (ну запись в логе, пожалуйста). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 06:24 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx ? Код: c# 1.
Но это не последние грабли... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 10:47 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, да, еще в соседнем топике Изопропил про SSLStream говорил... там есть соответствующая перегрузка конструктора. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 10:58 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser, Я правильно понял, что если в callback-е ServerCertificateValidationCallback я тупо верну true, то .AuthenticateAsClient съест "нехороший сертификат", не выдаст ошибки и дальнейший процесс пойдет как и с "хорошим" сертификатом? >Но это не последние грабли... Что имел ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 11:48 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, 1. да 2. многопоточность ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 11:52 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, в колбяке можно проводить доп анализ... посмотрите сигнатуру... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 11:53 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser2. многопоточность А что там может не срастить с потоками то? Классы по pop3 и imap я целиком выложил в 2-х соседних топиках Ф-ция Connect() >Дмитрий77, в колбяке можно проводить доп анализ... посмотрите сигнатуру Ну да, посмотрю. Можно в лог чего нибудь умное написать. Можно галку в настройках проги сделать: типа принимать или не принимать такую фигню... жулики эта моя агава, что в web панель заходишь, что ssl-почта не могли сертификат нормальньный поставить но предполагаю что это не только агава такая "умная", поэтому лучше сразу отработать этот момент. с gmail, mail.ru этой фигни же нету, там не выкидывает. еще правда есть Net.Mail и CDO где ssl "встроенное" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 12:07 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Ну, так все проскакивает . Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Дебаг, который выделен в коде пишет: Код: vbnet 1. 2.
Ну у меня тогда 2 вопроса : 1. Разумно ли код так и оставить в этом виде? Код: vbnet 1.
2. Как вывести ошибку проверки сертификата в основной дебаг? Где ее брать теперь? Ну, на плохой отзыв мы теперь плюем, но надо ж где то залогировать что Удаленный сертификат недействителен согласно результатам проверки подлинности. Как текстовое описание ошибки теперь выкопать (для протокола...)? Роскошь бесить юзера окном, как это делают всякие Outlook, позволить себе не могу (прога на автомате коннектится), а вот предупредить бы в логе что вот такое дело бы надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 14:45 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, 1. не уверен... можно где-то кешировать инфу о сертификате и о том как поступать именно с этим невалидным сертификатом. 2. В хендлере ServerCertificateValidationCallback https://msdn.microsoft.com/ru-ru/library/ms145055(v=vs.110).aspx + https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chain.chainstatus(v=vs.110).aspx Но я не большой специалист... просто ходил мимо этих граблей. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 15:46 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser1. не уверен... можно где-то кешировать инфу о сертификате и о том как поступать именно с этим невалидным сертификатом. этот код точно не кэширует Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Можно играться сколь угодно раз туда сюда (в одном запуске программы). При нажатом чекбоксе - плюет на сертификат, при ненажатом - выкидывает ошибку какую указал в начале топика. А при "хорошем сертификате" (sslPolicyErrors.None) этот коллбэк не дает ровным счетом ничего. Поэтому если стоит задача - тупо считать все сертификаты "хорошими" и не морочить голову этими секретностями, то true -правильный вариант. В конце концов пользователь знает, каким сервером пользуется, а все эти невалидные сертификаты - головная боль, которую этот код прекрасно обходит, предупреждения в логе думаю достаточно. А вот кэшировать - это уже лезть в систему. Обходит, систему не гадит, отлично. === по поводу "распечатки ошибки" пока не врубился. Но зато убедился в том что с .Net 2 код тоже работает (были сомнения, в доках только ссылка на 3.5). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2015, 17:02 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser2. В хендлере ServerCertificateValidationCallback https://msdn.microsoft.com/ru-ru/library/ms145055(v=vs.110).aspx + https://msdn.microsoft.com/ru-ru/library/system.security.cryptography.x509certificates.x509chain.chainstatus(v=vs.110).aspx В примере для C++ (не для C#) https://msdn.microsoft.com/ru-ru/library/system.net.security.remotecertificatevalidationcallback(v=vs.110).aspx есть некая рукописная конструкция static void InitializeCertificateErrors + static String^ CertificateErrorDescription(UInt32 problem) но каким боком она соотносится к sslPolicyErrors в CallBack, который приведен в том же листинге, я в упор не вижу. Может кто-то понял как уточненную ошибку выловить? Насколько я глядел на sslPolicyErrors, я могу сказать что может быть всего 3 разных ошибки, при этом флаги могут комбинироваться. Так чтоб программно выудить Description, такого я не вижу, поэтому свой текст похожий на правду. Ну сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
В дебаге выглядит так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 08:52 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
А, нет, немножко можно "уточнить" ошибку: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2015, 09:59 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77еще правда есть Net.Mail и CDO где ssl "встроенное" Для Net.Mail (STARTTLS, 587 или 25 порт) я нашел решение, подогнал под тот же Callback: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
А вот если нужен Implicit-режим, т.е. CDO.Message, оно же Web.Mail (465-й порт), то такой же трюк не работает: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
На результат не влияет: Код: vbnet 1.
Как работает ServicePointManager.ServerCertificateValidationCallback я разобрался методом полутыка. Когда его назначаешь, 1) любая проверка сертификата, запрашиваемая этим приложением , сваливается в коллбек. 2) можно отключить установив в Nothing (что думаю разумно сразу после) 3) на другие приложения не распространяется , специально запускал второй экземпляр без коллбэка, при "активированном" первом там ничего не работало. Почему не работает применительно к CDO (и к Web.Mail кстати тоже, нашел где-то на форумах), в принципе понятно. CDO -это COM, "другое приложение" (причем не .Net-овское), а на другое типа не срабатывает. Нельзя как-то влезть? Своего в объектной модели CDO на эту тему ничего не вижу, обернуть в CallBack в лоб не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2015, 00:53 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2.
А какие WiN API этому соответствуют? Я не знаю, никогда этих тем ранее не копал. Из .Net-сорцов ничего не понятно. Мне надо установить подобный Callback на другой процесс соответствующий COM -объекту CDO.Message. Вот попробовал у классиков спросить: Callback для проверки подлинности сертификата сервера при использовании SSL (API, C/C++) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2015, 19:49 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Код: vbnet 1.
Я думаю это лишнее, при асинхронной отправке через Net.Mail, может случиться ситуация отправки двух или более писем подряд (если снимать из самого коллбэка или из коллбэка .SendMailAsync). При этом первое - проскочит, а второе завернется, т.к. ServerCertificateValidationCallback будет уже снят на момент необходимости его вызова. Думаю, что приемлимый вариант - установить один раз при старте приложения, ну или больше склоняюсь к такому коду: Код: vbnet 1. 2. 3. 4. 5. 6.
(перед вызовом .SendMail/.SendMailAsync и не пытаться его снять где-то после) А на CDO.Message наверно забью, надо уже закругляться с этими мыльными модернизациями. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2015, 02:08 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2015, 18:39 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser, опаньки, спа-си-бо!!! а я то ведь в совсем другую главу MSDN смотрел WinHttpSetStatusCallback, WINHTTP_STATUS_CALLBACK function pointer WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED темный лес пока, но и не с таким разбирались А как думаешь навскидку, я же напрямую в эту кухню не лезу, у меня COM объект CDO.Message На него эту ловушку в принципе выставить можно (Net-овская же ловушка на него не действует)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2015, 19:25 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
Дмитрий77, не уверен... попробуйте... может проще закачать сертификат и в трасты добавить? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2015, 20:23 |
|
SSL:Удаленный сертификат недействителен согласно результатам проверки подлинности.
|
|||
---|---|---|---|
#18+
buser, Ну вот такой код накатал без деталей : В Form1_Load на WinHttpConnect Callback ловится (сессия hSession) А в ButtonConnect_Click - НЕ ловится сколько не жми (чужая сессия hSession_l), если заменить на hSession то понятно ловится. На CDO и даже на Net.Mail - не ловит. Т.е. эта штука только на свою сессию ставится, а мне надо на чужую, типа глобальный хак. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
buser.. может проще закачать сертификат и в трасты добавить? я думаю, программой добавлять за пользователя сертификаты в хранилище, да еще невалидные - это уже перебор, хватит того итак уже научил молча обходить "защиту" (в 3-х из 4-х случаев успешно: POP3, IMAP и Net.Mail). Можно конечно вместо CDO-шного .Send тупо получить .eml как стринг (из CDO) и написать еще один класс для SMTP (как сделал для POP3/IMAP, думаю там команды еще проще) и тогда все в моих руках, но кажется итак уже увлекся. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.05.2015, 07:33 |
|
|
start [/forum/topic.php?fid=20&fpage=84&tid=1401508]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 337ms |
total: | 465ms |
0 / 0 |