2012-02-03 14 views
10

मेरे पास एक Qt QWebKit आधारित एप्लिकेशन है जिसे वेब पृष्ठों से बात करने के लिए HTTPS का उपयोग करने की आवश्यकता है। मैंने क्यूटीएसडीके, साथ ही ओपनएसएसएल बाइनरी (from here) डाउनलोड किया है।मैं अपने क्यूटी वेबकिट आधारित एप्लिकेशन के साथ ओपनएसएसएल को विंडोज़ में कैसे वितरित कर सकता हूं?

मेरी समस्या मेरे आवेदन को तैनात करने में निहित है। मैंने अपनी आवेदन निर्देशिका में प्रासंगिक क्यूटी डीएलएल फाइलों के साथ-साथ प्रासंगिक ओपनएसएसएल डीएलएल फाइलों (libeay32.dll और ssleay32.dll) की प्रतिलिपि बनाई है, लेकिन जब मैं अपने आवेदन के भीतर से HTTPS वेब पेजों तक पहुंचने का प्रयास करता हूं तो यह विफल हो जाता है! एप्लिकेशन क्रैश नहीं होता है, लेकिन पृष्ठ खाली है। नियमित HTTP पृष्ठ पूरी तरह से ठीक काम करते हैं।

यह स्पष्ट है कि मैं अपने आवेदन के साथ ओपनएसएसएल को वितरित करने के तरीके में एक त्रुटि है, मुझे यकीन नहीं है कि मैं कहां गलत हो रहा हूं।

मैं वास्तव में अपने आवेदन के साथ ओपनएसएसएल इंस्टॉलर को बंडल करना नहीं चाहता हूं।

+1

क्या आप निश्चित हैं कि आप सभी कॉल साइटों पर ओपनएसएसएल त्रुटि रिटर्न की जांच कर रहे हैं और संभावित रूप से लॉगिंग या अन्यथा अप्रत्याशित त्रुटि परिणाम दिखा रहे हैं? मैं आसानी से एक अनुपलब्ध प्रमाणपत्र स्टोर या सिस्टम पर अमान्य दिनांक/समय की कल्पना कर सकता हूं जिसके कारण प्रमाणपत्र श्रृंखला सत्यापन त्रुटियां उत्पन्न होती हैं जो "सामान्य" परीक्षण के दौरान पॉप अप नहीं हो सकतीं ... – sarnold

+0

यह एक अच्छा बिंदु है। मैंने कहीं और पढ़ा है कि ओपनएसएसएल त्रुटियों को अनचाहे HTTPS पृष्ठों को लोड करने का कारण बन सकता है। मेरे मामले में मैं सभी ओपनएसएसएल त्रुटियों को संभालने में कामयाब रहा था (उन्हें अनदेखा करके), लेकिन त्रुटि हैडलर को कभी भी मेरे QNetworkManager द्वारा नहीं बुलाया गया था। –

उत्तर

5

हैलो कोई भी इसी तरह के मुद्दों को डीबग करने की कोशिश कर रहा है। समस्या यह थी कि Shining Light Productions द्वारा वितरित ओपनएसएसएल डीएलएल बाइनरीज़ दृश्य सी ++ पुनर्वितरण योग्यता को ठीक से काम करने की आवश्यकता होती है।

विजुअल सी ++ रेडिस्ट्रिब्यूटेबल्स को वितरित किए बिना ओपनएसएसएल डीएलएल को अपने एप्लिकेशन के साथ वितरित करने के लिए, आप MinGW का उपयोग करके ओपनएसएसएल को संकलित कर सकते हैं। ओपनएसएसएल के साथ ओपनएसएसएल को संकलित करने के निर्देश ओपनएसएसएल स्रोत वितरण में शामिल हैं।

यदि आप ऐसा करते हैं तो आपको अपने आवेदन के साथ मिनजीडब्ल्यू डीएलएल वितरित करने की आवश्यकता हो सकती है। यह मेरे लिए कोई समस्या नहीं थी क्योंकि मैंने पहली जगह में एमएनजीडब्ल्यू के साथ क्यूटी आवेदन द्वारा संकलित किया था।

+0

बहुत बहुत धन्यवाद, यह मेरे लिए काम करता है: मैंने ओपनएसएसएल को मिंगव के साथ बनाया है, और समस्या ठीक हो गई है। – Anastasia

2

एसएसएल प्रमाण पत्र को अनदेखा करने का प्रयास कर सकते हैं?

हैडर फ़ाइल:

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

अधिक जानकारी के लिए कृपया अपने क्यूटी HTTP उदाहरण देखें।

+0

यह एक अच्छा मुद्दा है। अगर वे QWebView में HTTPS का उपयोग करना चाहते हैं तो सभी को SSL त्रुटियों को संभालना चाहिए। यह मेरी समस्या का स्रोत नहीं था, लेकिन यह अच्छी सलाह है! –