"PKIX পাথ বিল্ডিং ব্যর্থ হয়েছে" এবং "অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পেতে ব্যর্থ"


422

আমি আমার জাভা প্রকল্পের জন্য টুইটার 4 জে লাইব্রেরি ব্যবহার করে টুইটগুলি পাওয়ার চেষ্টা করছি । আমার প্রথম দৌড়ে আমি শংসাপত্র sun.security.validator.ValidatorExceptionএবং সম্পর্কে একটি ত্রুটি পেয়েছি sun.security.provider.certpath.SunCertPathBuilderException। তারপরে আমি টুইটার শংসাপত্রটি যুক্ত করেছি:

C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"

কিন্তু সাফল্য ছাড়া। টুইটগুলি পাওয়ার পদ্ধতিটি এখানে:

public static void main(String[] args) throws TwitterException {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
        .setOAuthConsumerKey("myConsumerKey")
        .setOAuthConsumerSecret("myConsumerSecret")
        .setOAuthAccessToken("myAccessToken")
        .setOAuthAccessTokenSecret("myAccessTokenSecret");

    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();

    try {
        Query query = new Query("iphone");
        QueryResult result;
        result = twitter.search(query);
        System.out.println("Total amount of tweets: " + result.getTweets().size());
        List<Status> tweets = result.getTweets();

        for (Status tweet : tweets) {
            System.out.println("@" + tweet.getUser().getScreenName() + " : " + tweet.getText());
        }
    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to search tweets: " + te.getMessage());
    }

এবং এখানে ত্রুটি:

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=d35baff5 or
    http://www.google.co.jp/search?q=1446302e
TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
    at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:81)
    at twitter4j.TwitterImpl.get(TwitterImpl.java:1929)
    at twitter4j.TwitterImpl.search(TwitterImpl.java:306)
    at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.java:38)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at sun.security.ssl.Handshaker.process_record(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
    at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:34)
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:141)
    ... 5 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
    at sun.security.validator.Validator.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    ... 20 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)
    ... 26 more
Failed to search tweets: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

6
হ্যালো দয়া করে নীচে URL টি দেখুন। আমি নিশ্চিত যে এগুলি আপনাকে সাহায্য করবে। java-samples.com/showtutorial.php?tutorialid=210 confluence.atlassian.com/display/JIRAKB/... । আপনাকে আপনার এসএসএল শংসাপত্রটি জাভা ট্রাষ্টস্টোর শংসাপত্রের মধ্যে যুক্ত করতে হবে (পথ: জেআর / লিবিব / সুরক্ষা / ক্যাশেটারস)।
sus007

সমাধানের জন্য দয়া করে এই উত্তরটি উল্লেখ করুন এবং নিশ্চিত করুন যে আপনি নিজের সফ্টওয়্যারটিকে বান্ডিলযুক্ত জেয়ার হিসাবে প্যাকেজিং করছেন? যদি হ্যাঁ তবে আপনার ক্যাচার্টস ফাইল ফর্ম সিস্টেমটি অনুলিপি করুন এবং সেই প্যাকেজযুক্ত জেরি ক্যাচার্টস ফাইলটি প্রতিস্থাপন করুন।
ধনাত্মক

চেষ্টা এই stackoverflow.com/a/9210661/4741746 হতে পারে এই আপনার উত্তর
সুশান্ত gosavi

2
আমি কেবল এই জাভা কোডটি ব্যবহার করেছি এবং https- র জন্য পোর্টটি 443 হিসাবে নির্দিষ্ট করতে ভুলবেন না g github.com/escline/InstallCert/blob/master/InstallCert.java এ জাভা কোড এটি আপনার CACERTS ফাইল নেবে এবং সমস্ত প্লাস যুক্ত করবে ইনপুট হিসাবে আপনি যে URL দিয়েছেন তার জন্য বর্তমান শংসাপত্র। আমার ক্ষেত্রে আমি মানগুলি = "mywebservice.uat.xyz.com" হোস্ট করার জন্য হার্ডকোড করেছি; বন্দর = 443; পাসফ্রেজ = "changeit" .toCharArray (); তারপরে প্রোগ্রামটি "jssecacerts" নামে একটি নতুন ফাইল তৈরি করে যাতে সবকিছু থাকবে। এটির নাম "কেসার্টস" করুন এবং এটি ব্যবহার করুন। আপনি সব প্রস্তুত হয়ে যাবে।
রেড্ডিমেলস

উত্তর:


572
  1. আপনার ব্রাউজারে ইউআরএল যান:
    • ফায়ারফক্স - এইচটিটিপিএস শংসাপত্র শৃঙ্খলে ক্লিক করুন (ইউআরএল ঠিকানার পাশের লক আইকন)। ক্লিক করুন "more info" > "security" > "show certificate" > "details" > "export.."। নামটি পিকআপ করুন এবং ফাইলের ধরণটি বেছে নিন উদাহরণস্বরূপ cer
    • ক্রোম - ঠিকানা বারে ঠিকানার জন্য বাম সাইটের আইকনে ক্লিক করুন, "শংসাপত্র" -> "বিশদ" -> "রফতানি" নির্বাচন করুন এবং "ডের-এনকোডেড বাইনারি, একক শংসাপত্র" ফর্ম্যাটে সংরক্ষণ করুন।
  2. এখন আপনার কাছে কীস্টোরের সাথে ফাইল রয়েছে এবং আপনাকে এটি আপনার জেভিএম যুক্ত করতে হবে। ক্যাসর্ট ফাইলগুলির অবস্থান নির্ধারণ করুন, যেমন। C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

  3. পরবর্তী example.cerকমান্ড লাইনে ক্যাসর্টগুলিতে ফাইলটি আমদানি করুন :

keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer

আপনাকে পূর্বনির্ধারিত পাসওয়ার্ডের জন্য জিজ্ঞাসা করা হবে changeit

আপনার জেভিএম / পিসি পুনরায় চালু করুন।

উত্স: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html


27
আমাকে উদ্ধৃতিতে পথ রাখতে হয়েছিল এবং এটি ডিইআর
থিওডোর কে।

3
ওয়াও..এটি ক্রোমের মাধ্যমে যাদুটির মতো কাজ করেছে আপনি কেবল বাম ঠিকানা বারের লক আইকনটিতে ক্লিক করুন , এবং তারপরে বিশদটি ক্লিক করুন এবং পুনরায় আরম্ভের দরকার নেই
aswzen

8
নোট করুন যে চেইনের সমস্ত শংসাপত্রগুলির জন্য নির্দেশগুলি পুনরাবৃত্তি করা উচিত। aliasকমান্ড লাইনে শংসাপত্রের নামটিও অনন্য হওয়া উচিত।
Lu55

5
যদি আপনার বাড়িটি জেডিকে হয় তবে তা নিশ্চিত করে নিন যে জেরটি এর মধ্যে রয়েছে: কীটোল-ইমপোর্ট -ালিয়াস উদাহরণ-কীস্টোর "সি: \ প্রোগ্রাম ফাইলগুলি জাভা \ jdk1.8.0_73 re জেরি \ লিবিব \ সুরক্ষা \ ক্যাশেটারস"-ফাইল example.cer
জ্যাক BeNimble

12
যে কেউ "অ্যাক্সেস প্রত্যাখ্যান" ত্রুটি পেয়েছে তা নিশ্চিত করুন যে আপনি প্রশাসক হিসাবে কমান্ড প্রম্পট চালাচ্ছেন।
ওয়াকার খ্রিস্টি

81

নতুন টুইটার সার্টের সাথে আমার জাভা 6 ইনস্টলেশনটি কাজ করার জন্য সার্ট ফাইলগুলি তৈরি করার চেষ্টা করার পরে, অবশেষে আমি বার্তা বোর্ডগুলির একটিতে একটি মন্তব্যে সমাধিবদ্ধ অবিশ্বাস্যরকম একটি সহজ সমাধানে গিয়েছি। কেবল একটি জাভা 7 ইনস্টলেশন থেকে ক্যাশিটারস ফাইলটি অনুলিপি করুন এবং আপনার জাভা 6 ইনস্টলেশনটিতে একটি ওভাররাইট করুন। প্রথমে ক্যাসর্টস ফাইলটির ব্যাকআপ তৈরি করা ভাল, তবে তারপরে আপনি কেবল নতুনটি এবং বুমটি অনুলিপি করুন! এটা ঠিক কাজ করে।

নোট করুন যে আমি আসলে একটি লিনাক্স ইনস্টলেশনতে একটি উইন্ডোজ ক্যাসর্ট ফাইলটি অনুলিপি করেছি এবং এটি ঠিক কাজ করেছে।

ফাইলটি jre/lib/security/cacertsপুরানো এবং নতুন উভয় জাভা জেডিইকে স্থাপনায় অবস্থিত ।

আশা করি এটি অন্য কারও ঘন্টা বাড়াতে বাঁচিয়েছে।


4
আমি স্ব-স্বাক্ষরিত শংসাপত্রের সাথে একটি এসএসএল সার্ভার অ্যাক্সেস করার চেষ্টা করছি, কীটল ব্যবহার করে এটি শংসাপত্র যুক্ত করার চেষ্টা করেছি, তবে ভাগ্য নেই, কোনও পরামর্শ?
ওলেগ বেলোসভ

1
খুশী হয়ে কাজ করেছে .. তবে আপনি কি জানেন যে এর মূল কারণটি ছিল। এটি জাভা 6 সার্টিফিকেটগুলিতে কীভাবে ব্যর্থ হয়েছিল .. এবং
জবা

এটি এটি করেছে, যদিও আমি আইসডেটিয়া 1.6 থেকে ওরাকল 1.7 এ গিয়েছি। :)
nPress325681

: এছাড়াও এই সমাধান বিবেচনা stackoverflow.com/questions/33439905/...
Piohen

10
যারা আমার মত তাদের মাঝে মাঝে সুস্পষ্ট মিস করেন - নিশ্চিত হন যে আপনি প্রবেশ করছেন $JAVA_HOME/jre/lib, না $JAVA_HOME/lib- আমি এই বিবরণটি হারিয়ে কিছুটা সময় ব্যয় করেছি।
রায়ান হিথকোট

35

আমার ইউআই পদ্ধতির:

  1. এখান থেকে কীস্টোর এক্সপ্লোরার ডাউনলোড করুন
  2. খুলুন A জাভাআহোম / জেআর / লিব / সুরক্ষা / ক্যাশেটার
  3. পিডব্লিউ প্রবেশ করুন: পরিবর্তন (ম্যাকের উপর চেঞ্জমে থাকতে পারে)
  4. আপনার .crt ফাইলটি আমদানি করুন

সিএমডি-লাইন:

  1. keytool -importcert -file jetty.crt -alias jetty -keystore $JAVA_HOME/jre/lib/security/cacerts
  2. পিডাব্লু প্রবেশ করুন: changeit(ম্যাক এ চেঞ্জমে হতে পারে)

1
ম্যাক অন, সিএমডি-লাইন সহ, কমান্ডটি চালাতে sudo ব্যবহার করা উচিত। # সুডো কীটোল-ইম্পোর্টসার্ট-ফাইল জেটি.সিআরটি-বালিয়া জেটি-কিস্টোর $ জাভাআহোম / জেআর / লিবিব / সুরক্ষা / ক্যাশেটারস
মালাজি

1
উইন্ডোজে, কমান্ডটি কাজ করে:keytool -importcert -file dinardap_cert.cer –alias dinardap –keystore “%JAVA_HOME%/jre/lib/security/cacerts”
প্যাট্রিসিও বোনিলা

কোথা থেকে সার্ট ফাইল পাবেন? কোন ইউআরএল যেতে হবে তা আমি বলতে পারি না। jetty.com ?
ক্রাফটিদেবিল

ওয়েব ব্রাউজার থেকে রফতানি করে আমার সার্টিফিকেট পেয়েছি, প্যাডলকের উপর প্রসঙ্গ ক্রিয়া
rtbf

28

এই সমস্যাটিতে আমি হোঁচট খেয়েছি যা সমাধান করতে বেশ কয়েক ঘন্টা গবেষণা নিয়েছে, বিশেষত স্বয়ংক্রিয়ভাবে উত্পন্ন উত্সাহীন শংসাপত্রগুলি, যা অফিসিয়াল শর্তগুলির চেয়ে পৃথক, বেশ জটিল এবং জাভা তাদের এত পছন্দ করে না।

দয়া করে নীচের লিঙ্কটি পরীক্ষা করুন: জাভাতে শংসাপত্রগুলির সাথে সমস্যা সমাধান করুন

মূলত আপনাকে সার্ভার থেকে জাভা হোম শংসাপত্রগুলিতে শংসাপত্র যুক্ত করতে হবে।

  1. আপনার শংসাপত্র তৈরি করুন বা এটি পান এবং সার্ভার.এক্সএমএল এ টমক্যাটটি কনফিগার করুন
  2. ক্লাসের জাভা সোর্স কোডটি ডাউনলোড করুন InstallCertএবং সার্ভারটি চলমান অবস্থায় এটি কার্যকর করুন, নিম্নলিখিত যুক্তি সরবরাহ করুন server[:port]। কোনও পাসওয়ার্ডের প্রয়োজন নেই, যেমন আসল পাসওয়ার্ডটি জাভা শংসাপত্রগুলির জন্য কাজ করে ("চেঞ্জিট")।
  3. প্রোগ্রামটি সার্ভারের সাথে সংযুক্ত হবে এবং জাভা একটি ব্যতিক্রম ছুঁড়ে দেবে, এটি সার্ভারের সরবরাহিত শংসাপত্র বিশ্লেষণ করবে এবং আপনাকে jssecertsযে ডিরেক্টরিটি প্রোগ্রামটি কার্যকর করেছে সেখানে ডিরেক্টরিতে একটি ফাইল তৈরি করার অনুমতি দেবে (যদি Eclipse থেকে মৃত্যুদন্ড কার্যকর করা হয় তবে নিশ্চিত হয়ে নিন যে আপনি কাজটি কনফিগার করেছেন) ডিরেক্টরি ইন Run -> Configurations)।
  4. সেই ফাইলটি ম্যানুয়ালি অনুলিপি করুন $JAVA_HOME/jre/lib/security

এই পদক্ষেপগুলি অনুসরণ করার পরে, শংসাপত্রের সংযোগগুলি জাভাতে আর ব্যতিক্রম তৈরি করবে না।

নিম্নলিখিত উত্স কোডটি গুরুত্বপূর্ণ এবং এটি (সান) ওরাকল ব্লগগুলি থেকে অদৃশ্য হয়ে গেছে, আমি খুঁজে পেয়েছি এমন একমাত্র পৃষ্ঠা এটি সরবরাহ করা লিঙ্কটিতে ছিল, সুতরাং আমি কোনও রেফারেন্সের উত্তরে এটি সংযুক্ত করছি।

/*
 * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/**
 * Originally from:
 * http://blogs.sun.com/andreas/resource/InstallCert.java
 * Use:
 * java InstallCert hostname
 * Example:
 *% java InstallCert ecc.fedora.redhat.com
 */

import javax.net.ssl.*;
import java.io.*;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Class used to add the server's certificate to the KeyStore
 * with your trusted certificates.
 */
public class InstallCert {

    public static void main(String[] args) throws Exception {
        String host;
        int port;
        char[] passphrase;
        if ((args.length == 1) || (args.length == 2)) {
            String[] c = args[0].split(":");
            host = c[0];
            port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
            String p = (args.length == 1) ? "changeit" : args[1];
            passphrase = p.toCharArray();
        } else {
            System.out.println("Usage: java InstallCert [:port] [passphrase]");
            return;
        }

        File file = new File("jssecacerts");
        if (file.isFile() == false) {
            char SEP = File.separatorChar;
            File dir = new File(System.getProperty("java.home") + SEP
                    + "lib" + SEP + "security");
            file = new File(dir, "jssecacerts");
            if (file.isFile() == false) {
                file = new File(dir, "cacerts");
            }
        }
        System.out.println("Loading KeyStore " + file + "...");
        InputStream in = new FileInputStream(file);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();

        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf =
                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();

        System.out.println("Opening connection to " + host + ":" + port + "...");
        SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
        socket.setSoTimeout(10000);
        try {
            System.out.println("Starting SSL handshake...");
            socket.startHandshake();
            socket.close();
            System.out.println();
            System.out.println("No errors, certificate is already trusted");
        } catch (SSLException e) {
            System.out.println();
            e.printStackTrace(System.out);
        }

        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("Could not obtain server certificate chain");
            return;
        }

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(System.in));

        System.out.println();
        System.out.println("Server sent " + chain.length + " certificate(s):");
        System.out.println();
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            System.out.println
                    (" " + (i + 1) + " Subject " + cert.getSubjectDN());
            System.out.println("   Issuer  " + cert.getIssuerDN());
            sha1.update(cert.getEncoded());
            System.out.println("   sha1    " + toHexString(sha1.digest()));
            md5.update(cert.getEncoded());
            System.out.println("   md5     " + toHexString(md5.digest()));
            System.out.println();
        }

        System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
        String line = reader.readLine().trim();
        int k;
        try {
            k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
        } catch (NumberFormatException e) {
            System.out.println("KeyStore not changed");
            return;
        }

        X509Certificate cert = chain[k];
        String alias = host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);

        OutputStream out = new FileOutputStream("jssecacerts");
        ks.store(out, passphrase);
        out.close();

        System.out.println();
        System.out.println(cert);
        System.out.println();
        System.out.println
                ("Added certificate to keystore 'jssecacerts' using alias '"
                        + alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

        private final X509TrustManager tm;
        private X509Certificate[] chain;

        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }

        public X509Certificate[] getAcceptedIssuers() {
            throw new UnsupportedOperationException();
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            throw new UnsupportedOperationException();
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}

2
নোট করা ফাইলটি jssecacerts হয়!
ডিনডিডি

আমি জাভা 7 এবং 8 এর জন্য এই সমাধানটি ব্যবহার করার চেষ্টা করেছি, জাভা 7 এ চলার সময়, আমি চেষ্টা করেছি এমন সমস্ত রিমোট রেপোজিটরি ইউআরএলের জন্য প্রোটোকল_ভার্সন বা হ্যান্ডশেক_ফিলার পেয়েছি। SandeepanNath:test sandeepan.nath$ java InstallCert repo1.maven.org:443 Loading KeyStore /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/security/cacerts... Opening connection to repo1.maven.org:443 ... Starting SSL handshake... javax.net.ssl.SSLException: Received fatal alert: protocol_version .. Could not obtain server certificate chain
সন্দীপন নাথ

20

1. শংসাপত্র পরীক্ষা করুন

লক্ষ্যযুক্ত ইউআরএলটি ব্রাউজারে লোড করার চেষ্টা করুন এবং সাইটের শংসাপত্রটি দেখার চেষ্টা করুন (সাধারণত এটি লক চিহ্ন সহ আইকন দ্বারা অ্যাক্সেসযোগ্য It's এটি ব্রাউজারের ঠিকানা বারের বাম বা ডানদিকে রয়েছে) অন্য কোনও কারণে এটি মেয়াদ উত্তীর্ণ হয়েছে বা অবিশ্বস্ত whether

২. জেআরই এবং জেডিকের সর্বশেষ সংস্করণ ইনস্টল করুন

নতুন সংস্করণগুলি বিশ্বস্ত শংসাপত্রগুলির আপডেট হওয়া সেট সহ সাধারণত আসে।

এছাড়াও এটি যদি সম্ভব হয় তবে পুরানো সংস্করণগুলি আনইনস্টল করুন। এটি ভুল কনফিগারেশনের ত্রুটিগুলি সুস্পষ্ট করে তুলবে।

3. আপনার কনফিগারেশন পরীক্ষা করুন:

  • আপনার JAVA_HOME পরিবেশের পরিবর্তনশীলটি কোথায় নির্দেশ করে Check
  • আপনি প্রোগ্রামটি চালানোর জন্য কোন জাভা সংস্করণটি ব্যবহার করেন তা পরীক্ষা করে দেখুন। ইনটেলিজে চেক:
    • ফাইল -> প্রকল্পের কাঠামো ... -> প্রকল্প সেটিংস -> প্রকল্প -> প্রকল্প এসডিকে:
    • ফাইল -> প্রকল্পের কাঠামো ... -> প্ল্যাটফর্ম সেটিংস -> এসডিকে

৪. নতুন জাভা সংস্করণ থেকে পুরো কীস্টোরটি অনুলিপি করুন

আপনি যদি সর্বশেষ উপলব্ধ ব্যতীত জেডিকে-র অধীনে বিকাশ করেন - %JAVA_HOME%/jre/lib/security/cacerts@ জেরেমি-গুডেল তাঁর উত্তরে প্রস্তাবিত হিসাবে সর্বশেষ ইনস্টল করা জেআরই (প্রথমে ব্যাকআপ কপি তৈরি করুন) থেকে নতুনটির সাথে ফাইলটি প্রতিস্থাপনের চেষ্টা করুন

৫. আপনার কীস্টোরে শংসাপত্র যুক্ত করুন

যদি keytoolজাভা কীস্টোরের শংসাপত্র (গুলি) সংরক্ষণ করতে উপরের কোনও কিছুই যদি আপনার সমস্যার সমাধান না করে :

keytool -trustcacerts -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_file>

@ ম্যাগজিজিজি তার উত্তরে পরামর্শ হিসাবে শংসাপত্র সহ ফাইল ব্রাউজার থেকে পাওয়া যাবে ।

দ্রষ্টব্য 1: আপনার সাইটের শংসাপত্রের শৃঙ্খলে থাকা প্রতিটি শংসাপত্রের জন্য আপনাকে এটি পুনরাবৃত্তি করতে হবে। মূল থেকে শুরু করুন।

নোট 2: <alias_name>স্টোরের কীগুলির মধ্যে স্বতন্ত্র হওয়া উচিত বা keytoolকোনও ত্রুটি দেখাবে।

স্টোরটিতে চালিত সমস্ত শংসাপত্রের তালিকা পেতে:

keytool -list -trustcacerts -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit

যদি কিছু ভুল হয়ে যায় তবে এটি আপনাকে দোকান থেকে শংসাপত্র অপসারণ করতে সহায়তা করবে:

keytool -delete -alias <alias_name> -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit

এটি কতটা সুস্পষ্টভাবে বর্ণনা করা হয়েছে, এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ডিম হ্যানস

13
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

এটি শংসাপত্রের বৈধতা জাম্পের জন্য ব্যবহৃত হয়।

সতর্কতা কেবল এটির জন্য উন্নয়নের উদ্দেশ্যে ব্যবহার করা অনিরাপদ!


4
এটি শংসাপত্রের বৈধতা জাম্পের জন্য ব্যবহার করা হয়
গুরমস

2
@gorums কীভাবে এটি Eclipse এ সেটআপ করবেন?
মালাজিসি

6
আপনি যদি আপনার মেশিনে স্বেচ্ছাচারী দূষিত কোড চালানোর ঝুঁকি না চান তবে এটি করবেন না। এটি চালিত যে কোনও মেশিনের সাথে আপস করার ঝুঁকিপূর্ণ হওয়ায় এটিকে হ্রাস করা হয়েছে।
ব্রায়ান

1
এটি 'কাজ করে' এর অর্থ এটি নিরাপদ নয়, আপনি এই পরামর্শ অনুসরণকারী প্রত্যেককেই ঝুঁকির মধ্যে ফেলে দিচ্ছেন। আমার ডাউনটাতে
প্যারাডক্সিস

1
বিন্দু @AceKing এটি হল না যদি আপনি শংসাপত্র যাচাই না কোড বিশ্বস্ত। এটি বলেছিল, আমি মনে করি এটি এখনও একটি দরকারী উত্তর। এটি করার লোকদের ঝুঁকিগুলি বুঝতে হবে।
মাইকেল মায়ার

12

আমার কিছুটা আলাদা পরিস্থিতি হয়েছিল, যখন জেডিকে এবং জেআরই 1.8.0_112 উভয়ই আমার সিস্টেমে উপস্থিত ছিল।

আমি [JDK_FOLDER]\jre\lib\security\cacertsইতিমধ্যে পরিচিত কমান্ডটি ব্যবহার করে নতুন সিএ শংসাপত্র আমদানি করেছি :

keytool -import -trustcacerts -keystore cacerts -alias <new_ca_alias> -file <path_to_ca_cert_file>

তবুও, আমি একই পিকেআইক্স পাথ বিল্ডিংয়ের ব্যর্থতা পেয়েছি ।

আমি জাভা সিএলআইতে ডিবাগ তথ্য যুক্ত করে, ব্যবহার করে java -Djavax.net.debug=all ... > debug.log। ডিবাগ.লগ ফাইলে, ট্রাস্টস্টোর দিয়ে শুরু হওয়া লাইনটি হ'ল: প্রকৃতপক্ষে পাওয়া ক্যাসর্টস স্টোরের দিকে নির্দেশ করা [JRE_FOLDER]\lib\security\cacerts

আমার ক্ষেত্রে সমাধানটি ছিল জেডিই-র ব্যবহৃত ক্যাসার্টস ফাইলটি (যার মধ্যে নতুন সিএ যুক্ত ছিল) জেআরই দ্বারা ব্যবহৃত একটিটির চেয়ে অনুলিপি করা এবং এটি সমস্যার সমাধান করেছে।


আমি কীটোল ব্যবহার করে জেআরই / লিবিব / সুরক্ষা / ক্যাচার্টগুলিতে আমার প্রয়োজনীয় শংসাপত্রগুলি সরাসরি আমদানি করেছিলাম, তবে এটি আমার জন্য কিছুই বদলেনি :( তবুও একই ত্রুটি পেয়ে আমি সেগুলি আইডিই এর মাধ্যমে, এমনকি ক্লাসপথেও যুক্ত করেছি এবং একটি বিনকে যুক্ত করেছি) কীস্টোরের অবস্থানটি নির্দিষ্ট করুন !! এটি পাগল আফস!
অ্যালেক্স

8

ইস্যু পটভূমি:

আমি যখন আমার প্রকল্পে এবং নেটবিয়ান আইডিই ক্লিন অ্যান্ড বিল্ড বিকল্পের মাধ্যমে এমভিএন ক্লিন ইনস্টল চালানোর চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছিলাম। এই সমস্যাটি শংসাপত্রের জন্য উপলব্ধ না হওয়ার কারণে আমরা যখন নেট নেট মটরশুটি আইডিই / কমান্ড প্রম্পটের মাধ্যমে ডাউনলোড করি তবে ব্রাউজারের মাধ্যমে ফাইলগুলি ডাউনলোড করতে সক্ষম হয়।

ত্রুটি :

Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.java.project:product:jar:1.0.32 from/to repo-local (https://url/local-repo): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

রেজোলিউশন:

1. প্রশ্নে url এর শংসাপত্র ডাউনলোড করুন:

  • "প্রশাসক হিসাবে চালান" দ্বারা আইই চালু করুন (অন্যথায়, আমরা শংসাপত্রটি ডাউনলোড করতে সক্ষম হব না)
  • আইআর-> https: // ইউআরএল / স্থানীয়- রেপোতে ইউআরএলটি প্রবেশ করান (আমার ক্ষেত্রে এই ইউআরএলটির একটি অবিশ্বস্ত শংসাপত্র ছিল এখানে চিত্র বর্ণনা লিখুন))
  • শংসাপত্র ত্রুটিতে ক্লিক করে শংসাপত্রটি ডাউনলোড করুন -> শংসাপত্র দেখুন
  • বিশদ ট্যাব নির্বাচন করুন -> ফাইলটিতে অনুলিপি করুন -> পরবর্তী -> "ডিইআর এনকোডেড বাইনারি এক্স.509 (.CER) নির্বাচন করুন
  • শংসাপত্রটি কিছু জায়গায় সংরক্ষণ করুন, উদাহরণস্বরূপ: c: /user/ Sheldon/desktop/product.cer
  • অভিনন্দন! আপনি সাইটের জন্য শংসাপত্রটি সাফল্যের সাথে ডাউনলোড করেছেন

২. এখন সমস্যাটি সমাধানের জন্য কী স্টোরটি ইনস্টল করুন।

  • বিদ্যমান শংসাপত্র ফাইলে ডাউনলোড করা কীস্টোর যুক্ত করতে কীটল কমান্ডটি চালান।
  • কমান্ড: jdk এর বিন ফোল্ডারে নীচে কমান্ড (জাভাহোম)

সি: \ প্রোগ্রাম ফাইলসমূহ \ জাভা \ jdk1.8.0_141 re jre \ বিন> কীটোল-ইমম্পার্টসার্ট-ফাইল "সি: / ইউজার / শেল্ডন / ডিজকটপ / প্রোডাক্ট.সিয়ার" -ালিয়াস প্রোডাক্ট -কিস্টোর "সি: / প্রোগ্রাম ফাইল / জাভা / jdk1.8.0_141 / JRE / lib / অনুপস্থিত নিরাপত্তা / cacerts "।

  • আপনাকে পাসওয়ার্ড প্রবেশ করতে অনুরোধ জানানো হবে। কীস্টোর পাসওয়ার্ড প্রবেশ করান: "এই শংসাপত্রের উপর বিশ্বাস রাখুন? [না]:" জন্য "হ্যাঁ" প্রবেশ করুন

নমুনা কমান্ড লাইন আদেশ / আউটপুট:

keytool -importcert -file "C:/Users/sheldon/Desktop/product.cer" -alias product -keystore "C:/Program iles/Java/jdk1.8.0_141/jre/lib/security/cacerts"
Enter keystore password:
Trust this certificate? [no]:  yes
Certificate was added to keystore
  • Contgrats! এখন আপনার "পিকেএক্স পাথ বিল্ডিং ব্যর্থ হওয়া: সূর্য.সিকিউরিটি.প্রভাইডার.সেটপাথ.সনকার্টপ্যাথবিল্ডার এক্সসেপশন" আপনার নেটবিন আইডিইতে ত্রুটি থেকে মুক্তি পাওয়া উচিত ছিল।

হাই আমি সমস্ত পদক্ষেপগুলি অনুসরণ করেছি তবে ভাগ্য নেই :(
মণীশনেগি

ক্যাসর্ট ব্যতীত আপনার কি অন্য কোনও শংসাপত্র রয়েছে? আপনার যদি অন্য কিছু থাকে তবে এটিকে শংসাপত্রটিতে যুক্ত করার চেষ্টা করুন
বারানী r

ধন্যবাদ বারানী আর, আমার ভুল ছিল আমি জের থেকে কমান্ড
চালাচ্ছিলাম

শংসাপত্র ডাউনলোড করতে সক্ষম হয়নি তবে পরে "প্রশাসক হিসাবে চালান", ভাল কাজ করেছে।
আরেকটি কোডার

8

আমি smtp.gmail.com- এর জন্য শংসাপত্র আমদানি করতে চেয়েছিলাম

আমার জন্য কেবল সমাধানটি কাজ করে 1. এই শংসাপত্রটি দেখতে কমান্ড প্রবেশ করুন

ডি: \ ওপেনসেল \ বিন \ ওপেনএসএল.এক্সই এস_ক্লিয়েন্ট-সংযোগ smtp.gmail.com:465

  1. "----- শুরু করুন শংসাপত্র -----" এবং "----- সমাপ্তি প্রত্যয় -----" এর মধ্যে রেখাগুলি একটি ফাইলে gmail.cer এর মধ্যে অনুলিপি এবং সংরক্ষণ করুন

  2. চালান

    keytool -import -alias smtp.gmail.com -keystore "% JAVA_Home% / jre / lib / security / cacerts" -ফায়াল সি: \ ব্যবহারকারীগণ \ প্রশাসক \ ডেস্কটপ \ gmail.cer

  3. পাসওয়ার্ড ছ্যাজিট প্রবেশ করান

  4. শংসাপত্রটি আমদানি করতে হ্যাঁ ক্লিক করুন

  5. জাভা পুনরায় চালু করুন

এখন কমান্ড চালান এবং আপনি যেতে ভাল


আপনি মানুষ ধন্যবাদ! এটা আমার দিন বাঁচিয়েছে। এটি ছিল আমার ক্ষেত্রে একমাত্র উপযুক্ত সমাধান।
অ্যান্ড্রু গান্স

আমার দিনও বাঁচিয়েছে। ধন্যবাদ.
ক্রিস

6

এটি কোনও টুইটার-নির্দিষ্ট উত্তর নয়, তবে আপনি যখন এই ত্রুটিটি অনুসন্ধান করেন এটিই প্রশ্নটি আসে। যদি কোনও ওয়েব ব্রাউজারে দেখার সময় কোনও বৈধ শংসাপত্র রয়েছে এমন কোনও ওয়েবসাইটের সাথে সংযোগ করার সময় যদি আপনার সিস্টেমটি এই ত্রুটিটি পেয়ে থাকে তবে সম্ভবত তার অর্থ এই যে ওয়েবসাইটটির একটি অসম্পূর্ণ শংসাপত্র শৃঙ্খলা রয়েছে

সমস্যার সংক্ষিপ্তসার জন্য: শংসাপত্র কর্তৃপক্ষগুলি কোনও পুরানো শংসাপত্র সাইন করতে তাদের রুট শংসাপত্র ব্যবহার করে না। পরিবর্তে, তারা (সাধারণত) অন্তর্বর্তী শংসাপত্রগুলি স্বাক্ষর করে যার শংসাপত্র কর্তৃপক্ষের পতাকা সেটও রয়েছে (যা শংসাপত্রগুলিতে স্বাক্ষর করার অনুমতি রয়েছে)। তারপরে আপনি যখন কোনও সিএর কাছ থেকে শংসাপত্র কিনবেন, তারা আপনার সিএসআরকে এই মধ্যবর্তী শংসাপত্রগুলির একটিতে স্বাক্ষর করে।

আপনার জাভা ট্রাস্ট স্টোর সম্ভবত সম্ভবত রুট সার্ট আছে, অন্তর্বর্তী কিছু নয়।

একটি ভুল কনফিগার্ড সাইট কেবল তাদের স্বাক্ষরিত শংসাপত্রটি ফিরিয়ে দিতে পারে । সমস্যা: এটি একটি মধ্যবর্তী সার্টের সাথে স্বাক্ষরিত হয়েছিল যা আপনার বিশ্বাসের দোকানে নেই in ব্রাউজারগুলি ক্যাশেড ইন্টারমিডিয়েট শংসাপত্র ডাউনলোড বা ব্যবহার করে এই সমস্যাটি পরিচালনা করবে; এটি ওয়েবসাইটের সামঞ্জস্যকে সর্বাধিক করে তোলে। জাভা এবং ওপেনএসএসএলের মতো সরঞ্জামগুলি তবে তা করবে না। এবং এটি প্রশ্নের ত্রুটি ঘটবে।

কোয়ালি এসএসএল টেস্ট ব্যবহার করে আপনি এই সন্দেহটি যাচাই করতে পারেন । যদি আপনি এটি কোনও সাইটের বিরুদ্ধে চালান এবং এটি বলে

এই সার্ভারের শংসাপত্র শৃঙ্খলা অসম্পূর্ণ।

তারপরে এটি নিশ্চিত করে। আপনি শংসাপত্রের পথগুলি দেখে এবং অতিরিক্ত ডাউনলোড পাঠ্যটি দেখে এটি দেখতেও পারেন ।

কীভাবে এটি ঠিক করবেন: ইন্টারমিডিয়েট শংসাপত্রগুলিও ফেরত দিতে সার্ভার প্রশাসককে ওয়েব সার্ভারটি কনফিগার করতে হবে। কমোডোর জন্য, উদাহরণস্বরূপ, এটি এখানে .ca-bundleফাইলটি কাজে আসে। উদাহরণস্বরূপ, Mod_ssl সহ অ্যাপাচি কনফিগারেশনে আপনি SSLCertificateChainFileকনফিগারেশন সেটিংস ব্যবহার করবেন । এনজিঙ্ক্সের জন্য আপনাকে মধ্যবর্তী শংসাপত্রগুলি এবং স্বাক্ষরিত শংসাপত্রকে একত্রিত করতে হবে এবং এটি SSL সার্টিফিকেট কনফিগারেশনে ব্যবহার করতে হবে। অনলাইনে "অসম্পূর্ণ শংসাপত্র শৃঙ্খলা" অনুসন্ধান করে আপনি আরও সন্ধান করতে পারেন।


আপনি মেধাবী. ধন্যবাদ! আমার জাভা সার্ভারের নতুন বিল্ডআউট নিয়ে আমার সমস্যা হয়েছিল কারণ আমি এসএসএল সার্টিফিকেট চেইনফিলের সামনে # টি অপসারণ করতে ভুলে গেছি !!! সত্যিই ভাল ব্যাখ্যা।
কিসনার্ডঅনলাইন

6

কারণটি, আমরা ত্রুটিটি পেয়েছি যে জেডিকে প্রচুর বিশ্বস্ত শংসাপত্র কর্তৃপক্ষ (সিএ) শংসাপত্রের সাহায্যে একটি ফাইলকে 'ক্যাসার্টস' বলে তৈরি করা হয় তবে এই ফাইলটিতে আমাদের স্বাক্ষরিত শংসাপত্রের কোনও চিহ্ন নেই। অন্য কথায়, ক্যা্যাসার্টস ফাইলটিতে আমাদের স্ব-স্বাক্ষরিত শংসাপত্র আমদানি করা থাকে না এবং সুতরাং এটি কোনও বিশ্বস্ত সত্তা হিসাবে বিবেচনা করে না এবং তাই এটি উপরের ত্রুটিটি দেয়।

উপরের ত্রুটিটি কীভাবে ঠিক করবেন

উপরের ত্রুটিটি সমাধান করার জন্য, আমাদের কেবলমাত্র ক্যাসর্টস ফাইলে স্ব স্বাক্ষরিত শংসাপত্রটি আমদানি করা দরকার।

প্রথমে ক্যাসর্ট ফাইলটি সন্ধান করুন। আমাদের জেডিকে অবস্থানটি খুঁজে বের করতে হবে। আপনি যদি এক্লিপ্স বা ইন্টেলিজ আইডিয়া জাতীয় আইডিইর একটির মাধ্যমে আপনার অ্যাপ্লিকেশনটি চালাচ্ছেন তবে প্রকল্পের সেটিংসে যান এবং জেডিকে অবস্থানটি কী তা নির্ধারণ করুন। উদাহরণস্বরূপ, ম্যাক ওএসের জন্য ক্যা্যাসার্টস ফাইলের সাধারণ অবস্থানটি এই স্থানে / লাইব্রেরি / জাভা / জাভা ভার্চুয়ালম্যাচাইনস / {{জেডি কে_ভার্সন} Con / সামগ্রী / হোম / জেআর / লিবিব / উইন্ডোটির মেশিনে সুরক্ষা হবে এটি {{ইনস্টলেশন_নির্দেশ} এর অধীনে থাকবে } / {{JDK_version}} / JRE / lib / অনুপস্থিত নিরাপত্তা

একবার আপনি ক্যাসের্টস ফাইলটি সনাক্ত করে নিলে, এখন আমাদের এই স্ব-স্বাক্ষরিত শংসাপত্রটি এই ক্যাসর্ট ফাইলে আমদানি করতে হবে। শেষ নিবন্ধটি পরীক্ষা করে দেখুন, কীভাবে স্ব-স্বাক্ষরিত শংসাপত্রটি সঠিকভাবে উত্পন্ন করতে হয় তা আপনি যদি না জানেন।

আপনার কাছে যদি একটি শংসাপত্র ফাইল (.crt) না থাকে এবং কেবল একটি .jks ফাইল থাকে আপনি নীচের কমান্ডটি ব্যবহার করে একটি .crt ফাইল তৈরি করতে পারেন। আপনার যদি ইতিমধ্যে একটি .crt / .pem ফাইল থাকে তবে আপনি নীচের আদেশটি উপেক্ষা করতে পারেন

## কীস্টোর (.jks ফাইল) থেকে শংসাপত্র তৈরি করতে ####

keytool -export -keystore keystore.jks -alias selfsigned -file selfsigned.crt

উপরের পদক্ষেপটি স্বয়সাইনড সিআরটি নামে একটি ফাইল উত্পন্ন করবে ow এখন ক্যাটারে শংসাপত্রটি আমদানি করুন

এখন জেআরই / লিবিব / সুরক্ষা / ক্যাশেটারগুলিতে শংসাপত্র যুক্ত করুন (বিশ্বস্তরে)
keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}

যেমন

keytool -importcert -file selfsigned.nextgen.crt -alias selfsigned.nextgen -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts

এগুলি হ'ল, আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করুন এবং এটি ঠিকঠাক কাজ করা উচিত। যদি এটি এখনও কাজ না করে এবং কোনও এসএসএল হ্যান্ডশেক ব্যতিক্রম পান। এর অর্থ সম্ভবত আপনি শংসাপত্রে নিবন্ধিত হয়ে আলাদা ডোমেন ব্যবহার করছেন।

বিস্তারিত ব্যাখ্যা এবং ধাপে ধাপে রেজোলিউশন সহ লিঙ্কটি এখানে শেষ।


4

যোগ করা cacertsআমার পক্ষে কাজ করে না। পতাকা দিয়ে লগ সক্ষম করার পরে -Djavax.net.debug=all, পরে জাভা পড়া জেনে গেল jssecacerts

jssecacertsশেষ পর্যন্ত কাজ করতে আমদানি করুন ।


2
এখানে অনুপস্থিত ব্যাখ্যাটি হ'ল জাভা jssecacertsউপস্থিত থাকলে ব্যবহার করবে , অন্যথায় cacerts
লার্নের মারকুইস

3

এটি একটি সমাধান তবে এই সমস্যার সাথে আমার গল্পের আকারে:

উপরে বর্ণিত সমস্ত সমাধান (3 দিনের জন্য) চেষ্টা করে আমি প্রায় মারা গিয়েছিলাম এবং কিছুই আমার পক্ষে কার্যকর হয়নি।

আমি সব আশা হারিয়েছি।

আমি এই বিষয়ে আমার সুরক্ষা দলের সাথে যোগাযোগ করেছি কারণ আমি প্রক্সিটির পিছনে ছিলাম এবং তারা জানিয়েছিল যে তারা সম্প্রতি তাদের সুরক্ষা নীতি আপডেট করেছে।

বিকাশকারীদের অবহিত না করার জন্য আমি তাদের খারাপভাবে ধমক দিয়েছি।

পরে তারা একটি নতুন "ক্যাচার্টস" ফাইল জারি করে যাতে সমস্ত শংসাপত্র রয়েছে।

আমি ক্যা্যাসার্টস ফাইলটি অপসারণ করেছি যা%% জাভাহোম% / জেআর / লিবিব / সুরক্ষার অভ্যন্তরে উপস্থিত রয়েছে এবং এটি আমার সমস্যার সমাধান করেছে।

সুতরাং আপনি যদি এই সমস্যার মুখোমুখি হন তবে এটি আপনার নেটওয়ার্ক টিম থেকেও হতে পারে।


2

আমি তাদের আপডেট সাইটের মাধ্যমে Eclipse এ শসা-Eclipse প্লাগইন ইনস্টল করার চেষ্টা করার সময় এই প্রশ্নটি জুড়ে এসেছি। আমি একই সানকার্টপথবিল্ডার এক্সেকশন ত্রুটি পেয়েছি:

Unable to read repository at http://cucumber.io/cucumber-eclipse/update-site/content.xml.
    Unable to read repository at http://cucumber.io/cucumber-eclipse/update-site/content.xml.
    sun.security.validator.ValidatorException: PKIX path building failed: 
   sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

এই প্রশ্নের প্রদত্ত পরিস্থিতির জন্য অন্য কয়েকটি উত্তর যথাযথ এবং সহায়ক, যদিও তা সত্ত্বেও তারা আমার সমস্যাটির জন্য অস্বাস্থ্যকর এবং বিভ্রান্তিকর ছিল।

আমার ক্ষেত্রে, সমস্যাটি ছিল তাদের আপডেট সাইটের জন্য সরবরাহ করা URL টি হ'ল:

https://cucumber.io/cucumber-eclipse/update-site

যাইহোক এটি ব্রাউজারের মাধ্যমে নেভিগেট করার সময়, এটি পুনঃনির্দেশিত (যুক্ত নোট " .গিথুব " ):

http://cucumber.github.io/cucumber-eclipse/update-site/

সুতরাং রেজোলিউশনটি হ'ল গ্রহনে আপডেট সাইট যুক্ত করার সময় আপডেট সাইট URL এর পুনঃনির্দেশিত সংস্করণটি ব্যবহার করা।


3
আপনি কি নিশ্চিত যে আপনি সঠিক প্রশ্নের উত্তর দিচ্ছেন? আসল প্রশ্নে শসার কোন উল্লেখ নেই ...
সম্পন্ন ডেটা সলিউশন

আমি অনুভব করি যে আমি আছি। আমি একই SunCertPathBuilderException ত্রুটি গৃহীত এবং যখন একটি রেজল্যুশন অনুসন্ধানের জন্য, এই প্রশ্নের পাশাপাশি পাওয়া এই এক । যাইহোক, তাদের উভয়েরই আমার অবস্থার জন্য উপযুক্ত সমাধান দেয়নি। আমি কীভাবে শসা-গ্রহনের প্লাগইন সাইটটি গ্রহন করতে যোগ করব তার নির্দিষ্ট প্রশ্নের উত্তর দেওয়ার চেষ্টা করছিলাম না। আমি যে সমস্যার মুখোমুখি হয়েছি (ইউআরএল পুনর্নির্দেশ) এর প্রসঙ্গ সরবরাহ করতে এবং এটি কীভাবে সমাধান করা হয়েছে তা ব্যাখ্যা করতে চেয়েছিলাম।
রাইফ্রিপল

অন্তর্নিহিত সমস্যা এবং সমাধানটি আলাদা ছিল তা উল্লেখ করে আমি একই ত্রুটি পেয়েছি তা পরিষ্কার করার জন্য আমি আমার উত্তর আপডেট করেছি। আমি মনে করি এটি বৈধ যেহেতু একই ত্রুটিতে অনুসন্ধান করার সময় অন্যরা এই প্রশ্নটি খুঁজে পেতে পারে। আপনি যদি এটি বোধগম্য মনে করেন তবে আপনার ভোট পরিবর্তন করার বিষয়ে বিবেচনা করুন।
রাইফ্রিপল

ধন্যবাদ. বিষয়গুলি আরও পরিষ্কার করে তোলে, আমার ডাউনটোটকে বিপরীত করেছে
সম্পন্ন ডেটা সলিউশনগুলি

আপনাকে স্বাগতম! এবং এটি আবার পর্যালোচনা করার জন্য সময় দেওয়ার জন্য ধন্যবাদ।
রাইফ্রিপল

2

আমি একই সমস্যার মুখোমুখি হয়েছি এবং নীচের সহজ পদক্ষেপগুলি ব্যবহার করে এটি সমাধান করেছি:

1) গুগল থেকে ইনস্টলকার্ট.জভা ডাউনলোড করুন

2) জাভ্যাক ইনস্টলকার্ট.জভা ব্যবহার করে এটি সঙ্কলন করুন

3) ইনস্টলকার্ট.জাভা ব্যবহার করে চালান হোস্ট-নেম এবং https পোর্ট সহ জাভা করুন এবং ইনপুট জিজ্ঞাসা করার সময় "1" টিপুন। এটি বিশ্বস্ত কীস্টোর হিসাবে "লোকালহোস্ট" যুক্ত করবে এবং নীচে "jssecacerts" নামে একটি ফাইল তৈরি করবে:

জাভা ইনস্টলকার্ট লোকালহোস্ট: 443

4) jssecacerts অনুলিপি করুন $ জাভাআহোম / jre / lib / সুরক্ষা ফোল্ডারে

এখানে সমস্যাটি সমাধানের মূল উত্স হ'ল:

https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html


1

pkcs12স্টোর থেকে cacertsকীস্টোরের শংসাপত্র আমদানি করে আমি জাভা 8 দিয়ে উইন্ডোজ সার্ভার 2016 এ এই সমস্যাটি সমাধান করেছি ।

: Pkcs12 দোকান থেকে পাথ
C:\Apps\pkcs12.pfx

জাভা cacerts করার পথ:
C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts

keytool করার পথ:
C:\Program Files\Java\jre1.8.0_151\bin

কম্যান্ড প্রম্প্ট (প্রশাসক হিসেবে), আমদানি যা নিশ্চিতভাবে ঘটবে কমান্ড থেকে keytool সঙ্গে ফোল্ডারে possitioning পর pkcs12থেকে cacertsহিসাবে অনুসরণ করে:
keytool -v -importkeystore -srckeystore C:\Apps\pkcs12.pfx -srcstoretype PKCS12 -destkeystore "C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts" -deststoretype JKS

: আপনি করার প্রণোদনা দেওয়া হবে
1. গন্তব্য কীস্টোর পাসওয়ার্ড লিখুন (ক্যাসার্ট প্যাসওয়ার্ড, ডিফল্টটি "চেঞ্জিট")
২. উত্স কীস্টোর পাসওয়ার্ড প্রবেশ করান (pkcs12 পাসওয়ার্ড)


পরিবর্তনগুলি কার্যকর করতে, সার্ভার মেশিনটি পুনরায় চালু করুন (বা কেবল জেভিএম পুনরায় চালু করুন)।


1
আমি এই পন্থাটি একটি ম্যাকটিতে ব্যবহার করেছি এবং এটি ঠিক কাজ করেছে। আমার সার্টটি অবশ্যই স্বাক্ষরিত এবং উত্পাদিত হয়েছিল আমি .pfx ফাইলটি আমদানি করেছিলাম যা আমি আমার উইন্ডোজ অ্যাডএফএস সার্ভারে তৈরি করেছি। আমার অ্যাপ্লিকেশনের জন্য জাভা 10 ব্যবহার করে ধন্যবাদ
শশীকান্ত সনি

0

বিশ্বস্ত শংসাপত্রের PATH এ অমিল পাওয়া গেলে এখানে সাধারণত এই ধরণের ব্যতিক্রম ঘটে। সুরক্ষিত যোগাযোগের জন্য এই সার্ভার শংসাপত্রটি প্রয়োজনীয় যেখানে কনফিগারেশন বা পথটি পরীক্ষা করুন।


আপনি কি দয়া করে আমাকে সঠিক কনফিগারেশন বলতে পারেন যেখানে আমি শংসাপত্র ইনস্টল করতে পারি। Actaully আমি এই সংক্রান্ত সমস্যা হচ্ছে না, আমি ব্যবহার করে এই বিষয়টি সংক্রান্ত শংসাপত্র ইনস্টল করেছিলেন keytool প্রায় 20-30 মিনিট ধরে এই কাজ করে এবং তারপর সার্ভার সমস্যা একই ভুল আবার। আমাকে সাহায্য করুন. আমি এই সমস্যাটিতে 2 দিন ধরে আটকে আছি।
দীপক গাঙ্গোর

আমার মনে হয় প্রতি 20-30 মিনিটের মধ্যে শংসাপত্রটি পরিবর্তিত হয়
বিশ্বনাথ গৌড়

আমি একই ধরণের সমস্যার মুখোমুখি হচ্ছি তবে ইস্যুটির জন্য: আমার জাভা জাভা অ্যাপ্লিকেশনগুলির A জাভাআহোম / লিব / সুরক্ষা / সিসার্টের জন্য ডিফল্ট অবস্থান বাছাই করুন যদিও আমি সরবরাহ করেছি - ডিজেভ্যাক্স.এন.এসএল.আরস্টস্টোর = / মাইয়াপ / অ্যাপ.জ্যাক কেউ আমাকে সহায়তা করতে পারে? এর উপর: স্ট্যাকওভারফ্লো.com
লক্ষণ জি

0

আমার জন্য, শংসাপত্রের ত্রুটি পপ আপ হয়েছে কারণ আমার ফিডলারটি ব্যাকগ্রাউন্ডে চলছিল এবং এটি শংসাপত্রের সাথে মেসেজ করে। এটি প্রক্সি হিসাবে এতটা কাছাকাছি কাজ করে এবং গ্রহনটি পুনরায় আরম্ভ করে।


একইভাবে সমস্ত
গ্রহণে

0

গোল:

  1. https সংযোগগুলি ব্যবহার করুন
  2. এসএসএল চেইন যাচাই করুন
  3. ক্যাসর্টগুলির সাথে ডিল করবেন না
  4. রানটাইমে শংসাপত্র যুক্ত করুন
  5. ক্যাসর্ট থেকে শংসাপত্র হারাবেন না

এটা কিভাবে করতে হবে:

  1. নিজস্ব কীস্টোর সংজ্ঞায়িত করুন
  2. কীস্টোরে শংসাপত্র রাখুন
  3. আমাদের কাস্টম শ্রেণীর সাথে এসএসএল ডিফল্ট প্রসঙ্গটি পুনরায় সংজ্ঞায়িত করুন
  4. ???
  5. মুনাফা

আমার কীস্টোর র‍্যাপার ফাইল:

public class CertificateManager {

    private final static Logger logger = Logger.getLogger(CertificateManager.class);

    private String keyStoreLocation;
    private String keyStorePassword;
    private X509TrustManager myTrustManager;
    private static KeyStore myTrustStore;

    public CertificateManager(String keyStoreLocation, String keyStorePassword) throws Exception {
        this.keyStoreLocation = keyStoreLocation;
        this.keyStorePassword = keyStorePassword;
        myTrustStore = createKeyStore(keyStoreLocation, keyStorePassword);
    }

    public void addCustomCertificate(String certFileName, String certificateAlias)
            throws Exception {
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init((KeyStore) null);
        Certificate certificate = myTrustStore.getCertificate(certificateAlias);
        if (certificate == null) {
            logger.info("Certificate not exists");
            addCertificate(certFileName, certificateAlias);
        } else {
            logger.info("Certificate exists");
        }
        tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(myTrustStore);
        for (TrustManager tm : tmf.getTrustManagers()) {
            if (tm instanceof X509TrustManager) {
                setMytrustManager((X509TrustManager) tm);
                logger.info("Trust manager found");
                break;
            }
        }
    }

    private InputStream fullStream(String fname) throws IOException {
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream resource = classLoader.getResourceAsStream(fname);
        try {
            if (resource != null) {
                DataInputStream dis = new DataInputStream(resource);
                byte[] bytes = new byte[dis.available()];
                dis.readFully(bytes);
                return new ByteArrayInputStream(bytes);
            } else {
                logger.info("resource not found");
            }
        } catch (Exception e) {
            logger.error("exception in certificate fetching as resource", e);
        }
        return null;
    }

    public static KeyStore createKeyStore(String keystore, String pass) throws Exception {
        try {
            InputStream in = CertificateManager.class.getClass().getResourceAsStream(keystore);
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(in, pass.toCharArray());
            logger.info("Keystore was created from resource file");
            return keyStore;
        } catch (Exception e) {
            logger.info("Fail to create keystore from resource file");
        }

        File file = new File(keystore);
        KeyStore keyStore = KeyStore.getInstance("JKS");
        if (file.exists()) {
            keyStore.load(new FileInputStream(file), pass.toCharArray());
            logger.info("Default keystore loaded");
        } else {
            keyStore.load(null, null);
            keyStore.store(new FileOutputStream(file), pass.toCharArray());
            logger.info("New keystore created");
        }
        return keyStore;
    }

    private void addCertificate(String certFileName, String certificateAlias) throws CertificateException,
            IOException, KeyStoreException, NoSuchAlgorithmException {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream certStream = fullStream(certFileName);
        Certificate certs = cf.generateCertificate(certStream);
        myTrustStore.setCertificateEntry(certificateAlias, certs);
        FileOutputStream out = new FileOutputStream(getKeyStoreLocation());
        myTrustStore.store(out, getKeyStorePassword().toCharArray());
        out.close();
        logger.info("Certificate pushed");
    }

    public String getKeyStoreLocation() {
        return keyStoreLocation;
    }

    public String getKeyStorePassword() {
        return keyStorePassword;
    }
    public X509TrustManager getMytrustManager() {
        return myTrustManager;
    }
    public void setMytrustManager(X509TrustManager myTrustManager) {
        this.myTrustManager = myTrustManager;
    }
}

এই শ্রেণিটি প্রয়োজনে কীস্টোর তৈরি করবে এবং এর মধ্যে শংসাপত্রগুলি পরিচালনা করতে সক্ষম হবে। এসএসএল প্রসঙ্গে এখন ক্লাস:

public class CustomTrustManager implements X509TrustManager {

    private final static Logger logger = Logger.getLogger(CertificateManager.class);

    private static SSLSocketFactory socketFactory;
    private static CustomTrustManager instance = new CustomTrustManager();
    private static List<CertificateManager> register = new ArrayList<>();

    public static CustomTrustManager getInstance() {
        return instance;
    }

    private X509TrustManager defaultTm;

    public void register(CertificateManager certificateManager) {
        for(CertificateManager manager : register) {
            if(manager == certificateManager) {
                logger.info("Certificate manager already registered");
                return;
            }
        }
        register.add(certificateManager);
        logger.info("New Certificate manager registered");
    }

    private CustomTrustManager() {
        try {
            String algorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);

            tmf.init((KeyStore) null);
            boolean found = false;
            for (TrustManager tm : tmf.getTrustManagers()) {
                if (tm instanceof X509TrustManager) {
                    defaultTm = (X509TrustManager) tm;
                    found = true;
                    break;
                }
            }
            if(found) {
                logger.info("Default trust manager found");
            } else {
                logger.warn("Default trust manager was not found");
            }

            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[]{this}, null);
            SSLContext.setDefault(sslContext);
            socketFactory = sslContext.getSocketFactory();
            HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);


            logger.info("Custom trust manager was set");
        } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
            logger.warn("Custom trust manager can't be set");
            e.printStackTrace();
        }
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        List<X509Certificate> out = new ArrayList<>();
        if (defaultTm != null) {
            out.addAll(Arrays.asList(defaultTm.getAcceptedIssuers()));
        }
        int defaultCount = out.size();
        logger.info("Default trust manager contain " + defaultCount + " certficates");
        for(CertificateManager manager : register) {
            X509TrustManager customTrustManager = manager.getMytrustManager();
            X509Certificate[] issuers = customTrustManager.getAcceptedIssuers();
            out.addAll(Arrays.asList(issuers));
        }
        logger.info("Custom trust managers contain " + (out.size() - defaultCount) + " certficates");
        X509Certificate[] arrayOut = new X509Certificate[out.size()];
        return out.toArray(arrayOut);
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
        for(CertificateManager certificateManager : register) {
            X509TrustManager customTrustManager = certificateManager.getMytrustManager();
            try {
                customTrustManager.checkServerTrusted(chain, authType);
                logger.info("Certificate chain (server) was aproved by custom trust manager");
                return;
            } catch (Exception e) {
            }
        }
        if (defaultTm != null) {
            defaultTm.checkServerTrusted(chain, authType);
            logger.info("Certificate chain (server) was aproved by default trust manager");
        } else {
            logger.info("Certificate chain (server) was rejected");
            throw new CertificateException("Can't check server trusted certificate.");
        }
    }

    @Override
    public void checkClientTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
        try {
            if (defaultTm != null) {
                defaultTm.checkClientTrusted(chain, authType);
                logger.info("Certificate chain (client) was aproved by default trust manager");
            } else {
                throw new NullPointerException();
            }
        } catch (Exception e) {
            for(CertificateManager certificateManager : register) {
                X509TrustManager customTrustManager = certificateManager.getMytrustManager();
                try {
                    customTrustManager.checkClientTrusted(chain, authType);
                    logger.info("Certificate chain (client) was aproved by custom trust manager");
                    return;
                } catch (Exception e1) {
                }
            }
            logger.info("Certificate chain (client) was rejected");
            throw new CertificateException("Can't check client trusted certificate.");
        }
    }

    public SSLSocketFactory getSocketFactory() {
        return socketFactory;
    }
}

এই ক্লাসটি সিঙ্গলটন হিসাবে তৈরি হয়েছে, কারণ কেবলমাত্র একটি ডিফল্ট এসএসএল প্রসঙ্গ অনুমোদিত। সুতরাং, এখন ব্যবহার:

            CertificateManager certificateManager = new CertificateManager("C:\\myapplication\\mykeystore.jks", "changeit");
            String certificatePath = "C:\\myapplication\\public_key_for_your_ssl_service.crt";
            try {
                certificateManager.addCustomCertificate(certificatePath, "alias_for_public_key_for_your_ssl_service");
            } catch (Exception e) {
                log.error("Can't add custom certificate");
                e.printStackTrace();
            }
            CustomTrustManager.getInstance().register(certificateManager);

সম্ভবত, এটি এই সেটিংসগুলির সাথে কাজ করবে না, কারণ আমি উত্স ফোল্ডারের ভিতরে শংসাপত্র ফাইল রাখি, তাই আমার পথটি পরম নয়। তবে সাধারণত, এটি নিখুঁতভাবে কাজ করে।


1
এই দ্বিগুণ অপব্যবহারের available()বিরুদ্ধে বিশেষভাবে তার নিজস্ব জাভাদোকের বিরুদ্ধে সতর্ক করা হয়েছে।
লার্নের মারকুইস

0

এটি https://stackoverflow.com/a/36427118/1491414 উত্তরের সংযোজন । ধন্যবাদ @ ম্যাগজিজিজি

  • আপনার প্রশাসকের অনুমতি আছে তা নিশ্চিত করুন
  • দয়া করে কীস্টোর পাথের জন্য ডাবল উদ্ধৃতিগুলি ব্যবহার করুন (-কিস্টোর সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ জাভা \ jre1.6.0_22 \ lib \ সুরক্ষা \ cacerts ") কারণ উইন্ডোজ ওএসে ডিফল্ট ইনস্টলসের অবস্থান প্রোগ্রাম ফাইল হবে এবং আপনি পাবেন প্রোগ্রাম ফাইলগুলির মধ্যে স্থানের কারণে একটি ত্রুটি।

0

আমি নীচের পদ্ধতিটি ব্যবহার করে এটি ঠিক করেছি -

  1. সংযুক্ত সমস্যাটি রয়েছে এমন ইউআরএল অনুলিপি করুন
  2. অ্যান্ড্রয়েড স্টুডিও-> সেটিংস-> এইচটিটিপি সেটিংসে যান
  3. 'পরীক্ষার সংযোগে', সেই url টি পেস্ট করুন এবং ঠিক আছে চাপুন
  4. ওকে ক্লিক করুন, অ্যান্ড্রয়েড স্টুডিও সেই ইউআরএলটির শংসাপত্র আমদানি করতে বলবে, এটি আমদানি করবে
  5. এটাই. আর কিছু করার নেই এবং আমার সমস্যাটি চলে গেল। পাশাপাশি স্টুডিও পুনরায় আরম্ভ করার দরকার নেই।

0

যখন আপনার আটলাসিয়ান সফ্টওয়্যার প্রাক্তন ত্রুটি রয়েছে। জির

2018-08-18 11:35:00,312 Caesium-1-4 WARN anonymous    Default Mail Handler [c.a.mail.incoming.mailfetcherservice] Default Mail Handler[10001]: javax.mail.MessagingException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while connecting to host 'imap.xyz.pl' as user 'jira@xyz.pl' via protocol 'imaps, caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

আপনি এর বিশ্বস্ত কীস্টোরে শংসাপত্রগুলি যুক্ত করতে পারেন (হারিয়ে যাওয়া_সিএকে যথাযথ শংসাপত্রের নাম পরিবর্তন করুন):

keytool -importcert -file missing_ca.crt -alias missing_ca -keystore /opt/atlassian/jira/jre/lib/security/cacerts

পাসওয়ার্ড জিজ্ঞাসা করা হলে changeitএবং নিশ্চিত করুনy

এর পরে জিরা পুনরায় চালু করুন।


0

যদি আপনার সংগ্রহস্থল URL টি এইচটিটিপিতেও কাজ করে এবং সুরক্ষা কোনও উদ্বেগের বিষয় না হয় তবে আপনি সেটিংস.এক্সএমএল এ যেতে পারেন (প্রায়শই, তবে সবসময়ই থাকেন না %USERPROFILE%/.m2) এবং এইচটিটিপিএসের জন্য এইচটিটিপিএস প্রতিস্থাপন করতে পারেন<repository> এবং<pluginRepository> ইউআরএলগুলির ।

উদাহরণস্বরূপ, এটি:

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>

এটি দ্বারা প্রতিস্থাপন করা উচিত:

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>

0

আমি আরআরইয়ের পরিবর্তে আরগের মাধ্যমে নিজের বিশ্বাসের দোকানটি ব্যবহার করছি -Djavax.net.ssl.trustStore=

ট্রাস্টস্টোরের শংসাপত্র নির্বিশেষে আমি এই ত্রুটিটি পাচ্ছিলাম। আমার পক্ষে সমস্যাটি ছিল আর্গ লাইনে প্রদত্ত সম্পত্তিগুলির ক্রম। যখন আমি রেখেছি -Djavax.net.ssl.trustStore=& -Djavax.net.ssl.trustStorePassword= সামনে -Dspring.config.location= & -jarargs আমি সফলভাবে করতে সক্ষম হন HTTPS উপর আমার বিশ্রাম কল ডাকা।


0

আপনি যদি ক্লাউডফাউন্ড্রি ব্যবহার করছেন এবং শংসাপত্র ইস্যুতে চালিত হন তবে আপনাকে নিশ্চিত করতে হবে যে এতে শংসাপত্র সহ কীস্টোর-পরিষেবাটি দিয়ে আপনি আবার জারটি চাপছেন। কেবল আনবাইন্ড, বাঁধুন এবং পুনরায় চালু করা কার্যকর হবে না।


0

আপনার হোস্ট যদি ফায়ারওয়াল / প্রক্সিের পিছনে বসে থাকে তবে সেমিডিতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

keytool -J-Dhttps.proxyHost=<proxy_hostname> -J-Dhttps.proxyPort=<proxy_port> -printcert -rfc -sslserver <remote_host_name:remote_ssl_port>

প্রতিস্থাপন <proxy_hostname>এবং <proxy_port>HTTP প্রক্সি সার্ভার যা কনফিগার করা যায়। প্রতিস্থাপন করা<remote_host_name:remote_ssl_port>প্রত্যন্ত হোস্টগুলির মধ্যে একটি (মূলত url) এবং শংসাপত্রের সমস্যাযুক্ত পোর্টের সাথে ।

সর্বশেষ শংসাপত্রের সামগ্রী মুদ্রিত করুন এবং এটি অনুলিপি করুন (এছাড়াও অনুলিপি এবং শেষ শংসাপত্রের অনুলিপি করুন)। এটি পাঠ্য ফাইলে পেস্ট করুন এবং এতে .crt এক্সটেনশন দিন। এখন এই শংসাপত্রটি জাভা কীটল কমান্ডটি ব্যবহার করে ক্যাসার্টগুলিতে আমদানি করুন এবং এটি কাজ করা উচিত।

keytool -importcert -file <filename>.crt -alias randomaliasname -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit


0

জাভা অ্যাপ্লিকেশন অন্য কোনও অ্যাপ্লিকেশন / সাইটের সাথে যোগাযোগের চেষ্টা করার সময় আপনি যদি কোনও লিনাক্স ধারক মধ্যে এই সমস্যাটি দেখছেন, কারণ এটি শংসাপত্রটি লোড ব্যালেন্সারে ভুলভাবে আমদানি করা হয়েছে। শংসাপত্র আমদানি করার জন্য অনুসরণীয় পদক্ষেপগুলির ক্রম রয়েছে এবং এটি সঠিকভাবে করা না হলে আপনি পছন্দ মতো সমস্যাগুলি দেখতে পাবেন

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
certification path to requested target

শংসাপত্রগুলি সঠিকভাবে আমদানি হয়ে গেলে, এটি করা উচিত। কোনও জেডিকে শংসাপত্রের সাথে টিঙ্কার করার দরকার নেই।


0

আমি এটা মীমাংসিত Intellij আইডিয়া আমি মুখোমুখি এই সমস্যা Althouh, আমি problem.I একটি সমাধান পাওয়া সমাধান করতে জায়গা অনেকটা পরিবর্তন আমাকে আপনার প্রকল্পের ক্লিক .Right স্বরূপ, আপনি দেখতে হবে ম্যাভেন , যে প্রেস পর জেনারেট করুন সোর্স এবং আপডেট ফোল্ডার এবং পুনরায় ইম্পোর্ট করার পরিবর্তে এখানে চিত্র বর্ণনা লিখুন

হয়ে গেছে।


0

আমি একই সমস্যার মুখোমুখি ছিলাম, আমি 8.1.0-3 ব্যবহার করছিলাম তবে পরে আমি 9.2.1-0 ব্যবহার করেছি এবং কোনও ম্যানুয়াল পদক্ষেপ ছাড়াই সমস্যাটি স্থির হয়ে গেছে। স্ব-স্বাক্ষরিত শংসাপত্রটি ভাল কাজ করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.