मुझे कैसे पता चलेगा कि मेरी JVM किस कीस्टॉर का उपयोग कर रही है?


125

मुझे अपने जेवीएम कीस्टॉर में एक प्रमाण पत्र आयात करने की आवश्यकता है। मैं निम्नलिखित का उपयोग कर रहा हूं:

keytool -import -alias daldap -file somecert.cer

इसलिए मुझे शायद अपनी कॉल को कुछ इस तरह बदलना होगा:

keytool -import -alias daldap -file somecert.cer -keystore cacerts storepass changeit

1
आपको अपने जेवीएम ट्रस्टस्टोर में एक प्रमाण पत्र आयात करने की आवश्यकता है , जब तक कि एक हस्ताक्षरित सीएसआर नहीं है, जिस स्थिति में आपको इसे अपने स्वयं के कीस्टोर में आयात करना चाहिए , और आपको पहले से ही पता होना चाहिए कि कहां है, अन्यथा आप इसे उत्पन्न करने में सक्षम नहीं होंगे। कीपेयर या सीएसआर।
लोर्न

जवाबों:


129

तुम्हारा कीस्टोर तुम्हारे भीतर होगा JAVA_HOME---> JRE -->lib---> security--> cacerts। आपको यह जांचने की आवश्यकता है कि आपका JAVA_HOME कहां से कॉन्फ़िगर किया गया है, संभवतः इनमें से एक जगह,

  1. कंप्यूटर ---> उन्नत -> पर्यावरण चर ---> JAVA_HOME

  2. आपका सर्वर स्टार्टअप बैच फाइलें।

अपने आयात कमांड में -कैस्टर कैटरेट (ऊपर के JRE को पूरा रास्ता दें, बजाय सिर्फ कैसर्ट कहे)।


6
मैक ओएस एक्स 10.9 पर लाइब्रेरी / जावा / होम / लीब / लेबर / सुरक्षा / कैसर्ट
सैम बार्नम

9
* "JAVA_HOME ---> JRE -> lib ---> सुरक्षा -> कैसर्ट" किसी भी भविष्य के पाठकों के लिए, अंत में "s" नोट करें।
केइर नेलीयर

4
इसलिए अगर मैं जावा का एक नया संस्करण स्थापित करता हूं, और JAVA_HOME एक नई निर्देशिका की ओर इशारा कर रहा है, तो क्या मेरे पास प्रमाणपत्र मुद्दे हैं?
किरिल यूनुसोव

1
@ मर्फी: यह आपकी मदद कर सकता है stackoverflow.com/questions/5251323/…
कोसा

4
मुझे विश्वास है कि कुंजी स्टोर स्थान के बजाय स्टोर का स्थान है।
user2001850

35

कीस्टोर स्थान

प्रत्येक कुंजीटूल कमांड में -keystoreकीस्टोल द्वारा प्रबंधित कीस्टोर के लिए लगातार कीस्टोर फाइल का नाम और स्थान निर्दिष्ट करने का विकल्प होता है। कीस्टोर डिफ़ॉल्ट रूप .keystoreसे उपयोगकर्ता के होम डायरेक्टरी में नामित फ़ाइल में संग्रहीत होता है , जैसा कि "user.home" सिस्टम प्रॉपर्टी द्वारा निर्धारित किया जाता है। उपयोगकर्ता नाम uName को देखते हुए, "user.home" गुण मान डिफॉल्ट करता है

C:\Users\uName on Windows 7 systems
C:\Winnt\Profiles\uName on multi-user Windows NT systems
C:\Windows\Profiles\uName on multi-user Windows 95 systems
C:\Windows on single-user Windows 95 systems

इस प्रकार, यदि उपयोगकर्ता का नाम "कैथी" है, तो "user.home" डिफॉल्ट करता है

C:\Users\cathy on Windows 7 systems
C:\Winnt\Profiles\cathy on multi-user Windows NT systems
C:\Windows\Profiles\cathy on multi-user Windows 95 systems

http://docs.oracle.com/javase/1.5/docs/tooldocs/windows/keytool.html


मैं इस मिस्ट्री ~/.keystoreफ़ाइल को खोज रहा हूँ ! यदि मैं -keystoreपैरामीटर को छोड़ देता हूं , तो मैं यह पता नहीं लगा सकता कि कौन सा डिफ़ॉल्ट किस्टोर keytoolलक्ष्यीकरण कर रहा है। मैं cacertsमशीन पर कहीं और दूसरी जगह तलाशता रहा । मुझे उम्मीद नहीं थी कि केटूल ~/.keystoreहोम डायरेक्टरी में उत्पन्न होगा , न ही .keystoreइसके बदले इसका नाम रखा जाएगा cacerts। आपने एक रिक्त स्थान भर दिया है, जिसमें जावा लोगों को दस्तावेज़ करना चाहिए! धन्यवाद!
जॉर्ज पेंटाज़ ने

26

जावा 1.8 के साथ मैक ओएस एक्स 10.12:

$ JAVA_HOME / JRE / lib / सुरक्षा

cd $JAVA_HOME

/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

वहाँ से इसमें है:

./jre/lib/security

मैं वहाँ में एक cacerts कीस्टोर है।

VM विकल्प के रूप में इसे निर्दिष्ट करने के लिए:

-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit

मैं यह नहीं कह रहा हूं कि यह सही तरीका है (जावा जावा को JAVA_HOME?) के भीतर देखना क्यों नहीं जानता, लेकिन यह वही है जो मुझे काम करने के लिए करना था।


16

आप इसे अपनी "होम" निर्देशिका में पा सकते हैं:

विंडोज 7 पर:

C:\Users\<YOUR_ACCOUNT>\.keystore

लिनक्स (उबंटू) पर:

/home/<YOUR_ACCOUNT>/.keystore

4
मेरे पास विंडोज़ पर यह निर्देशिका नहीं है
simgineer

1
मैंने कीस्टॉर को निर्दिष्ट किए बिना एक-ओगेन किया था, जो वर्तमान निर्देशिका में एक बनाने की उम्मीद कर रहा था, लेकिन जैसा कि आपने कहा था, मेरे घर में इसे बनाया। ~ / .Stystore यह उम्र के लिए नहीं मिल सकता है! :-) धन्यवाद।
यूरोसपोफर 20

मुझे जोड़ने दें कि cygwin के तहत विंडोज़ पथ का उपयोग किया जाता है क्योंकि java प्रॉपर्टी विंडोज़ द्वारा सेट user.homeकरने के लिए बराबर होती है $HOMEDRIVE$HOMEPATH$HOMEकि cygwin द्वारा सेट परHOMEDRIVE=C:HOMEPATH=\Users\[YOUR ACCOUNT]
user1708042

13

यह मेरे लिए काम करता है:

#! / Bin / bash

CACERTS = $ ( readlink - e $ ( dirname $ ( readlink - e $ ( जो keytool ))) /../ lib / security / cacerts )

अगर keytool - सूची - keystore $ CACERTS - स्टोरपास चेंजिट > / dev / null ; फिर  
    $ $ प्रतिध्वनि
और 
    गूंज 'कैसर्ट फ़ाइल नहीं मिल सकती।' > & 2 
    बाहर निकलें 1 फाई 

केवल लिनक्स के लिए। मेरे सोलारिस का कोई रीडलिंक नहीं है। अंत में मैंने इस पर्ल-स्क्रिप्ट का उपयोग किया:

#! / usr / bin / env perl उपयोग सख्त ; चेतावनी का उपयोग करें ; Cwd qw ( realpath ) का उपयोग करें ; 
$ _ = realpath (( grep {- x && - f } मानचित्र { "$ _ / keytool" } विभाजन ( ':' , $ ENV { PATH }) ] [ 0 ]); मरने "Keytool नहीं खोजा जा सका" जब तक परिभाषित $ _ ; मेरे $ केटूल = $ _ ; प्रिंट


  
  

 "$ Keytool 'का उपयोग करना। \ n" ; 
s / keytool $ / /;
$ _ = realpath ($ _। '.. lib / सुरक्षा / cacerts ');
मर "जब तक cacerts नहीं मिल सकता" -f $ _;
मेरे $ cacerts = $ _;
"" $ cacerts ' में आयात करना प्रिंट करें । \ n ";
`$ keytool -list -Stystore" $ cacerts "-storepass बदलाव ';
मर "जब तक कुंजी कंटेनर नहीं पढ़ सकते हैं" $? == 0;
बाहर निकलें अगर $ ARGV [0] eq ' - d ';
foreach (@ARGV) {
    मेरा $ सर्टिफ़िकेट = $ _;
    रों /\.[^.]+$//;
    मेरे $ उर्फ ​​= $ _;
    " $ alias 'के रूप में" $ ' सर्टिफ़िकेट आयात करना । \ n ";
    `keytool -importcert -file" $ cert "-alias" $ alias "-Stystore" $ cacerts "-storepass changeit;
    चेतावनी "प्रमाण पत्र आयात नहीं कर सकते: $?" जब तक $? == 0;
}

6

जैसा कि डिम्ट्रीबी ने उल्लेख किया है, डिफ़ॉल्ट रूप से कीस्टोर उपयोगकर्ता निर्देशिका के अंतर्गत है। लेकिन अगर आप cacertsफाइल को अपडेट करने की कोशिश कर रहे हैं , ताकि जेवीएम चाबियों को चुन सके, तो आपको cacertsफाइल को अपडेट करना होगा jre/lib/security। आप keytool -list -keystore cacertsअपने प्रमाणपत्र को जोड़ने के लिए कमांड को निष्पादित करके कुंजियों को भी देख सकते हैं ।


यह जानकर अच्छा लगा कि lib/securityकेवल रिश्तेदार नाम दिए जाने पर कीटल कमांड अपने आप सही रास्ता जोड़ देता है ।
13

1
लेकिन यह काम नहीं करेगा -importcert। सूची कमांड सिस्टम को व्यापक प्रमाण पत्र दिखाता है लेकिन आयात कमांड वर्तमान निर्देशिका में एक नई फ़ाइल उत्पन्न करता है।
छत

1
updatedb; locate cacertsयह पता लगाने में मदद करता है कि वें ई कैसैटर फ़ाइलों के संस्थापन स्थान कहाँ हैं।
साजास

5

डेबियन पर, Openjdk संस्करण "1.8.0_212" का उपयोग करते हुए, मुझे यहां कैस्केर्ट मिले:

 /etc/ssl/certs/java/cacerts

यकीन है कि अगर वहाँ एक मानक आदेश है कि इस रास्ते से बाहर प्रिंट होगा आसान होगा।


1

मेरे लिए आधिकारिक OpenJDK 12 डॉकर छवि का उपयोग करते हुए , जावा कीस्टोर का स्थान था:

/usr/java/openjdk-12/lib/security/cacerts

यह एक ट्रस्टस्टोर है, कीस्टॉर नहीं।
लोर्न

1
पहला: यदि आप प्रश्न को ध्यान से पढ़ते हैं (और आपकी अपनी टिप्पणी), तो यह एक ट्रस्टस्टोर की तरह लगता है, जहां एक प्रमाण पत्र को आयात किया जाना चाहिए। दूसरा, ट्रस्टस्टोर और कीस्टोर के बीच का अंतर काफी भटका हुआ है - और दोनों "कीस्टोर" शब्द का उपयोग करते हैं, क्योंकि वे दोनों प्रारूप का उपयोग करते हैं। तीसरा: यदि आप आयात कमांड पर एक नज़र रखते हैं तो keytool -import -file example.crt -alias exampleCA -keystore truststore.jksआप पैरामीटर का उपयोग भी करते हैं -keystore... काफी अस्पष्ट IMHO। और अंतिम लेकिन कम से कम नहीं: मैं उस सटीक समस्या के बारे में खोज कर रहा था - और ऐसा प्रश्न पाया। हो सकता है कि अन्य लोग भी ऐसा ही करें।
जोंकअक्ट

इसके अलावा अन्य सभी उत्तर भी तथाकथित "ट्रस्टस्टोर" को संदर्भित करते हैं जो जेडीके मान्य करने के लिए उपयोग करता है। तो क्या आपने अन्य सभी उत्तरों को भी नकार दिया है? मुझे पहले से ही एक अपवोट मिला है, इसलिए मेरा जवाब देने में पहले से ही किसी ने मदद की है।
जौनाष्टक

0

हमने इस मुद्दे का सामना एक ऐसे जेआर डायरेक्टरी से चलने वाले टॉम्कट पर किया था जो एक स्वचालित jre अपडेट के बाद (लगभग पूरी तरह से) हटा दिया गया था, ताकि रनिंग jre को अब jre ... / lib / security / cacerts नहीं मिल सके क्योंकि यह अब अस्तित्व में नहीं था।

टॉम्केट को फिर से शुरू करना (अलग-अलग jre स्थान से चलाने के लिए कॉन्फ़िगरेशन बदलने के बाद) ने समस्या को ठीक किया।


0

उपरोक्त सभी उत्तरों के अतिरिक्त:

यदि JRE निर्देशिका में कैसर्ट फ़ाइल को अपडेट करने में मदद नहीं मिलती है, तो इसे JDK में अपडेट करने का प्रयास करें।

C: \ Program Files \ Java \ jdk1.8.0_192 \ jre \ lib \ Security

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.