2011-02-25 16 views
33

को कैसे कार्यान्वित करें सी या सी ++ में ओपनएसएसएल पर सर्वर नाम संकेत (एसएनआई) को कैसे कार्यान्वित करें?सर्वर नाम संकेत (एसएनआई)

क्या कोई वास्तविक दुनिया उदाहरण उपलब्ध हैं?

+1

कुछ कोड उदाहरणों और उपयोग के लिए यह भी देखें [एसएनआई के साथ एक बॉक्स में एकाधिक डोमेन की सेवा] [http://stackoverflow.com/questions/22373332/serving-multiple-domains-in-one-box-with-sni) अपने सर्वर का परीक्षण करने के लिए 's_client'। – jww

उत्तर

50

ग्राहक पक्ष पर, आप SSL कनेक्शन शुरू करने से पहले SSL_set_tlsext_host_name(ssl, servername) का उपयोग करते हैं।

सर्वर साइड पर, यह एक छोटे से अधिक जटिल है:

  • सेट अप एक अतिरिक्त प्रत्येक अलग प्रमाण पत्र के लिए SSL_CTX();
  • SSL_CTX_set_tlsext_servername_callback() का उपयोग करके प्रत्येक SSL_CTX() पर एक सेरनावैम कॉलबैक जोड़ें;
  • कॉलबैक में, ग्राहक द्वारा आपूर्ति किए गए servername को SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name) के साथ पुनर्प्राप्त करें। उस होस्ट नाम के साथ जाने के लिए दाएं SSL_CTX पर चित्रित करें, फिर SSL ऑब्जेक्ट SSL_CTX पर SSL_set_SSL_CTX() पर स्विच करें। OpenSSL स्रोत वितरण के apps/ निर्देशिका में

s_client.c और s_server.c फ़ाइलें इस कार्यक्षमता को लागू है, इसलिए वे एक अच्छा संसाधन हैं देखने के लिए कि यह कैसे किया जाना चाहिए।

+0

s_client.c और s_server.c अच्छे उदाहरण हैं। मैं एक ऐसे ग्राहक पर एसएनआई लागू करने की कोशिश कर रहा हूं जो भार जनरेटर (नेटवर्क) के रूप में कार्य करता है और http/https अनुरोधों वाला सर्वर हैमर करता है। और सर्वर पहले से ही सर्वर पक्ष एसएनआई लागू है। –

+0

क्या सर्वर कॉल बहुमत वाले संदर्भ में होल्ड करते हैं? ऐसा लगता है कि SSL_set_SSL_CTX सहज रूप से थ्रेडसेफ नहीं है (यानी यदि आपके पास दो अलग-अलग कर्ट के साथ दो अलग-अलग इनबाउंड कनेक्शन हैं, तो आपको कोई समस्या होगी)। – chacham15

+0

@ chacham15: इसे थ्रेड-सुरक्षित बनाने का एक तरीका है एक प्रति एसएसएल_सीटीएक्स() 'प्रति प्रमाणपत्र, प्रति थ्रेड आवंटित करना (और उसी थ्रेड से हमेशा 'एसएसएल' और 'एसएसएल_सीटीएक्स' ऑब्जेक्ट्स को संभालना)। दूसरा तरीका 'CRYPTO_set_id_callback()' और 'CRYPTO_set_locking_callback()' के साथ थ्रेड कॉलबैक सेट करना है, इस मामले में ओपनएसएसएल 'SSL_set_SSL_CTX() 'थ्रेड-सुरक्षित बनाने के लिए लॉकिंग कॉलबैक पर सही कॉल करेगा। – caf

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