2012-08-01 9 views
9

निर्दिष्ट किए बिना टोमकैट के लिए क्लाइंट-सीईआरटी का उपयोग करके मैं आने वाले कनेक्शन के लिए टॉमकैट वेब एप्लिकेशन क्लाइंट प्रमाणपत्र प्रमाणीकरण का उपयोग करने की कोशिश कर रहा हूं। Server.xml में clientAuth = true का उपयोग करते समय सब कुछ ठीक काम करता है, हालांकि उसी सर्वर पर चल रहे अन्य अनुप्रयोगों के कारण, हम उत्पादन वातावरण में इसका उपयोग नहीं कर सकते हैं।उपयोगकर्ता नाम

क्या कोई वेब.एक्सएमएल दस्तावेज़ बनाने का कोई तरीका है जैसे कि यह क्लाइंट प्रमाण पत्र के उपयोग को क्लाइंटएथ = सत्य के रूप में उसी तरह से मजबूर करता है? ऐसा लगता है कि क्लाइंट-सीईआरटी सेटिंग का उपयोग करने के लिए आपको अपने सिस्टम तक पहुंचने के लिए प्रत्येक प्रमाणपत्र के लिए टॉमकैट उपयोगकर्ता खाता भी सेट करना होगा? हमें निर्दिष्ट प्रमाणपत्र (सर्वर ट्रस्टस्टोर में सेट) से सभी प्रमाणपत्रों को अनुमति देने में सक्षम होना चाहिए, जहां विषय कुछ नियमों (वास्तविक एप्लिकेशन के भीतर चेक किया गया) से मेल खाता है। मैं उम्मीद कर रहा था कि निम्नलिखित की तरह कुछ काम करेगा, लेकिन अभी तक कोई भाग्य नहीं है!

<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> 
<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
</login-config> 

उत्तर

4

सबसे पहले, यह लग रहा है जैसे आप clientAuth=want बजाय clientAuth=true हैं: है कि ग्राहक एक प्रमाण पत्र प्रदान करने की अनुमति होगी, लेकिन पूरी तरह से एक की आवश्यकता नहीं।

जब आप किसी भी प्रकार के प्रमाणीकरण का उपयोग करते हैं, तो टोमकैट (या उस मामले के लिए कोई सर्वलेट कंटेनर) Principal ऑब्जेक्ट को बनाने में सक्षम होना चाहिए - जिसका नाम (आमतौर पर एक उपयोगकर्ता नाम) है। कंटेनर को यह तय करना होगा कि को एक विशेष अनुरोध को अधिकृत करने के लिए उपयोगकर्ता की कौन सी भूमिकाएं हैं। इसलिए, प्राधिकरण के काम को करने के लिए टोमकैट को पहले से ही उपयोगकर्ताओं के बारे में जानना होगा।

दूसरी तरफ, यदि आपको किसी प्राधिकरण की आवश्यकता नहीं है, तो आप clientAuth=want सेट कर सकते हैं और फिर प्रमाण पत्र सत्यापित करने के लिए Filter का उपयोग कर सकते हैं। CLIENT-CERT प्रमाणीकरण का उपयोग करने की आवश्यकता नहीं है यदि आप पहले से ही अपनी जांच कर रहे हैं।

+1

'clientAuth = false' कनेक्टर कॉन्फ़िगरेशन में और 'web.xml' में' क्लाइंट-सीईआरटी' 'आपको पुनः बातचीत के लिए क्लाइंट-प्रमाणपत्र प्राप्त करने की अनुमति देता है, जो आसान है यदि आप अन्य वेबैप की आवश्यकता नहीं चाहते हैं ब्राउज़र में एक संकेत का कारण बनता है। – Bruno

+1

यही वह है जो मैं ऊपर करने की कोशिश कर रहा था, लेकिन ऐसा लगता है कि मैंने यहां क्लाइंट-सीईआरटी विकल्प के उपयोग को गलत समझा होगा। तो, web.xml में क्लाइंट-सीईआरटी ** केवल ** किसी विशेष उपयोगकर्ता के रूप में प्रमाणीकृत करने के लिए प्रमाण का उपयोग करने के लिए ** है? अब तक का अधिकांश अनुभव आईआईएस के साथ है, और मैं उम्मीद कर रहा था कि टॉमकैट ने वैसे ही काम किया था, जहां आप यह निर्दिष्ट कर सकते हैं कि संपूर्ण सर्वर, या एक व्यक्तिगत प्रोजेक्ट या यहां तक ​​कि एक व्यक्तिगत पृष्ठ को कनेक्शन से पहले प्रस्तुत किए जाने वाले वैध क्लाइंट प्रमाण पत्र की आवश्यकता है या नहीं की अनुमति दी। –

+0

@ क्रिस्टोफर-शल्ट्ज़: मैंने क्लाइंटऑथ = चाहता था, जिसने काम किया लेकिन मुझे यकीन नहीं था कि यह सुरक्षित था या नहीं। हालांकि, इसके बारे में कुछ और सोचना - अगर कोई प्रमाण पत्र प्रस्तुत नहीं किया गया है, तो हमारा कोड वैसे भी काम करेगा और उन्हें अस्वीकार कर देगा। यदि वे क्लाइंट सर्टिफिकेट पेश करते हैं, तो संभवत: यह सत्यापित करने के लिए हमारे कोड पर पारित होने से पहले क्लाइंटऑथ = सत्य (जैसे विश्वसनीय सीए, सीमा में वैधता इत्यादि) पर टॉमकैट करेगा, तो यह संभवतः सभी जांच के माध्यम से जाना होगा, इसलिए यह होगा बिल्कुल वही काम करते हैं? –

2

मैं सिर्फ ऊपर समस्या का समाधान reseaching गया था और अंत में एक समाधान नहीं मिला:

  1. कनेक्टर clientAuth = "false" विशेषता (अन्यथा सर्वर से सभी सुरक्षित कनेक्शन आपसी करेंगे, क्लाइंट सर्वर, SSL के साथ

    कॉन्फ़िगर बिल्ला authentification।

  2. web.xml में निम्नलिखित (मैं बस यहाँ उदाहरण से पता चला है)

    <security-constraint> 
        <web-resource-collection> 
         <url-pattern>/LoginTestServlet1</url-pattern> 
         <http-method>GET</http-method> 
         <http-method>POST</http-method> 
        </web-resource-collection> 
        <auth-constraint> 
         <role-name>manager</role-name> 
        </auth-constraint> 
        <user-data-constraint> 
         <!-- transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE --> 
         <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
        </user-data-constraint> 
    </security-constraint> 
    <security-constraint> 
        <web-resource-collection> 
         <url-pattern>/LoginTestServlet2</url-pattern> 
         <http-method>GET</http-method> 
         <http-method>POST</http-method> 
        </web-resource-collection> 
        <auth-constraint> 
         <role-name>manager</role-name> 
        </auth-constraint> 
        <!-- <user-data-constraint> 
         transport-guarantee can be CONFIDENTIAL, INTEGRAL, or NONE 
         <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
        </user-data-constraint> --> 
    </security-constraint> 
    <login-config> 
        <auth-method>CLIENT-CERT</auth-method> 
        <realm-name>certificate</realm-name> 
        </login-config> 
    

    जोड़ेप्रबंधक

  3. बिल्ला में उन-users.xml निम्नलिखित जोड़ें (कृपया ध्यान दें कि आप स्पष्ट रूप से अपने प्रमाण पत्र की पहचान करनी चाहिए अगर विश्वास की दुकान लगभग समान प्रमाण पत्र तो है इस प्रकार है)

    <role rolename="manager"/> 
    

    < उपयोगकर्ता उपयोगकर्ता नाम = "[email protected], सीएन = एस, OU = बंद, हे = ओएफएस, एल = बुखारा,
    अनुसूचित जनजाति = बुखारा, सी = UZ" पासवर्ड = "" भूमिकाओं = "प्रबंधक" />

  4. एक ब्राउज़र (या कर्ल) पता पंक्ति में डाल दिया:

    https://yourdomain.com:8443/LoginTest/LoginTestServlet1 या
    https://yourdomain.com:8443/LoginTest/LoginTestServlet2

  5. इसके लिए काम करने के लिए आप ब्राउज़र व्यक्तिगत प्रमाणपत्र सूची में प्रमाणपत्र जोड़ने के लिए (आप ब्राउज़र के साथ परीक्षण कर रहे हैं) है।मैंने मोज़िला फ़ायरफ़ॉक्स के साथ प्रयास किया है और यह आपको आसानी से ऐसा करने देगा। (लेकिन यह केवल बी 12 प्रमाण पत्र स्वीकार करता है, इसलिए यह सुझाव दिया जाता है कि आपको जावा कीटोल के साथ openssl का उपयोग करना चाहिए)। अगर सब ठीक से कॉन्फ़िगर किया गया है तो आप मौजूदा लोगों से प्रमाण पत्र चुनने के लिए मोज़िला से संकेत प्राप्त करेंगे। यदि आप कर्ल का उपयोग कर रहे हैं (इसका उपयोग स्वचालित वेब इंटरफेस परीक्षण के लिए किया जाता है तो परीक्षण के लिए निम्नलिखित कमेंट लाइन का उपयोग करें (मैंने अभी यहां एक उदाहरण दिया है।) कृपया ध्यान दें कि आपको ट्रस्ट स्टोर में आयात किया गया प्रमाणपत्र चुनना चाहिए।

    curl -s -k --cert selfsigned.pem --key key.pem -v --anyauth https://yourdomain.com:8443/LoginTest/LoginTestServlet1 --cacert selfsigned.pem या curl -s -k --cert selfsigned.pem --key key.pem -v --anyauth http://yourdomain.com:8080/LoginTest/LoginTestServlet2 --cacert selfsigned.pem

नोट: मेरा कनेक्टर की तरह इस प्रकार दिखता है:

<Connector port="8443" 
     maxThreads="150" scheme="https" secure="true" SSLEnabled="true" 
     sslProtocol="TLS" keystoreType="PKCS12" truststoreType="PKCS12" clientAuth="false" 
       keystoreFile="C:/Program Files/glassfish-3.1.2/glassfish/domains/domain1/config/cacerts.pkcs12" 
       truststoreFile= "C:/Program Files/glassfish-3.1.2/glassfish/domains/domain1/config/cacerts.pkcs12" 
       truststorePass="changeit" 
       keystorePass="changeit" 
       protocol="org.apache.coyote.http11.Http11Protocol"> 
+0

मैं बिल्ला 6.0.35 पर इस परीक्षण किया है, लेकिन यह ग्लासफिश-web.xml करने के लिए फ़ाइल –

+0

कुछ परिवर्तनों के साथ भी glassfish के साथ काम सकता था <सुरक्षा-भूमिका मानचित्रण> प्रबंधक <प्रिंसिपल नाम> EMAILADDRESS = hamzas100 @ याहू .com, सीएन = एस, OU = बंद, हे = ओएफएस, एल = बुखारा, एस = बुखारा, सी = UZ प्रबंधक

+0

कुछ प्रमाण पत्र के लिए आसान कर रहे हैं ब्राउज़र व्यक्तिगत स्टोर जैसे pkcs12 प्रमाणपत्रों में जोड़ने के लिए। उनके लिए क्रोम/क्रोमियम और इंटरनेट एक्सप्लोरर ब्राउज़र (नए संस्करण) के व्यक्तिगत प्रमाणपत्र स्टोर में जोड़ने के लिए बस उन पर डबल क्लिक करें और विज़ार्ड में चरणों का पालन करें। मोज़िला फ़ायरफ़ॉक्स v 21 जैसे अन्य लोगों के लिए आपको ब्राउज़र पर मैन्युअल रूप से करना होगा। –

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