2009-02-12 7 views
26

का उपयोग मैं मूल रूप से जावा के उपयोग से एक सरकारी सीएसी कार्ड के साथ इंटरफेस करने के तरीके सीखने के लिए कुछ जगह ढूंढ रहा हूं।सामान्य एक्सेस कार्ड (सीएसी) प्रमाणीकरण जावा

आखिरकार, मेरा लक्ष्य यह पता लगाना है कि टॉमकैट/जे 2 ईई सर्वर का उपयोग करके होस्ट की गई वेबसाइट तक पहुंच अधिकृत करने के लिए सीएसी कार्ड प्रमाणीकरण (पिन नंबर द्वारा) का उपयोग कैसे किया जाए।

लेकिन मुझे शुरू करने के लिए कहीं और आवश्यकता होगी। तो मुझे लगता है कि मैं सीएसी कार्ड से सीएसी कार्ड की जानकारी को पढ़ने के लिए एक छोटा जावा प्रोग्राम लिखकर शुरू करूंगा जो मेरे कीबोर्ड पर कार्ड रीडर में डाला गया है (संख्यात्मक कीपैड के ऊपर सीएसी रीडर के साथ डीएलएल कीबोर्ड)।

गूगल खोज करके, मैं cacard जावा परियोजना (https://cacard.dev.java.net/) जो OpenSSO परियोजना ने उनकी जगह ली पाया। लेकिन मुझे कार्ड से कनेक्ट करने, कार्ड से पढ़ने के लिए इसका उपयोग करने के तरीके का नमूना कोड नहीं मिल रहा है।

क्या कोई जानता है कि मुझे कुछ नमूना कोड कहां मिल सकता है ताकि मैं सीखना शुरू कर सकूं कि कैसे जावा का उपयोग कर एक सीएसी कार्ड से बातचीत करें?

धन्यवाद

संपादित करें:

अधिक शोध करने के बाद, मैं सोच रहा था, मैं सक्षम सिर्फ server.xml फ़ाइल में कनेक्टर तत्व में clientAuth="true" स्थापित करने के लिए हो सकता है?

http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

clientAuth: सच को यह मान सेट करें यदि आप बिलाव सभी SSL ग्राहकों आदेश में इस सॉकेट का उपयोग करने के एक ग्राहक प्रमाणपत्र पेश करने के लिए आवश्यकता होती है करना चाहते हैं।

+0

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

+0

पॉल, मैं लगभग वही करना चाहता हूं जो आपने किया था। मुझे इन उपकरणों के बारे में कुछ नहीं पता है और मैं वर्ग एक से शुरू कर रहा हूं। क्या आप उस समाधान को पोस्ट करना चाहते हैं जिसका उपयोग आपने समाधान के लिए किया था - संवेदनशील जानकारी को फिर से बाहर/अस्पष्ट किया गया था? धन्यवाद किसी भी तरह से। शुभ शुक्रवार। स्टीव – Steve

उत्तर

13

क्या आप वेब एप्लिकेशन बना रहे हैं, या क्लाइंट पर चलने वाले सॉफ़्टवेयर लिखने की कोशिश कर रहे हैं (अपना खुद का वेब ब्राउज़र की तरह)?

यदि आप एक वेब एप्लिकेशन बना रहे हैं, तो यह काफी मानक क्लाइंट प्रमाणन प्रमाणीकरण है। तथ्य यह है कि प्रमाण पत्र हार्डवेयर टोकन से आया है सर्वर के लिए बहुत कुछ नहीं बदलता है; यदि आप केवल सीएसी प्रमाणपत्र स्वीकार करना चाहते हैं, तो सर्वर क्लाइंट प्रमाणपत्र प्रमाणित करते समय आप स्वीकार्य प्रमाणपत्र नीतियों का सेट निर्दिष्ट कर सकते हैं। (नीति सत्यापन PKIX सत्यापन का एक मानक हिस्सा है।) यदि यह एप्लिकेशन किसी सरकारी ग्राहक के लिए है, तो आपको यह सुनिश्चित करने के लिए अपनी सुरक्षा टीम के साथ मिलकर काम करने की आवश्यकता होगी कि आपका समाधान उनकी आवश्यकताओं को पूरा करता है, जो कड़े हो सकते हैं। यदि यह आपका परिदृश्य है, तो मुझे बताएं और मैं जिन मुद्दों का सामना कर रहा हूं, उनके साथ मैं अपना उत्तर अपडेट करूंगा।

यदि आप एक ग्राहक लिख रहे हैं, और भौतिक पाठक तक पहुंचने की आवश्यकता है, तो आप जावा 1.5 के बाद Sun PKCS #11 provider का उपयोग करने में सक्षम हो सकते हैं। मैं इस प्रदाता के साथ प्रयोग किया है, और आप another answer.


में इसके बारे में अधिक पढ़ सकते हैं सर्वर पर, आप जांच करनी चाहिए कि सुरक्षा प्रमाणपत्र निरस्त नहीं है। हालांकि, इनमें से कुछ सीआरएल विशाल — हमारे पास 100 एमबी की सीआरएल फाइलों के लायक थे, और अंतर्निहित सूर्य निरसन जांचकर्ता इस आकार में अच्छी तरह से स्केल नहीं करता है।

आपको यह सुनिश्चित करने की भी आवश्यकता होगी कि आपके पास टॉमकैट के "ट्रस्ट" कुंजी स्टोर में सही रूट सीए प्रमाण पत्र हैं (सरकारी रूट सीए कर्ट ढूंढने में थोड़ा मुश्किल है क्योंकि वे यह सुनिश्चित करना चाहते हैं कि उपयोगकर्ता उन्हें सही तरीके से सत्यापित कर रहे हों)। हमने यह भी पाया कि फ़ायरफ़ॉक्स पूरी सर्टिफिकेट श्रृंखला नहीं भेजता है जब तक कि उपयोगकर्ता इंटरमीडिएट प्रमाणपत्र मैन्युअल रूप से अपने ब्राउज़र में आयात नहीं करते हैं।

+0

हम वेब एप्लिकेशन बना रहे हैं। तो मुझे कार्ड को सही तरीके से पढ़ने के बारे में चिंता करने की ज़रूरत नहीं है? ब्राउज़र को मेरे वेब ऐप में प्रमाण पत्र पास करना चाहिए और जब तक उपयोगकर्ता सही पिन में प्रवेश करता है, तो टॉमकैट उन्हें एक्सेस करने की अनुमति देगा। गलत पिन, टोमकैट सही पहुंच से इंकार कर देगा? –

+0

यह सही है। पिन प्रमाणीकरण का समर्थन करने वाले हस्ताक्षर ऑपरेशन को सक्षम करने के लिए कार्ड को बताता है। अधिक टिप्स के लिए उपरोक्त मेरे संपादन देखें। क्या आप यूएस डीओडी द्वारा जारी सीएसी का उपयोग कर रहे हैं? क्या यह आवेदन सरकारी एजेंसी के लिए है? ऐसे कई अतिरिक्त नियम हैं जिन्हें आपको पालन करने की आवश्यकता होगी। – erickson

+0

+1। आपके वेब सर्वर को अनुरोध में एक एक्स.50 9 प्रमाण प्राप्त होगा – Kevin

0

एसएसओ प्रकार के अनुप्रयोग जैसे OpenSSO या JOSSO का उपयोग कर प्रमाण प्रमाणीकरण का उपयोग करने में देखें। एजेंट को एम्बेड करने के लिए सरल होना चाहिए, और वे पहले से ही अधिकांश विवरण लागू कर चुके हैं। digital certificates setup

8

आप card.config नामक एक फ़ाइल बनाने की आवश्यकता और उस में निम्नलिखित लाइनों में शामिल हैं::

name = myConfig 
library = /path/to/library/that/implements/cac/card/reader 
आप इसे अपने आप को क्या करने की जरूरत है, वे भी इस तरह के रूप में की जरूरत चरणों से संबंधित दस्तावेज की एक बहुत कुछ है

और फिर इस कोशिश:

import java.io.*; 
import java.util.*; 

import java.security.cert.CertificateException; 
import java.security.KeyStoreException; 
import java.security.cert.X509Certificate; 

import java.security.KeyStore; 
import java.security.Provider; 
import java.security.SecureRandom; 
import java.security.Security; 

import javax.net.ssl.KeyManagerFactory; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSocketFactory; 
import javax.net.ssl.TrustManagerFactory; 

public class Test 
{ 
    public static void main(String arg[]) throws Exception 
    { 
     try 
     { 
     //Create our certificates from our CAC Card 
     String configName = "card.config"; 
     Provider p = new sun.security.pkcs11.SunPKCS11(configName); 
     Security.addProvider(p); 

     //Get the pin from user entered data 
     Console c = System.console(); 
     char[] pin = c.readPassword("Enter your PIN: "); 
     KeyStore cac = null; 

     cac = KeyStore.getInstance("PKCS11"); 
     cac.load(null, pin); 

     showInfoAboutCAC(cac); 

     } 
     catch(Exception ex) 
     { 
     //System.out.println("*" + ex.getMessage()); 
     ex.printStackTrace(); 
     System.exit(0); 
     } 
    } 

    public static void showInfoAboutCAC(KeyStore ks) throws KeyStoreException, CertificateException 
    { 
     Enumeration<String> aliases = ks.aliases(); 

     while (aliases.hasMoreElements()) 
     { 
     String alias = aliases.nextElement(); 
     X509Certificate[] cchain = (X509Certificate[]) ks.getCertificateChain(alias); 

     System.out.println("Certificate Chain for : " + alias); 
     for (int i = 0; i < cchain.length; i ++) 
     { 
      System.out.println(i + " SubjectDN: " + cchain[i].getSubjectDN()); 
      System.out.println(i + " IssuerDN: " + cchain[i].getIssuerDN()); 
     } 
     } 
    } 
} 

इस बिंदु पर आप एक कीस्ट्रोक कि आप https वेब सर्वर से बात करने के लिए ssl सॉकेट बनाने के लिए उपयोग कर सकते हैं।

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