2012-05-09 16 views
14

मेरा आवेदन एक स्टैंडअलोन स्विंग क्लाइंट है जो शास्त्रीय जेएनडीआई लुकअप और आरएमआई-IIOP विधि कॉल के लिए ईजेबी स्टेटलेस सत्र बीन्स का आह्वान करता है। इसे जावा वेबस्टार्ट एप्लिकेशन के रूप में शुरू किया गया है। मेरा उद्देश्य क्लाइंट उपयोगकर्ता की पहचान को EJBContext से getCallerPrincipal विधि से पुनर्प्राप्त करना है, विंडोज वर्कस्टेशन, एक्टिव डायरेक्टरी और वेबस्फेयर सर्वर के बीच केर्बेरोज एसएसओ के लिए लिनक्स पर चल रहा है।वेबस्पेयर पर रिमोट ईजेबी कॉल के लिए केर्बेरोस प्रमाणीकरण कैसे सक्षम करें?

मैं केर्बेरोस प्रमाणीकरण thanks to the infocenter documentation का समर्थन करने के लिए नेटवर्क परिनियोजन मोड में पहले से ही अपने वेबस्पेयर सेल को सफलतापूर्वक कॉन्फ़िगर कर चुका हूं।

दोनों krb5.conf और krb5.keytab फ़ाइलें ठीक है और दोनों लिनक्स kinit, klist और wsadmin के साथ परीक्षण कर रहे हैं, $AdminTask validateKrbConfig उत्तर देता true

client setup केवल कमांड सिस्टम प्रॉपर्टी के साथ सक्षम करने के लिए JAAS login.config फ़ाइल का संदर्भ देता है। मेरा अंतर्ज्ञान मुझे बताता है कि यह शायद पर्याप्त नहीं है।

  • कैसे JNDI प्रारंभिक संदर्भ वातावरण होना चाहिए सेटअप करबरोस बातचीत को गति प्रदान करने:

    लेकिन अब, मैं परीक्षण का मामला अंतिम रूप देने के लिए कोई अधिक जानकारी प्राप्त?

  • यदि सर्वर-साइड पर अन्य आवश्यकताएं हैं जैसे कि मेरी ईजेबी की भूमिका के साथ रक्षा करें (जेबॉस को उदाहरण के लिए इसकी आवश्यकता नहीं है)?

    <property name="java.security.auth.login.config" value="C:\temp\wsjaas_client.config"/> 
    <property name="com.ibm.CORBA.ConfigURL" value="C:\temp\sas.client.props"/> 
    

    मेरे wsjaas_client.config के लिए है:

अद्यतन

रूप ./launchClient साथ JavaEE ग्राहक कंटेनर नहीं चल रहा है, मैं sas.client.props और JAAS लॉगिन विन्यास पढ़ने के लिए मेरी JNLP आवश्यक गुण में निर्धारित किया है ओरेकल जावा में इसमें शामिल हैं:

WSKRB5Login{ 
    com.sun.security.auth.module.Krb5LoginModule required 
     debug=true useTicketCache=true doNotPrompt=true; 
}; 

मेरे sas.client.props शामिल हैं:

com.ibm.CORBA.securityEnabled=true 
com.ibm.CORBA.authenticationTarget=KRB5 
com.ibm.CORBA.loginSource=krb5Ccache 
com.ibm.CORBA.loginUserid= 
com.ibm.CORBA.loginPassword= 
com.ibm.CORBA.krb5CcacheFile= 
com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf 

फिलहाल, कोई Kerberos प्रमाणीकरण शुरू हो रहा है: मेरे Kerberos कैश में (या तो विंडोज या लिनक्स वर्कस्टेशन से) SPN WAS/myserver.mydomain.com के लिए कोई TGS है और JNDI कनेक्शन अभी भी गुमनाम रूप से स्थापित है ।

कोई त्रुटि संदेश, कोई चेतावनी नहीं और आखिरकार कोई प्रिंसिपल नहीं। मैं कैसे गलत या कमी की निदान करता हूं?

अद्यतन 2012/06/20

यहाँ कुछ कदम आगे हैं।यहां तक ​​कि बड़े हिस्से को पढ़ने के बाद

<property name="org.omg.CORBA.ORBSingletonClass" value="com.ibm.rmi.corba.ORBSingleton"/> 
<property name="org.omg.CORBA.ORBClass" value="com.ibm.CORBA.iiop.ORB"/> 
<property name="traceSettingsFile" value="C:\temp\TraceSettings.properties"/> 

फ़ाइल TraceSettings.properties

traceFileName=c:\\temp\\traces.log 
ORBRas=all=enabled 
SASRas=all=enabled 
com.ibm.*=all=enabled 

शामिल हैं: अपने आवेदन Oracle जावा के साथ चल रहा JNLP में, मैं आईबीएम ओर्ब का उपयोग करें और पूर्ण पता लगाने और डिबग जानकारी सक्षम करने के लिए निम्नलिखित गुण निर्धारित किया है WebSphere 7 Security IBM RedBook का मैं अभी भी क्लाइंट-साइड से CSIv2 ट्रिगर केर्बेरोस प्रमाणीकरण प्राप्त करने में विफल रहा हूं।

उत्तर

3

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

यहां उत्तर के टुकड़े हैं।

वेबस्पेयर 7 के बाद, प्रति सर्वर आधार पर सुरक्षा पहलुओं को कॉन्फ़िगर करने के लिए एक नई अवधारणा पेश की गई है: सुरक्षा डोमेन। सैद्धांतिक रूप से कोई भी विकल्प जो किसी सुरक्षा डोमेन में नहीं बदला गया है वैश्विक सुरक्षा अनुभाग से प्राप्त होता है।

केर्बेरोज सेटअप का परीक्षण करते समय, हमने सेल में चल रहे अन्य सर्वरों के साथ परेशानियों से बचने के लिए, हमारे परीक्षण सर्वर के लिए एक समर्पित सुरक्षा डोमेन बनाया है।

लेकिन भले ही करबरोस वैश्विक सुरक्षा में सक्षम किया गया है, यह विरासत में मिला नहीं है/एक सर्वर ने स्वयं अपने सुरक्षा डोमेन के साथ विन्यस्त के लिए सक्षम होना चाहिए।

जैसे ही हम डिफ़ॉल्ट वैश्विक सुरक्षा के साथ हमारे परीक्षण सर्वर चलाने के रूप में

जहां करबरोस विकल्प दिखाई दे रहे हैं और सक्षम है, तो Kerberos प्रमाणीकरण आईबीएम JavaSE 6 एक cmd बल्लेबाजी स्क्रिप्ट साथ से मार डाला के साथ काम करना शुरू किया है सामान्य क्लासपाथ और दस्तावेज में घोषित सभी गुण।

ध्यान दें: JNDI Context.SECURITY_AUTHENTICATION विकल्प कभी भी सेट नहीं होता है। डीकंपिलेशन के बाद, आईबीएम ओआरबी के लिए केवल उपलब्ध मूल्य none, simple और strong लेकिन strong में अभी तक कोई कार्यान्वयन नहीं है।

एक और बिंदु: जेनरेट किए गए लॉग के अनुसार, आईबीएम ओआरबी file:/C:/temp/sas.client.config के साथ com.ibm.CORBA.ConfigURL के मान के रूप में काम करने में सक्षम नहीं है। यह होना चाहिए एक यूआरआई हो और फ़ाइल पथ न हो। C होस्टनाम को हल करने के लिए हमें DNS लुकअप विफलता भी मिली है! Arff। सभी दस्तावेज उदाहरण यूनिक्स file:/path/to/sas.client.config के आधार पर हैं, इसलिए हमने उस फ़ाइल को HTTP सर्वर से वितरित करने से पहले कई परीक्षण किए।

अब तैनाती के जावा WebStart हिस्सा:

  • किसी भी सुरक्षा और कोई Kerberos सेटिंग्स के बिना एक ही मूल JNLP दोनों ओरेकल JavaSE 6 और आईबीएम जावा 6

  • साथ पूरी तरह से काम करता है के साथ जेएसएलपी में वेबस्पेयर सुरक्षा सक्षम और केर्बेरोज (और केवल वह परिवर्तन सेट), आईबीएम जावा 6 पर चल रहे आईबीएम ओआरबी NoClassDefFoundError के साथ एफएफडीसी लॉग मैनेजर कार्यान्वयन के बारे में शिकायत करता है जो क्लासपाथ में उपलब्ध है (अभी भी/हमेशा)। यह वास्तव में जावा वेबस्टार्ट सुरक्षित क्लासलोडर पदानुक्रम के साथ एक कोड असंगतता की तरह लगता है।

  • केर्बेरोज जेएनएलपी के साथ, ओरेकल जावाएसई 6 पर चल रहे आईबीएम ओआरबी बस सुरक्षा सेटिंग्स को अनदेखा करता है और सामान्य रूप से गुमनाम रूप से कनेक्ट होता है।

तो एक पहला कदम अब काम कर रहा है: आईबीएम जावा 6 कमांड लाइन से शुरू किया, लेकिन जांच अभी खत्म नहीं हुई हैं हमारे लक्ष्य तक पहुँचने: करबरोस ओरेकल JavaSE 6 के साथ जावा WebStart संदर्भ में।

+0

आईबीएम के मुताबिक, इस समय आईबीओपी पर प्रमाणीकरण केर्बेरो प्रमाणीकरण प्राप्त करने के लिए आईबीएम जावाएसई 6 दोनों सिरों पर आवश्यक है। तो इसका मतलब यह हो सकता है कि यह सोलारिस पर ओरेकल जावाएसई पर चल रहे वेबस्पेयर के लिए बिल्कुल भी काम नहीं करता है लेकिन मुझे इसके बारे में संदेह है। शायद प्रत्येक तरफ एक ही JVM की आवश्यकता है - लेकिन यह मेरी वर्तमान कॉन्फ़िगरेशन नहीं है। –

4

चूंकि आपने विशेष रूप से आपके द्वारा अनुसरण किए गए चरणों में उल्लेख नहीं किया है, तो आपने अपने sas.client.props को आपके द्वारा प्रदान किए गए क्लाइंट सेटअप लिंक में कॉन्फ़िगर किया है?

आप इस कॉन्फ़िगरेशन को बनाने के तरीके के साथ-साथ अनुप्रयोग क्लाइंट के लिए शेष कॉन्फ़िगरेशन के उदाहरणों के लिए RedBook Implementing Kerberos in a WebSphere Application Server Environment देख सकते हैं।

धारा 13.5 (13.5 जावा ईई अनुप्रयोग क्लाइंट को कॉन्फ़िगर करना) sas.client.props फ़ाइल सहित अपने मोटी क्लाइंट रनटाइम को स्थापित करने के लिए उदाहरण देता है।

+1

मेरे पास पहले से ही सभी संदर्भ हैं। Sas.client.props निश्चित रूप से पर्याप्त नहीं है ... अभी तक कोई kerberos प्रमाणीकरण ट्रिगर नहीं किया गया है। तो मैं पूछे दो सवाल। –

+0

sas.client.props को वेबस्पियर सर्वर पर स्वयंसेवक दस्तावेज़ीकरण के अनुसार संशोधित किया गया है ... मैं सहमत हूं कि पीडीएफ का पालन करना आसान है। लेकिन मैं अपने ईजेबी क्लाइंट को स्टैंडअलोन जेवीएम के रूप में चलाता हूं - मैं लॉन्च क्लाइंट के साथ जावाईई क्लाइंट कंटेनर का उपयोग नहीं करता हूं। –

+0

मेरा आवेदन जावा वेबस्टार्ट एप्लिकेशन है। मैंने wasjaas_client.config फ़ाइल और sas.client.properties से गुणों के गुणों को जोड़ा है: com.ibm.CORBA.authenticationTarget = KRB5 और com.ibm.CORBA.loginSource = krb5Ccache लेकिन यह कुछ भी नहीं बदलता है। जेएनडीआई कनेक्शन अन प्रमाणीकृत बनी हुई है। –

6

GSS-API/Kerberos v5 Authentication मार्गदर्शिका के अनुसार आपको JNDI संदर्भ में कॉल करने से पहले केर्बेरोज को प्रमाणित करना होगा। इस प्रकार एक बार जब आप Kerberos विन्यास प्रदर्शन किया है आप आरंभिक संदर्भ कॉन्फ़िगर करें:

  • जब प्रारंभिक संदर्भ बनाने, Context.SECURITY_AUTHENTICATION पर्यावरण संपत्ति स्ट्रिंग "जीएसएसएपीआई" करने के लिए सेट (एपीआई संदर्भ दस्तावेज में)।

मैंने जावा क्लाइंट को अतीत में केर्बेरोज का उपयोग करने के लिए निपटाया है (हालांकि जेएनडीआई के साथ नहीं)।

public static void initKerberosConfig() 
{     
     System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); 
     System.setProperty("java.security.krb5.kdc", "host.name:88"); 
     System.setProperty("java.security.krb5.realm", "REALM"); 
     System.setProperty("sun.security.krb5.debug", "false");         
     Configuration progConfig = getProgramaticLoginConfig(); 
     Configuration.setConfiguration(progConfig); 
} 

private static Configuration getProgramaticLoginConfig() 
{ 
     HashMap<String, String> options = new HashMap<String, String>(); 
     options.put("useTicketCache", "true"); 
     options.put("doNotPrompt", "true");             
     AppConfigurationEntry krb5LoginModule = new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options); 
     final AppConfigurationEntry[] aces = new AppConfigurationEntry[]{krb5LoginModule}; 
     Configuration progConfig = new Configuration() 
     { 
       @Override 
       public AppConfigurationEntry[] getAppConfigurationEntry(String arg0) 
       {         
         return aces; 
       } 

     }; 
     return progConfig; 
} 

आप शायद अपने संदर्भ के लिए यह tweak करने की आवश्यकता होगी (java.security.krb5.kdc: यहाँ क्लाइंट की तरफ JVM विकल्प और स्थानीय विन्यास फाइल के लिए की जरूरत (से पहले ग्राहक को प्रमाणित करने का प्रयास करता है इस कोड को लागू) को हटाने के लिए मेरी दृष्टिकोण है और java.security.krb5.realm सही नहीं होगा) - लेकिन मुझे उम्मीद है कि यह मदद करता है। लॉगिंग की विशाल मात्रा के लिए sun.security.krb5.debugtrue चालू करें।

+0

धन्यवाद लेकिन आप "निम्न स्तर" केर्बेरोज उपयोग का वर्णन करते हैं। मेरे मामले में, मेरे पास लिखने के लिए कोई कोड नहीं होना चाहिए क्योंकि केर्बेरोज समर्थन आईबीएम कोर्बा ओआरबी कार्यान्वयन में शामिल है और इसे कॉन्फ़िगर करने योग्य होना चाहिए (निश्चित रूप से बिल्कुल आसान नहीं है ...) –

+0

ठीक है - मुझे आईबीएम कोर्बा ओआरबी का उपयोग करने का अनुभव नहीं है, लेकिन ध्यान में रखें - यह कोड नहीं है, यह कॉन्फ़िगरेशन है। यह कोड आवश्यक JVM विकल्प और Krb5LoginModule कॉन्फ़िगरेशन फ़ाइल के लिए बस एक प्रोग्रामिक प्रतिस्थापन है। –

+0

मुझे लगता है कि यह java.security.auth.login.config विकल्प को प्रतिस्थापित करता है और सामग्री का पालन करता है ... –

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