2012-04-13 15 views
6

साथ एसएसएल मुझे यकीन है कि यह एक सामान्य प्रश्न है, लेकिन मैं कुछ भी मैं एक ही सवाल किया जा रहा है के रूप में मान्यता नहीं मिल सका हूँ।अपाचे HTTPD/mod_proxy/बिलाव और ग्राहक प्रमाणन

मैं कई वेब क्षुधा बिलाव में चल रहा है, उदाहरण के लिए कुछ पृष्ठों के साथ एसएसएल द्वारा सुरक्षित लॉगिन पेज को उनके वेब.एक्सएमएल में गोपनीयता तत्वों द्वारा परिभाषित किया गया है। ऐप्स में से एक प्रमाणपत्र के माध्यम से क्लाइंट-प्रमाणीकरण भी स्वीकार करता है। मेरे पास एक व्यापक जेएएएस-आधारित प्राधिकरण & प्रमाणीकरण योजना भी है, और विभिन्न वेबैप के बीच सभी प्रकार के साझा कोड और विभिन्न जेएएएस कॉन्फ़िगरेशन इत्यादि हैं।

मैं वास्तव में इस बात का कोई भी परेशान करने के लिए है, जबकि नीचे पूरा नहीं करना चाहती।

अब मैं टोमकैट उदाहरणों को जोड़ने से पहले लोड बैलेंसर के रूप में टोमकैट के सामने मॉड-प्रॉक्सी और मॉड-प्रॉक्सी-बैलेंसर के साथ अपाचे HTTPD को डालने की प्रक्रिया में हूं।

जो मैं एचटीटीपीएस अनुरोधों के लिए पूरा करना चाहता हूं वह यह है कि उन्हें एचटीएमएल डीएसएल के बिना टोमकैट पर 'अंधा' रीडायरेक्ट किया जाता है, यानी HTTPD सिर्फ सिफरटेक्स्ट को सीधे टोमकैट में भेजता है ताकि टीसी लॉग इन के साथ पहले से ही कर रहा है , एसएसएल, web.xml गोपनीयता गारंटी, और सबसे महत्वपूर्ण ग्राहक प्रमाणीकरण।

यह संभव विन्यास के साथ मैं का वर्णन किया है है?

मैं webapps और एसएसएल और HTTPS और बिलाव साथ बहुत परिचित हूँ, लेकिन अपाचे HTTPD की बाहरी पहुँच की मेरी जानकारी सीमित है।

के लिए मुबारक इस ले जाया गया, यदि आवश्यक हो, लेकिन यह config फाइलों के साथ प्रोग्रामिंग की तरह है;)

+0

@downvoter आपका बिंदु? – EJP

उत्तर

7

यह this question, मैं जहां उत्तर दिया है के लिए इसी तरह लग रहा है कि यह संभव नहीं है:

आप कर सकते हैं अपाचे से टॉमकैट में बस एसएसएल/टीएलएस यातायात को रिले नहीं करें। या तो आपका एसएसएल कनेक्शन अपाचे पर समाप्त होता है, और फिर आपको प्रॉक्सी को टॉमकैट (एसएसएल [एचटीपीडी और टोमकैट के बीच] यातायात में शायद ही कभी उपयोगी होता है) या आप क्लाइंट को सीधे टॉमकैट से कनेक्ट करते हैं और इसे संभालने देते हैं एसएसएल कनेक्शन।

मैं मानता हूं कि यह इस दावे को वापस करने के लिए लिंक का एक छोटा सा हिस्सा है। मुझे लगता है कि मैं गलत हो सकता हूं (मैंने इसे कभी नहीं देखा है, लेकिन इसका सख्ती से यह मतलब नहीं है कि यह अस्तित्व में नहीं है ...)।

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

ही एकमात्र विकल्प है कि mod_proxy documentation में एक यूआरएल पर निर्भर नहीं लगता AllowCONNECT, जो है आगे प्रॉक्सी सर्वर के लिए HTTPS के लिए क्या प्रयोग किया जाता है है।

यहां तक ​​कि the options in mod_proxy_balancer कॉन्फ़िगरेशन के किसी बिंदु पर पथ की अपेक्षा करता है। इसके प्रलेखन SSL/HTTPS का उल्लेख नहीं करता है ("यह लोड HTTP, FTP और AJP13 प्रोटोकॉल के लिए समर्थन संतुलन प्रदान करता है"), जबकि mod_proxy वार्ता में कम से कम एसएसएल के बारे में जब CONNECT उल्लेख।

मैं विकल्पों में से एक जोड़े को सुझाव है:

  • , एक iptables आधारित लोड संतुलन का उपयोग httpd माध्यम से जा रहा बिना, बिलाव में कनेक्शन समाप्त होने सीधे।

  • एचटीपीडी में एसएसएल/टीएलएस कनेक्शन समाप्त करना और टॉमकैट को एक सादा HTTP रिवर्स प्रॉक्सी का उपयोग करना।

इस दूसरे विकल्प को क्लाइंट प्रमाणपत्रों और टॉमकैट की सुरक्षा बाधाओं से निपटने के लिए थोड़ा और कॉन्फ़िगरेशन की आवश्यकता है।

यदि आपने <transport-guarantee>CONFIDENTIAL</transport-guarantee> के साथ अपना वेबपैड कॉन्फ़िगर किया है, तो आपको टॉमकैट को कनेक्शन को सुरक्षित के रूप में फ़्लैग करना होगा, तथ्य यह है कि यह उन्हें अपने सादे HTTP पोर्ट से आने के बावजूद देखता है। isSecure() सेट करने के लिए वाल्व को कार्यान्वित करने का तरीका बताते हुए टोमकैट 5, here is an article (मूल रूप से फ़्रेंच में, लेकिन स्वचालित अनुवाद बहुत खराब नहीं है) का वर्णन करते हैं। (यदि आप valves से परिचित नहीं हैं, तो वे फ़िल्टर के समान हैं, लेकिन वेबपैप पर अनुरोध प्रचारित होने से पहले, टॉमकैट के भीतर ही काम करते हैं। उन्हें कैटालिना के भीतर कॉन्फ़िगर किया जा सकता है) मुझे लगता है कि टॉमकैट 5.5 से, HTTP connector secure option बिल्कुल ठीक है, अपने वाल्व की आवश्यकता के बिना। एजेपी कनेक्टर में भी एक समान विकल्प है (यदि mod_proxy_ajp या mod_jk का उपयोग कर रहा है)।

यदि एजेपी कनेक्टर का उपयोग कर रहे हैं, mod_proxy_ajp श्रृंखला में पहला प्रमाणपत्र अग्रेषित करेगा और इसे टॉमकैट (सामान्य अनुरोध विशेषता के माध्यम से) के भीतर उपलब्ध कराएगा। आपको शायद SSLOptions +ExportCertData +StdEnvVars की आवश्यकता होगी। mod_jk (हालांकि मुझे पता है कि बहिष्कृत) ग्राहक द्वारा भेजे गए पूरे श्रृंखला को भी अग्रेषित कर सकता है (JkOptions +ForwardSSLCertChain का उपयोग करके)। यह proxy certificates का उपयोग करते समय आवश्यक हो सकता है (जो कि उनके अंत-इकाई प्रमाण पत्र तक श्रृंखला के बिना अर्थहीन हैं)।

यदि आप mod_proxy_http का उपयोग करना चाहते हैं, तो RequestHeader set X-ClientCert %{SSL_CLIENT_CERT}s जैसे कुछ का उपयोग करके प्रमाणपत्र को an HTTP header (mod_header) के माध्यम से प्रमाण पत्र पास करना है। मुझे सटीक विवरण याद नहीं आ रहे हैं, लेकिन यह सुनिश्चित करना महत्वपूर्ण है कि यह हेडर साफ़ हो गया है ताकि यह क्लाइंट के ब्राउज़र से कभी न आए (जो इसे अन्यथा बना सकता है)। अगर आपको पूर्ण श्रृंखला की आवश्यकता है, तो आप this Httpd patch attempt आज़मा सकते हैं। हेडर को javax.servlet.request.X509Certificate (पीईएम ब्लॉक को पार्स करके) में बदलने के लिए इस दृष्टिकोण को शायद अतिरिक्त वाल्व/फ़िल्टर की आवश्यकता होगी।

अन्य बिंदुओं कि रुचि का हो सकता के एक जोड़े:

  • अगर मैं अच्छी तरह से याद है, आप सीआरएल httpd और configure it to use them के लिए स्पष्ट रूप से फ़ाइलों को डाउनलोड करने की जरूरत है। आप जिस एचटीपीडी का उपयोग कर रहे हैं उसके संस्करण के आधार पर, आपको restart it to reload the CRLs हो सकता है।
  • यदि आप अपने क्लाइंट-सर्टिफिकेट प्राप्त करने के लिए पुनः बातचीत का उपयोग कर रहे हैं, तो CLIENT-CERT निर्देश एचटीपीडी क्लाइंट सर्टिफिकेट को जहां तक ​​मुझे पता है, यह अनुरोध नहीं करेगा (यह अन्यथा वाल्व के माध्यम से किया जाता है जो SSLSession तक पहुंच सकता है जेएसएसई कनेक्टर सीधे)। क्लाइंट-प्रमाणपत्र का अनुरोध करने के लिए आपको Httpd में मिलान पथ को कॉन्फ़िगर करना पड़ सकता है।
+0

धन्यवाद ब्रूनो। ऐसा लगता है कि मुझे (ए) HTTPD और Tomcat के बीच सादे टेक्स्ट का उपयोग करना चाहिए जैसा कि आप सुझाव देते हैं, HTTPD के साथ क्लाइंट को एसएसएल एंडपॉइंट के रूप में, (बी) '<परिवहन-गारंटी> गोपनीय 'से छुटकारा पाएं, जो मुझे परेशान नहीं करता है, और कोड में 'हैसुरर()' को खोज और नष्ट कर देता है, और (डी) 'mod_proxy_ajp' का उपयोग करें, इसलिए प्रमाण पत्र आता है, जो वास्तव में मैं पहले से ही कर रहा था।मैं HTTPS और certs आदि के लिए HTTPD कॉन्फ़िगर करना संभाल सकता हूं – EJP

+0

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

+1

आप '<स्थान/पथ/...> 'तत्व में' SSLVerifyClient none' 'और' SSLVerifyClient वैकल्पिक/आवश्यकता 'को रखने में सक्षम हो सकते हैं (लेकिन पथ को वेबपैप की अपेक्षा के अनुसार विशिष्ट होना चाहिए)। – Bruno