2013-02-04 15 views
5

के साथ ओपनएसएसएल का उपयोग करें मैंने HTTP पर एक अद्वितीय प्रोटोकॉल विकसित किया है (मैं सीपीपी में) और अपने सर्वर के साथ संवाद करने के लिए इसका उपयोग करता हूं। अब, मैं डेटा को स्थानांतरित करने के लिए अपने मालिकाना प्रोटोकॉल पर एसएसएल कनेक्शन स्थापित करना चाहता हूं।कस्टम चैनल

क्या मैं इसे ओपनएसएसएल का उपयोग कर कर सकता हूं? मैंने वेब की खोज की और मुझे जो कुछ मिला वह बीआईओ से संबंधित है, लेकिन मुझे समझ में नहीं आया कि मेरी जरूरतों के लिए इसका उपयोग कैसे किया जाए ..

वैसे भी, मेरे लिए सबसे अच्छा समाधान एक तरीका होगा जिससे मैं ओपनएसएसएल को अपने मालिकाना पास कर सकता हूं & भेजें फ़ंक्शन प्राप्त करें ताकि सभी संचार केवल मेरे कार्यों के माध्यम से ही जाएंगे।

आगे टीएनएक्स :)

+0

जब आप "HTTP पर एक अद्वितीय प्रोटोकॉल" कहते हैं, तो क्या आपका मतलब HTTP या प्रोटोकॉल के एक्सटेंशन है जो HTTP लाइब्रेरी के माध्यम से अपने संदेशों का आदान-प्रदान करता है? – Bruno

+0

दूसरा विकल्प - एक प्रोटोकॉल जिसमें अपने संदेश हैं और क्लाइंट और सर्वर के बीच उन्हें पास करने के लिए HTTP का उपयोग करते हैं। – user2039197

+0

आपको [एप्लिकेशन-लेयर प्रोटोकॉल नेगोशिएशन] (https://tools.ietf.org/html/rfc7301) में भी देखना चाहिए। एचटीटीपीएस पर इसका HTTP/2 कैसे कार्यान्वित किया जाता है। – jww

उत्तर

10

बीआईओ जोड़े का उपयोग करें। आप ssltest.c प्रोग्राम में एक उदाहरण पा सकते हैं, bio_pair के लिए स्रोत खोजें। मूल विचार यह है कि आप ओपनएसएसएल इंजन को ब्लैक बॉक्स के रूप में देखते हैं।

  1. आप दूसरी तरफ कनेक्शन पर एन्क्रिप्टेड डेटा प्राप्त करते हैं, आप इसे एसएसएल इंजन के एन्क्रिप्टेड जैव लिखने के लिए है:

    चार बातें अपने कोड है करने के लिए कर रहे हैं।

  2. जब एसएसएल इंजन दूसरी ओर एन्क्रिप्टेड डेटा भेजना चाहता है, तो आपको इसे एसएसएल इंजन के एन्क्रिप्टेड बीआईओ से पढ़ना होगा और इसे दूसरी तरफ ले जाना होगा।

  3. जब आपके पास सादा टेक्स्ट है जिसे आप एन्क्रिप्ट करना और भेजना चाहते हैं, तो आपको इसे एसएसएल इंजन के सादे टेक्स्ट बीआईओ में लिखना होगा।

  4. जब एसएसएल इंजन के पास सादे टेक्स्ट है तो उसने आपके लिए डिक्रिप्ट किया है, आपको इसे एसएसएल इंजन के सादे टेक्स्ट बीआईओ से पढ़ना होगा।

ओपनएसएसएल एसएसएल प्रोटोकॉल के बाद पूरी तरह से इंजन के रूप में कार्य करता है और दो बीआईओ के बीच डेटा ले जाता है। यह आपके लिए सभी प्रोटोकॉल वार्ता और संचालन करता है, जब तक आप इन सभी चार डेटा धाराओं को आगे बढ़ते रहें।

एक चेतावनी मैं आपको यह दे सकता हूं - इन चीजों के बीच कोई विशेष संबंध न मानें। उदाहरण के लिए, आपके पास कुछ सादा पाठ हो सकता है जिसे आप एन्क्रिप्ट करना और भेजना चाहते हैं, और जब आप इसे एसएसएल इंजन के सादे टेक्स्ट बीआईओ में लिखते हैं, तो एसएसएल इंजन दूसरी ओर से कुछ एन्क्रिप्टेड डेटा प्राप्त होने तक प्रगति को आगे बढ़ाने में सक्षम नहीं हो सकता है। एसएसएल इंजन को ब्लैक बॉक्स के रूप में देखें और जब भी संभव हो इन सभी चार चीजें करें। एसएसएल इंजन को "देखने" की कोशिश न करें और, उदाहरण के लिए, उम्मीद है कि आपने एसएसएल इंजन को कुछ एन्क्रिप्टेड डेटा सौंप दिया है, यह आपके लिए जरूरी सादा पाठ होगा। यह हो सकता है, लेकिन इसे दूसरी तरफ एन्क्रिप्टेड डेटा भेजने की भी आवश्यकता हो सकती है।

एक अन्य चेतावनी: एसएसएल इंजन में केवल एक राज्य है। इसमें एक पढ़ा राज्य और एक लेखन राज्य नहीं है। (यदि आप बदसूरत विवरण चाहते हैं तो "दुःस्वप्न परिदृश्य" के लिए this thread खोजें।) यदि आप एकाधिक थ्रेड के साथ एसएसएल कनेक्शन का उपयोग करते हैं और यह एक टीसीपी कनेक्शन की तरह व्यवहार करने की अपेक्षा करता है (जहां पढ़ने और लिखने के पक्ष घातक त्रुटि या कनेक्शन बंद होने के मामले में छोड़कर स्वतंत्र हैं)।

+0

टीएनएक्स !! मैं यह जांचूंगा और देख सकता हूं कि यह मेरे लिए काम करता है या नहीं। – user2039197

0

दूसरा विकल्प - एक प्रोटोकॉल जिसमें अपने संदेश हैं और पर HTTP का उपयोग क्लाइंट और सर्वर के बीच पास करते हैं।

यदि आप अपने स्वयं के संदेशों को पास करने के लिए HTTP का उपयोग कर रहे हैं, तो एसएसएल/टीएलएस के लिए ओपनएसएसएल का उपयोग करके यह संकेत मिलेगा कि आपको अपनी खुद की HTTP लाइब्रेरी लाइब्रेरी भी लिखनी होगी।

इसके बजाय, एक HTTP लाइब्रेरी का उपयोग करें जो HTSSPS (अधिकांश करें) का समर्थन करता है, ओपनएसएसएल के माध्यम से या नहीं। HTTPS के शीर्ष पर अपने कस्टम संदेशों का आदान-प्रदान करना काफी पारदर्शी होना चाहिए और सादे HTTP का उपयोग करने के समान होना चाहिए। आपको सामान्य रूप से HTTPS को कॉन्फ़िगर करने की आवश्यकता होगी।

संबंधित मुद्दे