2012-09-27 22 views
5

मैं tomcat6/7 से कनेक्ट करने वाले उपयोगकर्ताओं को प्रमाणित करने के लिए SSL क्लाइंट प्रमाणपत्र का उपयोग करना चाहता हूं। मुझे टॉमकैट सही तरीके से कॉन्फ़िगर किया गया है, और मैं टॉमकैट को दिए गए ट्रस्टस्टोर में प्रमाण पत्र के साथ हस्ताक्षर करता हूं, आईई और फ़ायरफ़ॉक्स दोनों से सफलतापूर्वक प्रमाणीकरण कर रहा हूं।श्रृंखलाबद्ध ग्राहक प्रमाण पत्र

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

मैं openssl उपयोग कर रहा हूँ, और मैं एक रूट सीए और कोई इंटरमीडिएट CA बनाया है, और मैं एक पत्ता प्रमाण पत्र पर हस्ताक्षर करने के इंटरमीडिएट CA इस्तेमाल किया है। मैंने सभी तीन प्रमाणपत्रों को pkcs12 और पेम में परिवर्तित कर दिया है, और रॉम प्रमाणपत्र को टॉमकैट के लिए ट्रस्टस्टोर में आयात करने के लिए keytool का उपयोग किया है। openssl -verify मध्यवर्ती प्रमाणपत्र (और मध्यवर्ती रूट के खिलाफ सत्यापित) के खिलाफ पत्ता pkcs12 सत्यापित करेगा। लेकिन मुझे मूल प्रमाणपत्र (pkcs12) के खिलाफ सत्यापित करने के लिए पत्ता प्रमाणपत्र (pkcs12) नहीं मिल सकता है। मैं या तो आईई या फ़ायरफ़ॉक्स को पत्ता प्रमाण पत्र का उपयोग करके प्रमाणित करने के लिए नहीं मिल सकता। आईई मुझे प्रमाण पत्र के लिए संकेत देगा, लेकिन प्रमाणित करने में विफल रहता है (टोमकैट के लॉग में कनेक्शन या विफलता का कोई उल्लेख नहीं है)। फ़ायरफ़ॉक्स पत्ती प्रमाण पत्र के लिए संकेत नहीं देता है; यह बस प्रमाणित करने में विफल रहता है।
root.bat:

set name=Root 
set keyPassword=dummypassword 
set trustPassword=dummypassword 
openssl genrsa -des3 -passout pass:%keyPassword% -out %name%.key 4096 
openssl req -new -key %name%.key -passin pass:%keyPassword% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -signkey %name%.key -passin pass:%keyPassword% -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%keyPassword% -passout pass:%keyPassword% -out %name%.pkcs12 
keytool -noprompt -import -file %name%.crt -alias %name% -keystore %name%.truststore -deststorepass %trustPassword% 
keytool -list -v -keystore %name%.truststore -storepass %trustPassword% > %name%.truststore.dump.txt 
keytool -exportcert -alias %name% -keystore %name%.truststore -storetype jks -storepass %trustPassword% -rfc -file %name%.truststore.pem 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%keyPassword% 

openssl verify -CAfile ..\root\Root.pem Leaf.pem 

यहाँ स्क्रिप्ट मैं तीन प्रमाण पत्र उत्पन्न करने के लिए उपयोग कर रहा हूँ कर रहे हैं:

यहाँ कैसे मैं openssl का उपयोग कर जड़ के खिलाफ पत्ता सत्यापित करने का प्रयास है

intermediate.bat:

set name=Intermediate 
set password=dummypassword 
set caDir=../root 
set caName=Root 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.crt -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

पत्ती .bat:

set name=Leaf 
set password=dummypassword 
set caDir=../intermediate 
set caName=Intermediate 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.pem -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

GenerateCertificate.cfg:

[ v3_ca ] 
subjectKeyIdentifier=hash 
authorityKeyIdentifier=keyid:always,issuer 
basicConstraints = CA:true,pathlen:3 

उत्तर

5

समस्या यह है कि जड़ और मध्यवर्ती प्रमाणपत्र CA प्रमाणपत्र के रूप में नहीं बनाया गया था।

उन्हें CA प्रमाणपत्र के रूप में बनाने के लिए

, मैं उनके निर्माण लिपियों के लिए

-extfile GenerateCertificate.cfg -extensions v3_ca 

जोड़ा, और GenerateCertificate.cfg मेरे कार्य निर्देशिका (जो प्रमाणपत्र निर्माण बैच फ़ाइलों निहित) फ़ाइल जोड़ा।

मैं इन परिवर्तनों को प्रदर्शित करने के लिए अपने मूल पोस्ट उसे संपादित कर दिया है।

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