한국어
Qt
 

QNetworkAccessManager를 사용하여 https URL을 가져오면 SslHandshakeFailedError 에러와 함께 실패하는 경우가 있다.


the SSL/TLS handshake failed and the encrypted channel could not be established. The sslErrors() signal should have been emitted.” 

 

슬롯을 QNetworkReply의 error(QNetworkReply::NetworkError) 신호에 연결하여 이 오류를 잡을(catch) 수 있다. SslHandshakeFailedError 임을 알 수 있다. 이 에러에 대해 이곳에서 자세히 알 수 있다.

 

Qt 응용프로그램에서 이 SslHandshakeFailedError를 수정하려면 2단계를 수행해야 한다.

 

먼저 요청에 대해 피어 확인 모드를 QSslSocket::VerifyNone 으로 설정한다.

QSslConfiguration conf = request.sslConfiguration();
// QSslSocket은 피어로부터 인증서를 요청하지 않는다.
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(conf);

 

서버의 인증서를 확인하지 않아도 SSL 오류(QSslError::NoError)가 계속 발생한다. 그래서 다음 단계는 QNetworkReply의 sslErrors(QList<QSslError>) 신호를 ignoreSslErrors() 슬롯에 연결하여 오류를 무시하는 것이다.