डिफ़ॉल्ट रूप से सभी जावा अनुप्रयोगों के लिए उपलब्ध जावा कीस्टॉर में एक स्वनिर्धारित प्रमाण पत्र को ठीक से कैसे आयात करें?


144

मैं जावा में एक स्व-हस्ताक्षरित प्रमाण पत्र आयात करना चाहता हूं इसलिए कोई भी जावा एप्लिकेशन जो एसएसएल कनेक्शन स्थापित करने का प्रयास करेगा वह इस प्रमाण पत्र पर भरोसा करेगा।

अब तक, मैं इसे आयात करने में कामयाब रहा

keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem

फिर भी, जब मैं चलाने की कोशिश करता HTTPSClient.classहूं तब भी मुझे मिलता है:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX पथ निर्माण विफल: sun.security.provider.certpath.SunCertacathBuilderException: अनुरोधित लक्ष्य के लिए मान्य प्रमाणन पथ खोजने में असमर्थ

मैं जरूरी उस कोड पर भरोसा नहीं करेगा। जैसी चीजें Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider())पहले भाग में पूरी तरह से अनावश्यक हैं। दूसरा कोई भी प्रमाणित सत्यापन नहीं करता है। URLConnectionशुरू करने के लिए एक सादे के साथ प्रयास करें । क्या आप वाकई अपने JRE इंस्टालेशन cacertsमें संशोधित हैं lib/security? क्या आपने trustmanagerडिबगिंग विकल्प की कोशिश की है ?
ब्रूनो

जवाबों:


225

विंडोज पर सबसे आसान तरीका प्रोग्राम पोर्टेकल का उपयोग करना है ।

  1. पोर्टकॉल को डाउनलोड और इंस्टॉल करें।
  2. पहले 100% सुनिश्चित करें कि आप जानते हैं कि आपके प्रोग्राम को चलाने के लिए कौन सा JRE या JDK उपयोग किया जा रहा है। 64 बिट विंडोज 7 पर कुछ JRE हो सकते हैं। प्रोसेस एक्सप्लोरर आपको इसमें मदद कर सकता है या आप इसका उपयोग कर सकते हैं:System.out.println(System.getProperty("java.home"));
  3. फ़ाइल JAVA_HOME \ lib \ security \ cacerts को किसी अन्य फ़ोल्डर में कॉपी करें।
  4. Portecle फ़ाइल में> Keystore फ़ाइल खोलें पर क्लिक करें
  5. कैसर्ट फ़ाइल का चयन करें
  6. यह पासवर्ड दर्ज करें: परिवर्तन
  7. टूल्स> इम्पोर्ट ट्रस्टेड सर्टिफिकेट पर क्लिक करें
  8. फ़ाइल के लिए ब्राउज़ करें mycertificate.pem
  9. आयात पर क्लिक करें
  10. ट्रस्ट पथ के बारे में चेतावनी के लिए ठीक क्लिक करें।
  11. जब यह प्रमाणपत्र के बारे में विवरण प्रदर्शित करता है तो ठीक पर क्लिक करें।
  12. प्रमाणपत्र को विश्वसनीय मानने के लिए हाँ पर क्लिक करें।
  13. जब यह एक उपनाम के लिए पूछता है तो ओके पर क्लिक करें और जब यह कहता है कि यह प्रमाणपत्र आयात कर चुका है तो फिर से ओके पर क्लिक करें।
  14. Save पर क्लिक करें। यह मत भूलो या परिवर्तन को छोड़ दिया गया है।
  15. फ़ाइल कैचेर्ट्स की प्रतिलिपि बनाएँ जहाँ आपको यह मिला।

लिनक्स पर:

आप पहले से ही इस तरह उपयोग कर रहे वेब सर्वर से एसएसएल प्रमाणपत्र डाउनलोड कर सकते हैं:

$ echo -n | openssl s_client -connect www.example.com:443 | \
   sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt

वैकल्पिक रूप से प्रमाण पत्र की जानकारी सत्यापित करें:

$ openssl x509 -in /tmp/examplecert.crt -text

प्रमाण पत्र को जावा कैसर्ट किस्टोर में आयात करें:

$ keytool -import -trustcacerts -keystore /opt/java/jre/lib/security/cacerts \
   -storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt

1
इसमें से मुख्य विचार पोर्टेकल नहीं है बल्कि सही कीस्टोर में प्रमाणपत्र आयात करना है।
अल्फ्रावो जू

यह काम किया, लेकिन मेरा जावा एक अलग स्थान पर था। मेरा कीस्टोर / usr / lib / jvm / java-openjdk / jre / lib / Security / cacerts ps -ef | grep javaपर स्थित था, जो मुझे चलाकर मिला जिसमें बताया गया था कि मेरा जावा हमारे usr / lib / jvm / java-openjdk / पर स्थित ओपनजेडक से चल रहा था। bin / जावा। इसके अलावा, यदि ऐसा है तो वेबएप के लिए पुनः आरंभ करना याद रखें। सहायता के लिए धन्यवाद!!
कोडज़िला

7
मैंने पोर्टेकेल का उपयोग नहीं किया है, लेकिन मैंने पाया कि कीस्टोर एक्सप्लोरर विंडोज, लिनक्स के लिए बहुत अच्छा काम करता है, और इसे ओएसएक्स पर भी काम करना चाहिए)
ज़ेंटिक्स

वास्तव में बहुत उपयोगी है। 2 बहुत महत्वपूर्ण बातें यहाँ प्रकाश डाला। एक सही कीस्टोर में आयात करने के बारे में है। और दूसरा एक वेबसर्वर के मामले में पुनः आरंभ करना सुनिश्चित करता है।
sdm

6
2019 में, हम
लेटस

41
    D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"

12
आपको कीस्टोर पासवर्ड के लिए संकेत दिया जाएगा, डिफ़ॉल्ट "चेंज" है
गिल्बर्ट एरेनास डैगर

34

मैंने एक छोटी सी स्क्रिप्ट लिखी है जो किस्टोर्स को सर्टिफिकेट जोड़ता है, इसलिए इसका उपयोग करना बहुत आसान है।

आप https://github.com/ssbarnea/keytool-trust से नवीनतम संस्करण प्राप्त कर सकते हैं

#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}

KEYSTORE_PASS=changeit
KEYTOOL="sudo keytool"

# /etc/java-6-sun/security/cacerts

for CACERTS in  /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts \
    /usr/lib/jvm/java-7-oracle/jre/lib/security/cacerts \
    "/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
    "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/java/lib/security/cacerts"
do

if [ -e "$CACERTS" ]
then
    echo --- Adding certs to $CACERTS

# FYI: the default keystore is located in ~/.keystore

if [ -z "$REMHOST" ]
    then
    echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
    exit 1
    fi

set -e

rm -f $REMHOST:$REMPORT.pem

if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
        then
        :
        else
        cat /tmp/keytool_stdout
        cat /tmp/output
        exit 1
        fi

if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
        then
        :
        else
        echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
        cat /tmp/output
        fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
    then
    echo "Key of $REMHOST already found, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
    then
    echo "Key of $REMHOST already found in cacerts, skipping it."
    else
    $KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
    fi

fi

done

`` `


18

इसने मेरे लिए काम किया। :)

sudo keytool -importcert -file filename.cer -alias randomaliasname -keystore $ JAVA_HOME / jre / lib / security / cacerts -storepass बदलाव 

4

यदि आप प्रमाणपत्र प्राधिकारी द्वारा हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहे हैं जो कि जावा कैस्केर्ट फ़ाइल में डिफ़ॉल्ट रूप से शामिल नहीं है, तो आपको HTTPS कनेक्शन के लिए निम्न कॉन्फ़िगरेशन को पूरा करने की आवश्यकता है। कैसर्ट में प्रमाण पत्र आयात करने के लिए:

  1. Windows Explorer खोलें और cacerts फ़ाइल पर नेविगेट करें, जो jre \ lib \ Security सबफ़ोल्डर में स्थित है जहाँ AX Core Client स्थापित है। डिफ़ॉल्ट स्थान C: \ Program Files \ ACL Software \ AX Core Client \ jre \ lib \ सुरक्षा है
  2. कोई भी परिवर्तन करने से पहले फ़ाइल की बैकअप प्रतिलिपि बनाएँ।
  3. आपके द्वारा उपयोग किए जा रहे प्रमाण पत्र प्राधिकरण से प्राप्त प्रमाण पत्रों के आधार पर, आपको कैसर्ट फ़ाइल में एक मध्यवर्ती प्रमाणपत्र और / या रूट प्रमाणपत्र आयात करने की आवश्यकता हो सकती है। प्रमाणपत्रों को आयात करने के लिए निम्नलिखित सिंटैक्स का उपयोग करें: कीटल-आइमपोर्ट -लियास -स्टीस्टोर -trustcacerts -file
  4. यदि आप दोनों प्रमाणपत्रों का आयात कर रहे हैं, तो प्रत्येक प्रमाण पत्र के लिए निर्दिष्ट उपनाम अलग होना चाहिए।
  5. "पासवर्ड" प्रॉम्प्ट पर कीस्टोर के लिए पासवर्ड टाइप करें और एंटर दबाएं। कैसर्ट फ़ाइल के लिए डिफ़ॉल्ट जावा पासवर्ड "चेंज" है। "इस प्रमाणपत्र पर भरोसा करें?" पर 'y' टाइप करें। शीघ्र और Enter दबाएँ।

इस कमांड का उपयोग करें: -> कीटल -इमपोर्ट -लियास <alias> -Stystore <cacerts_file> -trustcacerts -file <certificate_filename>
Bharat Darakh

1

सिंपल कमांड 'कीटल' विंडोज और / या सिगविन के साथ भी काम करता है।

यदि आप यहां Cygwin का उपयोग कर रहे हैं, तो संशोधित आदेश है जिसका उपयोग मैंने "S.Botha के उत्तर" के नीचे से किया है:

  1. सुनिश्चित करें कि आप JDK के अंदर JRE की पहचान कर रहे हैं जिसका आप उपयोग कर रहे हैं
  2. अपने प्रॉम्प्ट / साइबरविन को व्यवस्थापक के रूप में प्रारंभ करें
  3. उस JDK की बिन निर्देशिका के अंदर जाएं जैसे cd / cygdrive / c / Program \ Files / Java / jdk1.8.0_121 / jre / bin
  4. इसके अंदर से कीटल कमांड को निष्पादित करें, जहां आप अंत में अपने नए सर्टिफिकेट को रास्ता प्रदान करते हैं, जैसे:

    ./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts  -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"

ध्यान दें, क्योंकि यदि यह Cygwin के अंतर्गत है तो आप एक गैर-Cygwin प्रोग्राम को एक रास्ता दे रहे हैं, इसलिए पथ DOS जैसा है और उद्धरणों में है।


0

कोशिश करना चाह सकते हैं

keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem

मुझे ईमानदारी से पता नहीं है कि यह कहां अपना प्रमाण पत्र देता है यदि आप सिर्फ लिखते हैं cacertsतो इसे पूरा रास्ता दें


0

जावा लाइनक्स में प्रमाणपत्र स्थापित करें

/ ऑप्ट / jdk (संस्करण) / बिन / कीटलूल -इम्पोर्ट-कालियास अलियासनाम -फाइल सर्टिफिकेट।


0
fist get the certificate from the provider
create a file ends wirth .cer and pase the certificate

copy the text file or  past   it  somewhere you can access it 
then use the cmd prompt as an admin and cd to the bin of the jdk,
the cammand that will be used is the:  keytool 

change the  password of the keystore with :

keytool  -storepasswd -keystore "path of the key store from c\ and down"

the password is : changeit 
 then you will be asked to enter the new password twice 

then type the following :

keytool -importcert -file  "C:\Program Files\Java\jdk-13.0.2\lib\security\certificateFile.cer"   -alias chooseAname -keystore  "C:\Program Files\Java\jdk-13.0.2\lib\security\cacerts"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.