2016-11-02 9 views
7

का उपयोग कर एप्लिकेशन से सुरक्षित सर्वर संचार मैं सी ++ (क्रॉस-प्लेटफ़ॉर्म; विंडोज़, मैक और लिनक्स) में एप्लिकेशन विकसित कर रहा हूं, जिसे libcurl के साथ https प्रोटोकॉल का उपयोग कर सर्वर के साथ सुरक्षित रूप से संवाद करने की आवश्यकता है (winssl/विंडोज/मैक/लिनक्स पर क्रमशः darwinssl/openssl)। मैंने एक कर्ल विकल्प बदल दिया है, CURLOPT_SSL_VERIFYPEER0 से 1 पर जो एमटीएम मुद्दों को रोकने में मदद करनी चाहिए।सी ++/libcurl/openssl

यह मुद्दों है कि मुझे लगता है कि विकल्प को बंद करने के लिए एक प्रारंभिक खोज अंक, लेकिन गहन जानकारी के बाद पाया कारण बना हुआ है:

Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); from curl docs

और

Get a better/different/newer CA cert bundle! One option is to extract the one a recent Firefox browser uses by running 'make ca-bundle' in the curl build tree root, or possibly download a version that was generated this way for you. from curl docs

मैं वास्तव में मैं के रूप में बंडल को CURLOPT_CAINFO का उपयोग विंडोज़ पर CURLOPT_CAPATH का उपयोग कर मुद्दों के कुछ शब्द देखा था; curl docs। मैंने विंडोज और मैक पर एप्लिकेशन के साथ इस बंडल को डाउनलोड और इंस्टॉल किया है और मैं जानना चाहता हूं कि यह करने का सही तरीका है या यदि कोई बेहतर अभ्यास है।

प्रारंभ में इसने कुछ कॉर्पोरेट नेटवर्क या प्रॉक्सी के पीछे चल रहे एप्लिकेशन के उपयोगकर्ताओं के लिए समस्याएं उत्पन्न कीं जो कि विंडोज़ पर ओपनएसएल के बजाय winssl के खिलाफ libcurl के निर्माण द्वारा तय की गई थीं; हालांकि संभावित रूप से फ़ायरवॉल मुद्दे के रूप में खुद को छिपाने के बावजूद, अभी भी अस्पष्ट है हालांकि ऐसा लगता है।

लंबाई के लिए खेद है।

एप्लिकेशन के साथ ca-cert-bundle.crt इंस्टॉल करने के बारे में कुछ भी मूर्खतापूर्ण है, और क्या ऐसा कुछ भी है जो इस स्थापित एप्लिकेशन से सर्वर के साथ सुरक्षित रूप से संवाद करने के लिए अलग-अलग किया जाना चाहिए?

एक थोड़ा अलग है, लेकिन अभी भी बहुत से संबंधित, मुद्दा रहा है CURLOPT_CAINFO लिनक्स त्रुटि देने पर है:

error setting certificate verify locations: CAfile: ../share/my_application/curl-ca-bundle.crt CApath: none

से भीतर आवेदन सफलतापूर्वक काम करता है पढ़ने के लिए फ़ाइल खोलने का प्रयास हालांकि। संपादित करें: इस समस्या को मैंने CURLOPT_CAINFO फ़ील्ड को लिनक्स (इसे खाली छोड़कर) पर सेट करके हल किया और आवेदन पैकेज में निर्भरता पैकेज ca-certificates जोड़कर हल किया। डिफ़ॉल्ट पथ सही ढंग से /etc/ssl/certs/ca-certificates.crt है और ऐसा लगता है कि काम कर रहा है। मुझे यह एप्लिकेशन के साथ बंडल स्थापित करने से थोड़ा बेहतर लगता है।

EDIT2: हालांकि हल यह कभी कभी ca-प्रमाण पत्र पैकेज प्रकट होता है ca-certificates.crt और बदले ca-bundle.crt इंस्टाल नहीं करता और स्थानों अलग distros पर अलग-अलग रूप में this source, happyassassin.net से पता चलता है कि विभिन्न Linux सिस्टम की दुकान विभिन्न स्थानों में सीए बंडल। के रूप में यह को संभालने के लिए एक स्पष्ट उत्तर प्रतीत नहीं हुआ। क्या मुझे कॉन्फ़िगरेशन फ़ाइल में एक मान का उपयोग करना चाहिए जिसे उपयोगकर्ता तब संशोधित कर सकता है, या विषय पर किसी अन्य विचार को?

Edit3: कुछ उपयोगकर्ताओं ने बताया है कि मेरा नाम पथ में से एक में मौजूद है के लिए, मैं पूरी तरह से यकीन है कि कैसे संभव है के रूप में केवल एक चीज मैं कर्ल लिए निर्धारित किए गए है कि मैं कहाँ का निर्माण नहीं कर रहा हूँ कर्ल दिखता है openssl/c पुस्तकालयों की परवाह करता है ...

मुझे एहसास है कि यह एक लोड/मल्टीपार्ट प्रश्न है, लेकिन यह शीर्षक राज्यों के समान विषय पर है, मैं किसी भी मदद की सराहना करता हूं।

धन्यवाद।

उत्तर

0

मेरी राय में, सिस्टम प्रमाण पत्र का उपयोग करना बेहतर है, फिर एप्लिकेशन के साथ पैकेज प्रमाण पत्र (यदि आप कुछ विशेष कॉर्ट्स का उपयोग नहीं कर रहे हैं)। लिनक्स के लिए यह https://serverfault.com/questions/394815/how-to-update-curl-ca-bundle-on-redhat के अनुसार आसान होना चाहिए और Windows के लिए आप winssl उपयोग कर सकते हैं या सिस्टम https://superuser.com/questions/442793/why-cant-curl-properly-verify-a-certificate-on-windowsConfigure cURL to use default system cert store

+0

मैं वर्तमान में विंडोज पर WinSSL उपयोग कर रहा हूँ से फ़ाइल बनाने, फिर भी मेरी प्रारंभिक दृष्टिकोण सुपर उपयोगकर्ता लिंक पर आपने समान था बशर्ते, आवेदन के साथ सीए बंडल शिपिंग, मुझे लगा कि कुछ थोड़ा अजीब था- इसके परिणामस्वरूप कॉर्पोरेट नेटवर्क पर त्रुटियां भी हुईं; ऐसा लगता है कि WinSSL परिवर्तन के बाद से दूर चला गया है, या DNS/फ़ायरवॉल मुद्दे में बदल गया है। लिनक्स पर आपके द्वारा दिया गया लिंक रेडहाट और इसी तरह के डिस्ट्रोज़ के लिए विशिष्ट स्थान दिखाता है, लेकिन डेबियन/उबंटू पर सीए-सर्टिफिकेट पैकेज उन्हें एक अलग स्थान पर रखता है, और इसलिए एक को कैपैट सेट करने से दूसरे को याद आएगा। –

+0

शायद आपको इसे खाली छोड़ देना चाहिए और इसे डिफ़ॉल्ट सीए पथ लेना चाहिए। लेकिन, यह कुछ distros के लिए काम नहीं करेगा (नेट में कुछ बग रिपोर्ट हैं)। तो आपको अलग-अलग रिलीज पर कुछ परीक्षण करने की आवश्यकता होगी और तदनुसार पथ का उपयोग करना होगा ... – Anardael

+0

मैं वास्तव में लिनक्स पर सीए पाथ निर्दिष्ट नहीं करता हूं, इसलिए यही हो रहा है-हो रहा है, मैं देखता हूं कि मेरी आखिरी टिप्पणी कैसा दिखती है मैंने इसे सेट किया, माफ करना, मैं कहने का मतलब था कि वह विकल्प एक ही स्थान पर काम कर सकता है लेकिन दूसरा नहीं। –