मैं एक लंबे खर्च इस पर समय लेकिन मुझे अंततः एक उदाहरण मिला कि actu सहयोगी काम करता है। यह ग्लासफ़िश और नेटबीन्स आधारित है लेकिन मुझे लगता है कि आप इसे अन्य वातावरण (जैसे एक्लिप्स और टोमकैट) में काम कर सकते हैं यदि आप इसके साथ खेलते हैं।
http://java.sun.com/webservices/reference/tutorials/wsit/doc/WSIT_Security9.html#wp162511
समस्या मैं हालांकि पाया है तब होता है जब आप अपने प्रमाणपत्रों, नहीं जो कि glassfish साथ पहले से इंस्टॉल हो उपयोग करना चाहते हैं।
नोट: मैं सुरक्षा विशेषज्ञ नहीं हूं। इसे उत्पादन वातावरण में तैनात न करें!
ऐसा करने के लिए मैं NetBeans 6.9 उपयोग कर रहा हूँ, JDK 1.6, ग्लासफिश 3.0.1 और OpenSSL v1.0 (मैं अनौपचारिक Win32 बाइनरी उपयोग कर रहा हूँ)
# Create the CA
mkdir ca server client
cd ca
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout ca.key -out ca.pem
echo 02 > serial.txt
cd ..
# Creating the Server Keystore
openssl req -days 3650 -newkey rsa:1024 -keyout server/server.key -out server/server.req
openssl x509 -extensions usr_cert -extfile C:\testbed\OpenSSL-Win32\bin\openssl.cfg -CA ca/ca.pem -CAkey ca/ca.key -CAserial ca/serial.txt -req -in server/server.req -out server/server.crt
openssl pkcs12 -export -inkey server/server.key -in server/server.crt -out server/server.p12 -name server
keytool -importkeystore -destkeystore server/server.jks -deststoretype jks -srckeystore server/server.p12 -srcstoretype pkcs12
keytool -exportcert -alias server -keystore server/server.jks -file server/server.cer
# Create the Client Keystore
openssl req -days 3650 -newkey rsa:1024 -keyout client/client1.key -out client/client1.req
openssl x509 -extensions usr_cert -extfile C:\testbed\OpenSSL-Win32\bin\openssl.cfg -CA ca/ca.pem -CAkey ca/ca.key -CAserial ca/serial.txt -req -in client/client1.req -out client/client1.crt
openssl pkcs12 -export -inkey client/client1.key -in client/client1.crt -out client/client1.p12 -name client1
keytool -importkeystore -destkeystore client/client1.jks -deststoretype jks -srckeystore client/client1.p12 -srcstoretype pkcs12
keytool -exportcert -alias client1 -keystore client/client1.jks -file client/client1.cer
# Import public keys and certificates into each others keystores
keytool -import -noprompt -trustcacerts -alias client1 -file client/client1.cer -keystore server/server.jks
keytool -import -noprompt -trustcacerts -alias server -file server/server.cer -keystore client/client1.jks
keytool -import -noprompt -trustcacerts -alias my_ca -file ca/ca.pem -keystore server/server.jks
keytool -import -noprompt -trustcacerts -alias my_ca -file ca/ca.pem -keystore client/client1.jks
keytool -import -noprompt -trustcacerts -alias my_ca -file ca/ca.pem -keystore "C:\Program Files\glassfish-3.0.1\glassfish\domains\domain1\config\cacerts.jks"
keytool -import -noprompt -trustcacerts -alias my_ca -file ca/ca.pem -keystore "C:\Program Files\Java\jdk1.6\jre\lib\security\cacerts"
move "C:\Program Files\glassfish-3.0.1\glassfish\domains\domain1\config\keystore.jks" "C:\Program Files\glassfish-3.0.1\glassfish\domains\domain1\config\keystore.jks.backup"
copy server\server.jks "C:\Program Files\glassfish-3.0.1\glassfish\domains\domain1\config\keystore.jks"
ग्लासफिश व्यवस्थापक कंसोल में, अपने http-listener पर सुरक्षा सक्षम करें, SSL3, TLS और क्लाइंट प्रमाणीकरण बॉक्स पर निशान लगाएं, प्रमाणपत्र निकनाम को सर्वर पर सेट करें, कॉन्फ़िगर \ keystore.jks पर कुंजी स्टोर, कॉन्फ़िगर \ keystore.jks पर ट्रस्ट स्टोर, PKIX के लिए ट्रस्ट एल्गोरिदम और अधिकतम प्रमाणपत्र लंबाई 5 पर छोड़ दें।
नेटबीन में, एक नई वेब एप्लिकेशन प्रोजेक्ट बनाएं। उसमें, एक नई वेब सेवा बनाएं।
मेरे वेब सेवा कोड इस तरह देखा:
@WebService()
public class ListProducts {
@Resource WebServiceContext context;
@WebMethod(operationName = "listProducts")
public String listProducts() {
return context.getUserPrincipal().toString();
}
}
सही वेब सेवा पर क्लिक करें और संपादित करें वेब सेवा गुण। सुरक्षित सेवा बॉक्स पर निशान लगाएं और सुरक्षा तंत्र के रूप में म्यूचुअल सर्टिफिकेट सुरक्षा का चयन करें। कॉन्फ़िगर करें ... बटन पर क्लिक करें और एन्क्रिप्ट हस्ताक्षर बॉक्स पर निशान लगाएं। अब उपयोग विकास डिफ़ॉल्ट बॉक्स को अनचेक करें और फिर कीस्टोर बटन पर क्लिक करें। अपने server.jks कीस्टोर का स्थान सेट करें और server
उपनाम का चयन करें।ट्रस्टस्टोर कॉन्फ़िगरेशन के लिए ऐसा ही करें (हालांकि आपको यहां उपनाम का चयन करने की आवश्यकता नहीं है)।
अपने ब्राउज़र में client1.p12 क्लाइंट प्रमाणपत्र आयात करें। ग्लासफ़िश पर अपनी वेब सेवा तैनात करें। ब्राउज़र में अपनी वेब सेवा खोलें और एचटीटीपीएस के माध्यम से तैनात डब्लूएसडीएल पर ब्राउज़ करें। डब्ल्यूएसडीएल और किसी भी अन्य स्कीमा डाउनलोड करें। स्थानीय प्रतियों में किसी भी संदर्भित स्कीमा का नाम बदलें ताकि जब आप WSDL2Java NetBeans का उपयोग किसी भी दूरस्थ संसाधन का उपयोग नहीं करेंगे। (यह पैराग्राफ इसलिए है क्योंकि आपने अपने डब्लूएसडीएल को ग्राहकों को अनुमोदित प्रमाण पत्र के साथ प्रतिबंधित कर दिया है, लेकिन नेटबीन इसे दूरस्थ रूप से नहीं ला सकता है क्योंकि उसके पास प्रश्न में प्रमाण पत्र तक पहुंच नहीं है)।
एक नया जावा प्रोजेक्ट बनाएं। एक नया वेब सेवा क्लाइंट बनाएं। संकेत मिलने पर, नेटबीन को अपनी सहेजी गई WSDL फ़ाइल पर इंगित करें। METRO2.0 लाइब्रेरी फ़ाइलों को आयात करें (C:\Program Files\Netbeans 6.9\enterprise\modules\ext\metr\webservices-*.jar
)। अपने जावा \ jdk1.6 \ JRE \ lib \ समर्थन निर्देशिका में
public static void main(String[] args) {
System.getProperties().put("javax.net.ssl.keyStore", "C:\\NetBeansProjects\\security-04\\ssl\\client\\client1.jks");
System.getProperties().put("javax.net.ssl.keyStorePassword", "changeit");
System.getProperties().put("javax.net.ssl.trustStore", "C:\\NetBeansProjects\\security-04\\ssl\\client\\client1.jks");
System.getProperties().put("javax.net.ssl.trustStorePassword", "changeit");
System.out.println(new ListProductsService().getListProductsPort().listProducts());
}
कॉपी webservices-api.jar: मेरे कोड इस तरह देखा। वेब सेवा संदर्भ पर राइट-क्लिक करें और वेब सेवा विशेषताएँ संपादित करें का चयन करें। Keystore स्थान को client1.jks पर सेट करें और उपनाम को client1
पर सेट करें। ट्रस्टस्टोर स्थान को client1.jks पर सेट करें और उपनाम को server
पर सेट करें।
उम्मीद है कि आप अब अपने ग्राहक को चला सकते हैं और यदि आप ऐसा तरह उत्पादन देखना चाहिए: [email protected], CN=Bob Smith, OU=Something, O=SomethingElse, L=AnyTown, ST=AnyState, C=US
यद्यपि आप बहुत अच्छी तरह से आपसी प्रमाणीकरण अवधारणा की व्याख्या की है, लिंक पर सब बहुत उपयोगी नहीं हैं। 2006 से जावा वेब सेवा सुरक्षा ने काफी बदलाव किया है! :) – Catchwa