2012-02-03 3 views
10

웹 페이지와 통신 할 때 HTTPS를 사용해야하는 Qt QWebKit 기반 응용 프로그램이 있습니다. QtSDK와 OpenSSL 바이너리 (from here)를 다운로드했습니다.Qt WebKit 기반 응용 프로그램과 함께 OpenSSL을 Windows에 배포하려면 어떻게합니까?

내 응용 프로그램을 배포 할 때 문제가 있습니다. 관련 Qt DLL 파일과 관련된 OpenSSL DLL 파일 (libeay32.dllssleay32.dll)을 내 응용 프로그램 디렉토리에 복사했지만 내 응용 프로그램 내에서 HTTPS 웹 페이지에 액세스하려고하면 실패합니다! 응용 프로그램이 충돌하지 않지만 페이지가 비어 있습니다. 정규 HTTP 페이지는 완벽하게 작동합니다.

OpenSSL을 응용 프로그램과 함께 배포하는 방법에 오류가 있다는 것은 분명합니다. 어디서 잘못 될지 잘 모르겠습니다.

OpenSSL 설치 프로그램을 내 응용 프로그램과 함께 제공하고 싶지 않습니다.

+1

모든 통화 사이트에서 OpenSSL 오류를 확인하고 예상치 못한 오류 결과가 기록되거나 남을 가능성이 있습니까? "정상적인"테스트 중에 팝업되지 않는 인증서 체인 유효성 검사 오류가 발생하는 시스템에서 누락 된 인증서 저장소 또는 잘못된 날짜/시간을 쉽게 상상할 수 있습니다. – sarnold

+0

이것은 좋은 지적입니다. 처리되지 않은 OpenSSL 오류로 인해 HTTPS 페이지 로딩이 중단 될 수 있습니다. 내 경우에는 모든 OpenSSL 오류 (무시)를 처리했지만 오류 처리기는 QNetworkManager에서 호출하지 않았습니다. –

답변

5

안녕하세요 누구든지이 문제를 읽고 유사한 문제를 디버그하려고합니다. 문제는 Shining Light Productions으로 배포 된 OpenSSL DLL 바이너리가 제대로 작동하려면 Visual C++ 재배포 가능 패키지가 필요하다는 것입니다.

Visual C++ 재배포 가능 파일을 배포하지 않고도 OpenSSL DLL을 응용 프로그램과 함께 배포하려면 MinGW을 사용하여 직접 OpenSSL을 컴파일 할 수 있습니다. MinGW로 OpenSSL을 컴파일하는 방법은 OpenSSL 소스 배포판에 포함되어 있습니다.

MinGW DLL을 응용 프로그램과 함께 배포해야 할 수도 있습니다. 처음부터 MinGW에서 Qt 애플리케이션으로 컴파일 한 이후로는 나에게 문제가되지 않았습니다.

+0

고맙습니다. 저에게 도움이됩니다. mingw로 OpenSSL을 구축했으며 문제가 해결되었습니다. – Anastasia

2

SSL 인증서를 무시할 수 있습니까?

헤더 파일 :

void sslErrors(QNetworkReply*,const QList<QSslError> &errors); 

생성자 :

connect(&qnam, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), 
     this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>))); 

방법 정의 : 자세한 내용은

void HttpWindow::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors) 
{ 
QString errorString; 
foreach (const QSslError &error, errors) { 
    if (!errorString.isEmpty()) 
     errorString += ", "; 
    errorString += error.errorString(); 
} 

if (QMessageBox::warning(this, tr("HTTP"), 
          tr("One or more SSL errors has occurred: %1").arg(errorString), 
          QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) { 
    reply->ignoreSslErrors(); 
} 
} 

은, 친절하게 당신의 QT HTTP의 예를 참조하십시오.

+0

이것은 좋은 지적입니다. QWebView에서 HTTPS를 사용하려는 경우 모두 SSL 오류를 처리해야합니다. 이것은 내 문제의 근원은 아니지만 상관없이 좋은 조언입니다! –