LINUX.ORG.RU

QSslCertificate сравнение


0

1

Есть QSslCertificate который пользователь принял и он сохранился в базу. В базе храниться связка урл-сертификат. Как мне проверить по классу QSslCertificate, что тот что мне снова пришел для данного урла совпадает с тем что у меня в базе данных? Заранее спасибо


Ответ на: комментарий от ECLIPSE

Иногда - это когда? Сертификат сервера может быть перевыпущен, например, - тогда это будет _другой_ сертификат.

Да, и такое сравнение имеет смысл только для рутовых сертификатов. Для остальных - достаточно того, что он валиден с т.з. инфраструктуры.

anonymous
()
Ответ на: комментарий от anonymous

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

ECLIPSE
() автор топика
Ответ на: комментарий от ECLIPSE

Есть цепочка доверия, которая восходит к некоему рутовому сертификату. Т.е. сертификат веб-сервера удостоверяет что предъявитель сего действительно является веб-сервером и пр. (см поля сертификата - это та информация которая сертифицирована). Этот сертификат кем-то подписан, т.е. сертификатом самой организации или сертифицирующего центра. Тот сертификат подписан кем-то ещё и т.д. вплоть до авторити самого высокого уровня чей сертификат подписан богом, т.е. самим собой. Обычно пользователь ему и доверяет (т.е. объявляет его сертификат _доверенным сертификатом_). Или не доверяет (и поводы к этому есть). Это уже дело пользователя кому доверять, или админа. И разработчику ПО лучше не пытаться вмешиваться в эту логику.

Если я правильно понимаю доку, то список доверенных сертификатов - это то, что возвращает QSslSocket::defaultCaCertificates(). Хотя про то, что эти сертификаты «trusted» - там ни слова.

Дальше - если сертификат находится в цепочке, восходящей к авторити, которому пользователь доверяет, не просрочен и подпись валидна - такой сертификат считается валидным. Т.е. валидна информация, которая находится в этом сертификате. Если же сертификат невалиден - ПО должно отклонить транзакцию.

Можно, конечно, складывать и каждый полученный сертификат в доверенные (но не стоит - ведь сертификаты могут периодически обновляться, что нормально и не нужно юзера дёргать каждый раз по таком поводу). Но при этом твоя программа всё равно не проверяет его валидность, это дело инфраструктуры, сидящий за даденным тебе АПИ проверить валидность сертификата. Тебя в принципе интересует только результат QSslCertificate::verify() - верить содержимому сертификата или нет.

Т.е. сертификаты должна хранить сама инфраструктура ОС, она же должна предоставлять пользователю интерфейс для управления ими, должна уметь отзывать сертификаты. Пользовательской же программе нужно только одно: прибежать с зажатым в кулачке сертификатом к АПИ и спросить: «вот то что тут написано - это правда?». Если ей это действительно нужно.

Потому, что на самом деле никому это сейчас не нужно. Там же написано, что сертификат выдан на такой-то домен, принадлижит Василию Пупкину (далеко не всегда СА даже паспорт проверяют) и т.п. Но тот факт, что Василий является изощрённым сетевым мошенником, который втихую продаёт личную информацию о своих пользователях Моссаду - этого там не сказано и СА не может знать об этом. А пользователь, видя что установлено БЕЗОПАСНОЕ соединение, что сервер сертифицирован ТАКИМ УВАЖАЕМЫМ АВТОРИТИ - он автоматически расслабляется, думая что там действительно БЕЗОПАСНО...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.