2010-01-13 22 views
19

एसएसएल और टॉमकैट का उपयोग करके एक और समस्या में भाग लें: मैंने एक कीस्टोर कॉन्फ़िगर किया है जिसमें एक कुंजी और प्रमाण पत्र (सर्वर प्रमाणपत्र जो मैं साइट से कनेक्ट करने वाले ग्राहकों को पेश करना चाहता हूं) शामिल है। मैंने ट्रस्टस्टोर के लिए भी ऐसा किया है (मुझे क्लाइंट प्रमाणीकरण की आवश्यकता होगी)।टॉमकैट एचटीटीपीएस कीस्टोर सर्टिफिकेट

समस्या मैं अब है कि जब मैं HTTPS के माध्यम से मेरी बिलाव उदाहरण के लिए कनेक्ट, मुझे (सर्वर प्रमाणपत्र) के लिए प्रस्तुत किए गए प्रमाणपत्र अपने वास्तविक सर्वर प्रमाणपत्र नहीं, बल्कि कुंजी JKS कुंजीस्टोर में है। -Djavax.net.debug = ssl का उपयोग करके पता चलता है कि यह क्लाइंट प्रमाणीकरण के लिए सही सीए प्रस्तुत कर रहा है, लेकिन सही सर्वर प्रमाण पत्र नहीं है।

adding as trusted cert: 
    Subject: CN=A 
    Issuer: CN=A 
    Algorithm: RSA; Serial number: - 
    Valid from Tue Nov 10 14:48:31 CET 2009 until Mon Feb 08 14:48:31 CET 2010 

adding as trusted cert: 
    Subject: X 
    Issuer: X 
    Algorithm: RSA; Serial number: - 
    Valid from Wed Jan 19 01:00:00 CET 2005 until Mon Jan 19 00:59:59 CET 2015

मैं जगह धारकों के साथ वास्तविक मूल्यों से बदल दिया है। ए = सर्वर का डोमेन नाम (लेकिन इस मामले में, किसी कारण से यह कुंजी है और प्रमाण पत्र नहीं है)। एक्स = एक VeriSign सीए (यह सही होना चाहिए)। मेरे पास एक मौजूदा प्रमाणपत्र है जिसका उपयोग मैं ग्राहकों को पेश करने के लिए करना चाहता हूं, जिन्हें मैंने कीटोल का उपयोग करके जेकेएस कीस्टोर में आयात किया था।

बिलाव कनेक्टर विन्यास:

 
Connector port="444" protocol="HTTP/1.1" SSLEnabled="true" 
maxThreads="150" scheme="https" secure="true" 
clientAuth="false" sslProtocol="TLS"  
keystoreFile="conf/ssl/keystore.jks" 
keystorePass="xx" 
keyAlias="testkey" 
truststoreFile="conf/ssl/truststore.jks" 
truststorePass="xx"

किसी भी विचार क्यों मेरे बिलाव उदाहरण सही प्रमाणपत्र प्रस्तुत नहीं कर रहा है?

+0

एसएसएल कनेक्टर कॉन्फ़िगरेशन (server.xml से) – Bozho

उत्तर

15

समस्या (जाहिरा तौर पर - मैं वास्तव में इस बात की पुष्टि नहीं कर सकते हैं) के साथ, JKS करने के लिए प्रमाणपत्र आयात किया है सुनिश्चित करें कि यह ठीक से एक पहले से उत्पन्न प्रमाणपत्र आयात करने के असंभव है (और मिलान कुंजी) एक जेकेएस कीस्टोर में और इसे टोमकैट द्वारा ठीक से प्रस्तुत किया है।

स्थिति है जिसमें मेरी समस्या उत्पन्न हुई इस प्रकार है:

  1. मैं एक प्रमाण पत्र फ़ाइल है, जो मैं अपने आप को खरोंच से OpenSSL उपयोग करते हुए उत्पन्न है (कुंजी + सीएसआर -> प्रमाण पत्र), मेरे अपने CA द्वारा हस्ताक्षरित
  2. मैं टॉमकैट को कॉन्फ़िगर करना चाहता हूं ताकि यह इस विशेष प्रमाणपत्र को मेरी साइट से कनेक्ट करने वाले उपयोगकर्ताओं को प्रस्तुत करे।

समाधान मैं काम करने के लिए मिल गया है:

  1. डीईआर प्रारूप करने के लिए और अपनी निजी कुंजी मौजूदा प्रमाणपत्र कन्वर्ट।उदाहरण के लिए (ओपनएसएसएल का उपयोग करके):

    निजी कुंजी के लिए;

    openssl pkcs8 -topk8 -nocrypt -in my_private_key.key -inform PEM -out my_private_key.der -outform DER

    वास्तविक प्रमाण पत्र पर हस्ताक्षर किए के लिए;

    openssl x509 -in my_certificate.crt -inform PEM -out my_certificate.der -outform DER

  2. आयात एक कीस्ट्रोक (JKS फ़ाइल) में दोनों डीईआर फ़ाइलें एक कस्टम जावा वर्ग का उपयोग कर।

    java ImportKey my_private_key.der my_certificate.der

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

अंतिम परिणाम एक जेकेएस कीस्टोर है जिसका उपयोग टॉमकैट कनेक्टर कॉन्फ़िगरेशन में कीस्टोर के रूप में किया जा सकता है। ऊपर दिए गए टूल कुंजी के लिए डिफ़ॉल्ट पासवर्ड के साथ JKS फाइल उत्पन्न करेगा और JKS ही फाइल, इन बाद में keytool -storepasswd और keytool -keypasswd का उपयोग कर बदला जा सकता है। उम्मीद है कि यह एक ही मुद्दे का सामना करने वाले लोगों के लिए मदद करता है।

+2

+1। दूसरा लिंक (agentbob.info) मेरे लिए काम किया। यह कीस्टोर के लिए एक पासवर्ड जारी करता है जो पहला लिंक (comu.de) नहीं करता है। जावा की कीटोल एक कुंजीस्टोर के पासवर्ड को बदलना पसंद नहीं करता है जिसमें कोई पासवर्ड नहीं है। साथ ही, आप कुंजी उपनाम टोमकैट अपेक्षाएं निर्दिष्ट कर सकते हैं (यह 'टोमकैट' है)। – Wolfgang

3

आपकी कॉन्फ़िगरेशन सही ढंग से काम करनी चाहिए।

Tomcat's how-to उचित जेकेएस रखने के लिए कदम उठाने के लिए कदम बताते हैं।

सुनिश्चित करें कि आप उचित उपनाम (testKey)

+0

दें जब मैं कीस्टोर में प्रमाणपत्र के उपनाम में keyAlias ​​सेट करता हूं, तो Tomcat सही ढंग से बूट नहीं होगा। मुझे लगता है कि keyAlias ​​पैरामीटर का उपयोग कुंजी निर्दिष्ट करने के लिए किया जाता है, प्रमाणपत्र नहीं। मैं एक लग रहा है कि बिलाव ठीक से मेरी प्रमाण पत्र प्रस्तुत करते कभी नहीं होगा क्योंकि इसे अलग से बनाया गया था। अभी मैं openssl के बजाय keytool का उपयोग करके स्क्रैच से एक नया नया प्रमाण पत्र उत्पन्न करने का प्रयास करने जा रहा हूं, और देखें कि इससे कोई फर्क पड़ता है या नहीं। – tmbrggmn

+1

हाँ, कोशिश करें। कुंजी और प्रमाण पत्र, जैसा कि इसे टोमकैट में देखा जा सकता है, वही उपनाम के तहत होना चाहिए। – Bozho

+0

मेरा पिछला प्रयास विफल हुआ। मैं कुछ गलत कर रहा हूं, लेकिन मुझे नहीं पता कि क्या। क्या मौजूदा प्रमाणपत्र प्रस्तुत करना भी संभव है, या क्या आपको नया उत्पन्न करने के लिए कीटोल का उपयोग करना है? यह भ्रामक है। – tmbrggmn

2

@Bozho टिप्पणी पर विस्तार,

यह वास्तव में महत्वपूर्ण था। "कुंजी और खरीदा प्रमाण पत्र एक ही उर्फ ​​तहत हो रहे हैं"।

SSL प्रमाणपत्र सीए (Verisign, DigiCert आदि) सीएसआर बनाने से पहले उत्पन्न निजी कुंजी के रूप में ही उपनाम वाले आयातित किया जाना चाहिए से खरीदा था। जावा Keytool का उपयोग कर कुंजीस्टोर में खरीदा प्रमाणपत्र आयात करने के बाद, आप "प्रमाणपत्र जबाब KeyStore को जोड़ा गया" दिखाई देगा।

ट्रस्ट श्रृंखला की जांच करने के लिए, टर्मिनल कमांड openssl s_client- yourdomain.com:443 -showcerts को कनेक्ट करें। यह आपके प्रमाण पत्र से शुरू होता है और एक विश्वसनीय रूट सीए तक जाता है।

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