LINUX.ORG.RU

Qt и self-signed certificate

 , , ,


0

1

Собственно имеем https-сервер с self-signed certificate, который блокирует все не подписанные запросы посредством SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT. Проблема в том, что я не могу подключится из Qt к такому серверу. Со стандартными настройками openssl достаточно указать путь к сертификату

QSslSocket::addDefaultCaCertificates("key.pem");
Но как только добавляем флаги выше - Qt не может подключится.

Находил несколько решений, но они не работают и выглядят монструозно. Подозреваю что упускаю из вида какую-то мелочь.

Кто-то сталкивался с таким?

PS: Через curl тоже не получается, так что подозреваю что какой-то косяк с ключами или настройками openssl.

★★★★★

Последнее исправление: RazrFalcon (всего исправлений: 1)

Наверно правильно подозреваешь. Сертификат клиента существует? Подключен? QSslSocket::setLocalCertificate() вероятно должен использоваться.

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

Сделал так:

QFile privKey("key.pem");
privKey.open(QFile::ReadOnly);

QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
sslConfig.setPrivateKey(QSslKey(privKey.readAll(), QSsl::Rsa));
sslConfig.setLocalCertificate(QSslCertificate::fromPath("cert.pem").first());
QSslConfiguration::setDefaultConfiguration(sslConfig);

Получаю: SSL handshake failed

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

Тебе определённо стоит разобраться с этим прежде, чем решать проблемы с Qt

XMs ★★★★★
()

Я бы рекомендовал:

1. Разобраться с селф-сигнед сертификатами, да. Пока curl обламывается, значит и сертификат косой, либо нет, либо не корректно сформирована подпись УЦ (в данном случае УЦ это мы сами, но от этого не легче). Пока curl не заработает, qt туда рано.

2. А в чём прикол с селф-сигнед? Вполне спокойно можно взять certbot (оно от EFF, бесплатно) и настроить его. Ну короткоживущие сертификаты, ну на 90 дней, но меняется всё автоматом и проблем вообще ноль. Ну, если конечно сеть, где используются эти сертификаты не изолированная наглухо.

Moisha_Liberman ★★
()

Есть в Qt такая штука как ignoreSslErrors(). Злоупотреблять ей не следует и если у программы будут пользователи кроме тебя — хотя бы предупреждай их, прежде чем сертификат подтвердить.

Например, для работы с WebDAV в Qt-программах есть сторонняя библиотека

https://github.com/mhaller/qwebdavlib/

Она при возникновении проблем посылает прикладной программе сигнал checkSslCertifcate, и если та ошибку обработала - включает ignoreSslErrors().

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.