2012-02-03 28 views
10

Tôi có một ứng dụng Qt QWebKit dựa trên nhu cầu sử dụng HTTPS để nói chuyện với các trang web. Tôi đã tải xuống QtSDK cũng như các tệp nhị phân OpenSSL (from here).Làm cách nào để phân phối OpenSSL bằng ứng dụng dựa trên Qt WebKit của tôi sang Windows?

Vấn đề của tôi nằm trong việc triển khai ứng dụng của tôi. Tôi đã sao chép các tệp DLL Qt có liên quan, cũng như các tệp DLL OpenSSL có liên quan (libeay32.dllssleay32.dll) vào thư mục ứng dụng của tôi, nhưng khi tôi cố gắng truy cập các trang web HTTPS từ bên trong ứng dụng của tôi thì không thành công! Ứng dụng không bị lỗi, nhưng trang trống. Các trang HTTP thông thường hoạt động hoàn toàn tốt.

Rõ ràng là có lỗi với cách tôi phân phối OpenSSL bằng ứng dụng của mình, tôi không chắc mình đang đi sai ở đâu.

Tôi thực sự không muốn gói trình cài đặt OpenSSL bằng ứng dụng của mình.

+1

Bạn có chắc chắn bạn đang kiểm tra lỗi OpenSSL ở tất cả các trang cuộc gọi và có khả năng ghi nhật ký hoặc hiển thị kết quả lỗi không mong muốn khác không? Tôi có thể dễ dàng hình dung kho lưu trữ chứng chỉ bị thiếu hoặc ngày/giờ không hợp lệ trên hệ thống gây ra lỗi xác thực chuỗi chứng chỉ có thể không bật lên trong khi kiểm tra "bình thường" ... – sarnold

+0

Đây là điểm tốt. Tôi đã đọc ở những nơi khác mà các lỗi OpenSSL không được giải quyết có thể làm cho việc tải các trang HTTPS dừng lại. Trong trường hợp của tôi, tôi đã xử lý tất cả các lỗi OpenSSL (bằng cách bỏ qua chúng), nhưng trình xử lý lỗi không bao giờ được gọi bởi QNetworkManager của tôi. –

Trả lời

5

Xin chào bất kỳ ai đọc bài này đang cố gắng gỡ lỗi các vấn đề tương tự. Vấn đề là OpenSSL DLL nhị phân phân phối bởi Shining Light Productions yêu cầu Visual C++ redistributables hoạt động đúng.

Để phân phối OpenSSL DLL với ứng dụng của bạn mà không cần phải phân phối Visual C++ Redistributables, bạn có thể tự biên dịch OpenSSL bằng cách sử dụng MinGW. Các hướng dẫn để biên dịch OpenSSL với MinGW được bao gồm trong bản phân phối nguồn OpenSSL.

Bạn có thể cần phân phối tệp MinGW DLL với ứng dụng của mình nếu bạn thực hiện việc này. Đây không phải là vấn đề đối với tôi kể từ khi tôi biên soạn ứng dụng Qt với MinGW ngay từ đầu.

+0

Cảm ơn rất nhiều, điều đó phù hợp với tôi: Tôi đã xây dựng OpenSSL với mingw và sự cố đã được khắc phục. – Anastasia

2

Có thể thử bỏ qua chứng chỉ ssl không?

header file:

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

vị thi công:

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

Phương pháp định nghĩa:

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(); 
} 
} 

Để biết thêm thông tin, vui lòng xem ví dụ QT HTTP của bạn.

+0

Đây là một điểm tốt. Mọi người nên xử lý các lỗi SSL nếu họ định sử dụng HTTPS trong QWebView. Đây không phải là nguồn gốc của vấn đề của tôi, nhưng đó là lời khuyên tốt bất kể! –

Các vấn đề liên quan