Jetty को http से https में कैसे लाएं


11

मैं जेट्टी (6.1.24) का उपयोग करके http से https के लिए सभी अनुरोधों को पुनर्निर्देशित करना चाहता हूं। किसी कारण (मेरी अज्ञानता) के कारण यह मुझे प्रभावित कर रहा है। यह वही है जो मेरे पास है:

<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
  <Set name="pattern">http://foobar.com/*</Set>
  <Set name="location">https://foobar.com</Set>
</New>

जवाब में मुझे 200 मिलता है - ठीक है, और शरीर http पर पृष्ठ है, अर्थात अनुप्रेषित नहीं होता है।


मुझे लगता है कि यदि आप मैन्युअल रूप से एक HTTPS url दर्ज करते हैं तो सर्वर सही ढंग से प्रतिक्रिया देता है। क्या आपका जेट्टी लॉग आउटपुट और / या आपके ब्राउज़र में क्या हो रहा है, इसका कोई विवरण प्रदान कर सकता है - क्या आपके ब्राउज़र को बिल्कुल रीडायरेक्ट मिलता है? यदि ऐसा है तो आपने कौन सा URL दर्ज किया है और किस URL ने आपको रीडायरेक्ट किया है?
टिम

हां, सर्वर अनुरोध सही ढंग से https अनुरोध के लिए। मुझे पता चला है कि मुझे पहले 502 क्यों मिल रहा था, मैंने जेट्टी के श्रोता से 8080 पर टिप्पणी की थी ...
नोएल कैनेडी

जवाबों:


6

जेट्टी 9 के लिए बोलते हुए ... यहां बताया गया है कि आप कैसे कर सकते हैं बशर्ते कि आपका एसएसएल कनेक्टर पहले से ही काम करता हो:

चरण 1: सुनिश्चित करें कि सब कुछ आपके web.xml में जोड़कर SSL के माध्यम से जाता है। यदि आप HTTP के माध्यम से किसी संसाधन का उपयोग करने का प्रयास करते हैं, तो यह 403 लौटाएगा! SECURE त्रुटि

<security-constraint>
  <web-resource-collection>
   <web-resource-name>Everything</web-resource-name>
   <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
   <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

चरण 2: जेट्टी को HTTPS में पुनर्निर्देशित करें जब वह 403 देखता है! इसे अपने जेटीएक्सएक्सएक्स एमएल में जोड़कर त्रुटि को देखें।

<New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
   <Arg>
      <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
         <!-- This says... Redirect to https://host:8443 if server returns "NOT SECURE" error -->
         <Set name="secureScheme">https</Set>
         <Set name="securePort">8443</Set>
      </New>
   </Arg>
   <Call name="addCustomizer">
      <Arg>
         <New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
      </Arg>
   </Call>
</New>

<!-- This is your HTTP connector, you should have another one for HTTPS -->
<New class="org.eclipse.jetty.server.ServerConnector">
   <Arg name="server">
      <Ref refid="MyServer" />
   </Arg>
   <Arg name="factories">
      <Array type="org.eclipse.jetty.server.ConnectionFactory">
         <Item>
            <New class="org.eclipse.jetty.server.HttpConnectionFactory">
               <Arg name="config">
                  <!-- defined above -->
                  <Ref refid="tlsHttpConfig" />
               </Arg>
            </New>
         </Item>
      </Array>
   </Arg>
   <Set name="host">localhost</Set>
   <Set name="port">8080</Set>
</New>

4

मुझे लगता है कि पैटर्न केवल यूआरआई से मेल खा रहा है। आपको कुछ इस तरह का उपयोग करना चाहिए:

<New id="forwardedHttps" class="org.eclipse.jetty.rewrite.handler.ForwardedSchemeHeaderRule">
           <Set name="header">X-Forwarded-Scheme</Set>
           <Set name="headerValue">https</Set>
           <Set name="scheme">https</Set>
</New>

देखें: http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/rewrite/handler/RewriteHandler.html


Jetty9 के रूप में, लिंक होना चाहिए eclipse.org/jetty/documentation/current/rewrite-handler.html
foo

1

मैंने अभी डॉक्टर जोड़ा: http://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Redirecting_http_requests_to_https


1
सर्वर दोष में आपका स्वागत है! आम तौर पर हम साइट पर उत्तर पसंद करते हैं कि वे अपने दम पर खड़े होने में सक्षम हों - लिंक बहुत बढ़िया हैं, लेकिन यदि वह लिंक कभी भी उत्तर को तोड़ता है, तो अभी भी उपयोगी होने के लिए पर्याप्त जानकारी होनी चाहिए। अधिक विवरण शामिल करने के लिए कृपया अपने उत्तर को संपादित करने पर विचार करें।
voretaq7

0

जहां तक ​​मैं बता सकता हूं, जेटी 6 के साथ भेजे गए किसी भी नियम / हैंडलर के साथ ऐसा करना आसान नहीं है।

जिन RedirectPatternRuleमैचों targetमें जेट्टी सर्वर में पथ है, और पूर्ण यूआरआई नहीं है, इसलिए आपका नियम कभी भी मेल नहीं खा रहा है।

आप इसे बदल सकते हैं:

<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
  <Set name="pattern">/*</Set>
  <Set name="location">https://foobar.com</Set>
</New>

हालाँकि, इसके 2 मुद्दे हैं:

  1. यह सभी अनुरोधों (यहां तक ​​कि httpsअनुरोधों) को रीडायरेक्ट करेगा
  2. यह अनुरोधित URL को ध्यान में नहीं रखता है (यह हमेशा locationनिर्दिष्ट के रूप में पुनर्निर्देशित करता है, और जो कुछ भी मेल खाता है उसे अनदेखा करता है pattern)

आप पहले मुद्दे को कुछ चालबाजी से दूर कर सकते हैं।
आप RewriteHandlerएक में लपेट कर सकते हैं ContextHandler, और एक संदर्भ हैंडलर आपको यह निर्दिष्ट करने की अनुमति देता है कि यह कौन से कनेक्टर से अनुरोधों को संभालेंगे ( setConnectorNames)। इसलिए, आप इसका उपयोग कर सकते हैं कि फिर से लिखना केवल http कनेक्टर (ओं) पर अनुरोधों पर लागू हो।

मैं हालांकि दूसरे मुद्दे पर काबू पाने का तरीका नहीं सोच सकता।

मुझे लगता है कि इसके लिए अपना खुद का पुनर्निर्देशन लिखने के लिए आपकी सबसे अच्छी शर्त होगी। यदि आपके पास ऐसा करने के लिए विकास संसाधन नहीं हैं, तो मुझसे संपर्क करें (आप अपने ईमेल पते को मेरे ब्लॉग के माध्यम से पा सकते हैं, जो मेरी प्रोफ़ाइल में है) और मैं एक कोड़ा (जेट्टी के समान लाइसेंस के तहत) को कोड़ा कर सकता हूं। यह एक नियम को लिखने के लिए बहुत सीधे होगा जो http से https में पुनर्निर्देशित करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.