crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Как работать с сертификатми?
Rocky
  опции профиля:
сообщение 24.12.2010, 15:28
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Все привет! Если кто знает, подскажите пожалуйста, как работать с certificates? Вот например. Я сделал запрос через QNetworkAccessManager. Соединил сигнал sslErrors со своим слотом. Захожу на какой-то сайт через https. А дальше как? Если у этого домена есть сертификат, я должен вывалиться в слот, соединенный с сигналом sslErrors, у QNetworkReply взять сертификат и проверить его? А как проверять... и главное с чем сравнивать? В программе должна быть база данных сертификатов? Просто дали задание, а как тут быть неясно....

Огромное спасибо за любую информацию!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
PAFOS
  опции профиля:
сообщение 27.12.2010, 22:45
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

Спасибо сказали: 29 раз(а)




Репутация:   8  


я бы сделал как-то так... )

slotSslErrors(QList<QSslError>& err)
{
    foreach( const QSslError &e, err )
    {
        switch( e.error() )
        {
            case QSslError::HostNameMismatch:
                 {
                        if( localDatabase.contains( e.certificate() )
                        {
                              // Игнорируем ошибку, т.к. сертификат есть у нас в БД
                              ((QNetworkReply*)sender())->ignoreSslErrors( QList<QSslError>() << e ))
                              return;
                        }
                        else if( askUser( e.certificate() )
                        {
                               // Спрашиваем юзера, хочет ли он добавить сертификат в локальную БД, если да
                               localDatabase << e.certificate();
                              
                               // Игнорируем ошибку
                              ((QNetworkReply*)sender())->ignoreSslErrors( QList<QSslError>() << e ))
                              return;
                         }
                         return; // соединение будет закрыто, т.к. сертификат не в бд и т.к. пользователь не захотел добавить его в бд
                 }

        // Обработка других ошибок
        }
    }
}


Цитата
А если я например создаю базу доверенных хостов (вообще не заморачиваясь на сертификатах)


А что если коннект будет идти через прокси? тогда злоумышленник может предоставить свой сертификат и весь трафик будет как на ладони.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 3.12.2024, 9:14