অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পাওয়া যায়নি - শংসাপত্র আমদানি করার পরেও ত্রুটি


204

আমার একটি জাভা ক্লায়েন্ট রয়েছে যা স্ব-স্বাক্ষরিত শংসাপত্র সহ কোনও সার্ভার অ্যাক্সেস করার চেষ্টা করছে।

আমি যখন সার্ভারে পোস্ট করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

অনুরোধ করা টার্গেটে বৈধ শংসাপত্রের পথ খুঁজে পেতে ব্যর্থ

বিষয়টি নিয়ে কিছু গবেষণা করার পরে আমি নিম্নলিখিতগুলি করেছি।

  1. আমার সার্ভারের ডোমেন নামটি root.cerফাইল হিসাবে সংরক্ষণ করেছে।
  2. আমার গ্লাসফিশ সার্ভারের জেআরই-তে, আমি এটি চালিয়েছি:
    keytool -import -alias example -keystore cacerts -file root.cer
  3. শংসাপত্রটি সফলভাবে আমার ক্যাসের্টে যোগ করা হয়েছিল তা পরীক্ষা করতে, আমি এটি করেছি:
    keytool -list -v -keystore cacerts
    আমি দেখতে পাচ্ছি যে শংসাপত্রটি উপস্থিত রয়েছে।
  4. আমি তখন গ্লাসফিশ পুনরায় শুরু করেছি এবং 'পোস্ট' অবসর নিয়েছি।

আমি এখনও থিস ত্রুটি পাচ্ছি।

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

আপনার কারও কি এই সমস্যা আছে এবং আমাকে সঠিক দিকে ঠেলে দিতে পারেন?


1
কেবল পরিষ্কার করার জন্য "আমার একটি জাভা ক্লায়েন্ট স্ব-স্বাক্ষরিত শংসাপত্রের সাথে একটি সার্ভার অ্যাক্সেস করার চেষ্টা করছে" ": আপনি স্বাক্ষরিত ক্লায়েন্ট-শংসাপত্রগুলি ব্যবহার করার কথা বলছেন, আপনি না? গ্লাসফিশে আপনার সংযোগকারী সেটিংসের জন্য কোনও নির্দিষ্ট কনফিগারেশন রয়েছে (বিশেষত ট্রাস্ট স্টোর সেটিংস)?
ব্রুনো

"আমার একটি জাভা ক্লায়েন্ট স্ব-স্বাক্ষরিত শংসাপত্রের সাথে একটি সার্ভার অ্যাক্সেস করার চেষ্টা করছে" ": আপনি স্বাক্ষরিত এমন ক্লায়েন্ট-শংসাপত্রগুলি ব্যবহার করার কথা বলছেন, তাই না? - হ্যাঁ.
TheCoder

1
আমি গ্লাসফিশ জেভিএম 2-সেটিংস পেয়েছি: -Djavax.net.ssl.keyStore = $ {com.sun.aas.instanceRoot} /config/keystore.jks এবং -jjax.net.ssl.trustStore = $ {com.sun। aas.instanceRoot} /config/cacerts.jks। আমার এখন তাদের মধ্যে একটিতে সার্টিফিকেট যুক্ত করা দরকার। আপনি কী এটির মূল স্টোরটি যুক্ত করে তা নিশ্চিত করতে পারেন?
TheCoder

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

ব্রুনো কাজ করেছে। আমি এটিকে আমার গ্লাস ফিশ ট্রস্টস্টোরে যুক্ত করেছি। আপনার সাহায্যের জন্য অনেক ধন্যবাদ. তুমিও ডার্ক।
TheCoder

উত্তর:


155

দুর্ভাগ্যক্রমে - এটি অনেক কিছুই হতে পারে - এবং প্রচুর অ্যাপ সার্ভার এবং অন্যান্য জাভা 'র‍্যাপারস' বৈশিষ্ট্যগুলির সাথে খেলতে প্রবণ এবং তাদের 'নিজস্ব' কীচেইনগুলি রাখে এবং কী না। সুতরাং এটি সম্পূর্ণ ভিন্ন কিছু খুঁজছেন হতে পারে।

ট্রাস-ইনগের সংক্ষিপ্ত - আমি চেষ্টা করব:

java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...

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

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

all            turn on all debugging
ssl            turn on ssl debugging

The   following can be used with ssl:
    record       enable per-record tracing
    handshake    print each handshake message
    keygen       print key generation data
    session      print session activity
    defaultctx   print default SSL initialization
    sslctx       print SSLContext tracing
    sessioncache print session cache tracing
    keymanager   print key manager tracing
    trustmanager print trust manager tracing
    pluggability print pluggability tracing

    handshake debugging can be widened with:
    data         hex dump of each handshake message
    verbose      verbose handshake message printing

    record debugging can be widened with:
    plaintext    hex dump of record plaintext
    packet       print raw SSL/TLS packets

সূত্র: # দেখুন http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug


6
অনেক ধন্যবাদ! -Djavax.net.ssl.trustStore = / অবস্থান_of / trustStore আমার সমস্যার সমাধান করেছে এবং ডিবাগ তথ্যটিও সত্যই সহায়ক ছিল।
RHE

5
java -Djavax.net.debug = all -Djavax.net.ssl.trustStore = trustStore ... নীচের ত্রুটি দেয়: ত্রুটি: মূল শ্রেণীর সন্ধান বা লোড করা
যায়নি

1
অবশ্যই আপনাকে ট্র্যাডস্টোরের পাসওয়ার্ড -Djavax.net.ssl.trustStorePassword =
changeit

18

সমাধানটি এখানে, ধাপে ধাপে নীচের লিঙ্কটি অনুসরণ করুন:

http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/

জাভা ফাইল: যা ব্লগ থেকে অনুপস্থিত

/*
 * 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.
 */



import java.io.*;
import java.net.URL;

import java.security.*;
import java.security.cert.*;

import javax.net.ssl.*;

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 <host>[: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);
    }
    }

}

3
এই সমাধানটি আমার পক্ষে কাজ করেছে, তবে এটি সেভিং ট্রাস্ট ম্যানেজারের ব্যক্তিগত শ্রেণিতে একটি ছোট পরিবর্তন দরকার:public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0];}
রিচার্ড

1
@ রিচার্ড, @ পল, @ ব্যবহারকারী6258309 আমি ত্রুটি পেয়েছি থ্রেড "মূল" জাভা.net.সকেটটাইমআউট এক্সপেশন: জাভা.নেটপাট.সকেটআরড0 (নেটিভ মেথড) এ জাভা.net.সোকিট ইনপুটস্ট্রিম.সকেটআরেড (অজানা উত্স) এ পড়া শেষ হয়েছে ) আমি কীভাবে এটি ঠিক করতে পারি
রেনজিথ কৃষ্ণান

5
এটি 'তাই; lution' মূলত নিরাপত্তাহীন। ব্যবহার করবেন না.
মারকুইস

9
এই উত্তরটি বেশিরভাগ কোড। এটি কেন বা কেন কাজ করে তা ব্যাখ্যা করে না।

13

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

কমান্ড লাইনের মাধ্যমে:

java -Djavax.net.ssl.trustStore=truststores/client.ts com.progress.Client

বা জাভা কোডের মাধ্যমে:

import java.util.Properties;
    ...
    Properties systemProps = System.getProperties();
    systemProps.put("javax.net.ssl.keyStorePassword","passwordForKeystore");
    systemProps.put("javax.net.ssl.keyStore","pathToKeystore.ks");
    systemProps.put("javax.net.ssl.trustStore", "pathToTruststore.ts");
    systemProps.put("javax.net.ssl.trustStorePassword","passwordForTrustStore");
    System.setProperties(systemProps);
    ...

আরও জানতে রেডহ্যাট সাইটে বিশদটি দেখুন ।


স্প্রিং বুট, স্প্রিং ক্লাউড মাইক্রোসার্ভেসিস এবং স্ব-স্বাক্ষরিত SSL শংসাপত্রের ক্ষেত্রে একই সমস্যা ছিল। আমি অ্যাপ্লিকেশন.প্রেপার্টিগুলিতে কীস্টোর এবং কীস্টোরপ্যাসওয়ার্ড সেট করতে পেরেছিলাম এবং বাক্সের বাইরে এটির মতো কাজ করতে পেরেছি, তবে ট্রাস্টস্টোর এবং ট্রাস্টস্টোরপাসওয়ার্ডের সাথে এটি করতে ব্যর্থ হয়েছিল। এই উত্তরটি আমার জন্য বিশ্বাসের দোকানের জন্য কাজ করেছিল।
সাথ Šimović

7

( আমার অন্যান্য প্রতিক্রিয়া থেকে পুনরায় পোস্ট
করুন ) আমদানি (এবং বিশ্বাস! ) প্রয়োজনীয় শংসাপত্রের জন্য জাভা সফ্টওয়্যার বিতরণ থেকে ক্লিপ ইউটিলিটি কীটল ব্যবহার করুন

নমুনা:

  1. জলবায়ু পরিবর্তন দির থেকে জেরে বিন পর্যন্ত

  2. কীস্টোর (ফাইল JRE \ bin ডিরেক্টরীতে পাওয়া যায়) চেক করুন
    keytool -list -keystore .. \ liberal এর সংক্ষিপ্ত রূপ \ নিরাপত্তা \ cacerts
    পাসওয়ার্ড changeit

  3. প্রয়োজনীয় সার্ভার থেকে সমস্ত শংসাপত্র চেইনে ডাউনলোড এবং সংরক্ষণ করুন।

  4. শংসাপত্র যুক্ত করুন (ফাইলের "কেবল পঠনযোগ্য" অ্যাট্রিবিউট ".. \ lib \ সুরক্ষা \ cacerts" অপসারণ করার আগে) চালান: কীটোল -লিয়াস REPLACE_TO_ANY_UNIQ_NAME -Import -keystore .. \ lib \ সুরক্ষা \ ক্যাশেটারস-ফাইল "r: \ root.crt "

দুর্ঘটনাক্রমে আমি একটি সহজ টিপ খুঁজে পেয়েছি। অন্যান্য সমাধানগুলির জন্য ইনস্টলকার্ট.জভা এবং জেডিকে ব্যবহার প্রয়োজন

উত্স: http://www.java-sample.com/showtutorial.php?tutorialid=210


6

আমারও একই সমস্যা ছিল এসবিটি নিয়ে
এটি এসএসএল-এর মাধ্যমে repo1.maven.org থেকে নির্ভরতা আনার চেষ্টা করেছে
কিন্তু বলেছে যে এটি "অনুরোধ করা টার্গেট url এর বৈধ শংসাপত্রের পথ খুঁজে পেতে অক্ষম"।
তাই আমি এই পোস্টটি অনুসরণ করেছি এবং এখনও কোনও সংযোগ যাচাই করতে ব্যর্থ হয়েছি ।
তাই আমি এটা সম্পর্কে পড়া এবং দেখা গেছে যে রুট যা নিশ্চিতভাবে ঘটবে যথেষ্ট নয়, যেমন ডাকযোগে প্রস্তাব ছিল, তাই -
জিনিস যে আমার জন্য কাজ কীস্টোর মধ্যে মধ্যবর্তী CA সার্টিফিকেট আমদানি করতে হচ্ছে
আমি চেইনে আসলে সমস্ত শংসাপত্র যুক্ত করেছি এবং এটি একটি কবজির মতো কাজ করেছে।


4

JDK 8 থেকে JDK 10 এ স্থানান্তর করার সময় সমাধান

জেডিকে 10

root@c339504909345:/opt/jdk-minimal/jre/lib/security #  keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 80 entries

জেডিকে ৮

root@c39596768075:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts #  keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 151 entries

ঠিক করার পদক্ষেপ

  • আমি জেডিকে 10 শংসাপত্রটি মুছে ফেলেছি এবং এটি জেডিকে 8 দিয়ে প্রতিস্থাপন করেছি
  • যেহেতু আমি ডকার ইমেজগুলি তৈরি করছি, আমি দ্রুত মাল্টি-স্টেজ বিল্ডগুলি ব্যবহার করে তা করতে পারি
    • আমি ব্যবহার একটি ন্যূনতম JRE নির্মাণ করছি jlinkযেমন/opt/jdk/bin/jlink \ --module-path /opt/jdk/jmods...

সুতরাং, এখানে বিভিন্ন পথ এবং কমান্ডগুলির ক্রম ...

# Java 8
COPY --from=marcellodesales-springboot-builder-jdk8 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts /etc/ssl/certs/java/cacerts

# Java 10
RUN rm -f /opt/jdk-minimal/jre/lib/security/cacerts
RUN ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts

2

আমি www.udemy.com এ (আরইএসটি জাভা ওয়েব সার্ভিসেস) আরআরএসটি ওয়েব পরিষেবাদির একটি টিউটোরিয়ালটিতে কাজ করছি। টিউটোরিয়ালের উদাহরণটিতে বলা হয়েছে যে এসএসএল রাখতে হলে আমাদের অবশ্যই আমাদের গ্রহন "ক্লায়েন্ট" প্রজেক্টে "ট্রাস্ট_স্টোর" নামে একটি ফোল্ডার থাকতে হবে যাতে একটি "কী স্টোর" ফাইল থাকা উচিত (আমাদের কাছে পরিষেবাটিতে কল করার জন্য একটি "ক্লায়েন্ট" প্রকল্প ছিল , এবং "পরিষেবা" প্রকল্পটিতে অন্তর্ভুক্ত রয়েছে আরএসটি ওয়েব পরিষেবা - একই গ্রহন কর্মক্ষেত্রের 2 টি প্রকল্প, একটি ক্লায়েন্ট, অন্য পরিষেবা)। জিনিসগুলি সহজ রাখতে, তারা কাচফিশ অ্যাপ্লিকেশন সার্ভার থেকে "keystore.jks" অনুলিপি করতে বলেছিলেন (গ্লাস ফিশ ma ডোমেনগুলি \ ডোমেন 1 \ কনফিগারেশন \ কীস্টোর.জ্যাকস) আমরা ব্যবহার করছি এবং এই "ট্রাস্ট_স্টোর" ফোল্ডারে রেখেছি যা তারা আমাকে তৈরি করেছিল ক্লায়েন্ট প্রকল্প। এটি বোধগম্য বলে মনে হচ্ছে: সার্ভারে স্ব-স্বাক্ষরিত শংসাপত্রগুলি ' s কী_স্টোর ক্লায়েন্ট ট্রাস্ট_স্টোরের শংসাপত্রের সাথে মিলবে। এখন, এটি করাতে, আমি ত্রুটি পেয়ে যাচ্ছিলাম যে মূল পোস্টটি উল্লেখ করেছে। আমি এটি গুগল করে পড়েছি এবং শুনেছি যে ত্রুটিটি কোনও বিশ্বস্ত / স্বাক্ষরিত শংসাপত্র না থাকা ক্লায়েন্টের "কীস্টোর.জ্যাকস" ফাইলের কারণে, এটি শংসাপত্রটি সন্ধান করে যা স্ব-স্বাক্ষরিত।

বিষয়গুলি পরিষ্কার রাখতে, আমি বলতে পারি যে এটি আমি যেমন বুঝতে পেরেছি, "কীস্টোর.জেক্স" -তে স্ব-স্বাক্ষরিত শংসাপত্র রয়েছে এবং "কেসার্টস.জেक्स" ফাইলটিতে সিএ শংসাপত্র রয়েছে (সিএ স্বাক্ষরিত)। "Keystore.jks" হ'ল "কীস্টোর" এবং "cacerts.jks" হ'ল "বিশ্বাসের দোকান"। যেমন "ব্রুনো", একজন মন্তব্যকারী, উপরে বলেছেন, "কীস্টোর.জক্স" স্থানীয় এবং "cacerts.jks" দূরবর্তী ক্লায়েন্টদের জন্য।

সুতরাং, আমি নিজেকে বলেছিলাম, আরে, গ্লাসফিশের "ক্যাসর্টস.জেक्स" ফাইলও রয়েছে, যা গ্লাসফিশের ভরস_তার দোকান ফাইল। cacerts.jsk এ CA শংসাপত্র থাকার কথা। এবং আপাতদৃষ্টিতে আমার কাছে একটি মূল স্টোর ফাইল থাকতে কমপক্ষে একটি সিএ শংসাপত্র থাকতে আমার বিশ্বাসের_স্টোর ফোল্ডারটি দরকার। সুতরাং, আমি আমার ক্লায়েন্ট প্রজেক্টে তৈরি "trust_store" ফোল্ডারে "cacerts.jks" ফাইলটি স্থাপন করার চেষ্টা করেছি এবং ভিএম বৈশিষ্ট্যগুলিকে "কীস্টোর.জ্যাকস" এর পরিবর্তে "cacerts.jks" নির্দেশ করতে চাইছি। যা ত্রুটি থেকে মুক্তি পেয়েছে। আমার ধারণা, এটির জন্য সিএ সার্টের দরকার ছিল।

এটি উত্পাদন, বা এমনকি কিছু কাজ পাওয়ার বাইরেও উন্নয়নের জন্য আদর্শ হতে পারে না। উদাহরণস্বরূপ আপনি ক্লায়েন্টের "keystore.jks" ফাইলটিতে CA সার্টিফিকেট যুক্ত করতে সম্ভবত "keytool" কমান্ডটি ব্যবহার করতে পারেন। তবে যাইহোক আশা করি এটি কমপক্ষে সম্ভাব্য পরিস্থিতিগুলিকে সঙ্কুচিত করে যা এখানে সমস্যা হতে পারে।

ALSO: আমার পদ্ধতির বিষয়টি ক্লায়েন্টের জন্য দরকারী বলে মনে হয়েছে (ক্লায়েন্ট বিশ্বাস_পরিষদে সার্ভারের শংসাপত্র যুক্ত হয়েছে), মনে হচ্ছে মূল পোস্টটি সমাধান করার জন্য উপরের মন্তব্যগুলি সার্ভারের জন্য দরকারী (ক্লায়েন্ট শংসাপত্রটি সার্ভারের ট্রাস্ট_স্টোরে যুক্ত হয়েছে)। চিয়ার্স।

গ্রহন প্রকল্পের সেটআপ:

  • MyClientProject
  • src
  • পরীক্ষা
  • জেআরই সিস্টেম লাইব্রেরি
  • ...
  • trust_store
    --- cacerts.jks --- keystore.jks

মাই ক্লায়েন্টপ্রজেক্ট.জাভা ফাইল থেকে স্নিপেট:

static {
  // Setup the trustStore location and password
  System.setProperty("javax.net.ssl.trustStore","trust_store/cacerts.jks");
  // comment out below line
  System.setProperty("javax.net.ssl.trustStore","trust_store/keystore.jks");
  System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
  //System.setProperty("javax.net.debug", "all");

  // for localhost testing only
  javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
        public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
          return hostname.equals("localhost");
        }

  });
}

1

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


1

আমার ক্ষেত্রে আমি সমস্যার মুখোমুখি হয়েছি কারণ আমার টমক্যাট প্রক্রিয়ায় নির্দিষ্ট কীস্টোর ব্যবহারের ব্যবস্থা করা হয়েছিল

-Djavax.net.ssl.trustStore=/pathtosomeselfsignedstore/truststore.jks

আমি জেআরই / লিব / সুরক্ষার ক্যাশিয়ার্টে শংসাপত্রটি আমদানি করছিলাম এবং পরিবর্তনগুলি প্রতিফলিত হচ্ছে না। তারপরে আমি নীচে কমান্ডটি করেছি যেখানে /tmp/cert1.test লক্ষ্য সার্ভারের শংসাপত্র রয়েছে

keytool -import -trustcacerts -keystore /pathtosomeselfsignedstore/truststore.jks -storepass password123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test

শংসাপত্র আমদানি সফল কিনা তা আমরা দ্বিগুণ পরীক্ষা করতে পারি

keytool -list -v -keystore /pathtosomeselfsignedstore/truststore.jks

এবং দেখুন আপনার ট্যাগেট সার্ভারটি ওরফে রেপড্যাসেল-মাইজারের বিপরীতে পাওয়া গেছে কিনা


0

ফাইল $JAVA_HOME/lib/security/cacertsউপস্থিত কিনা তা পরীক্ষা করুন ! আমার ক্ষেত্রে এটি কোনও ফাইল ছিল না তবে একটি লিঙ্ক ছিল /etc/ssl/certs/java/cacertsএবং এটি নিজেই একটি লিঙ্ক ছিল (WHAT ???) তাই এর কারণে জেভিএম ফাইলটি খুঁজে পায় না।

সমাধান: আসল কেসার্টস ফাইলটি ( আপনি অন্য জেডিকে থেকে এটি করতে পারেন ) /etc/ssl/certs/java/ডিরেক্টরিতে অনুলিপি করুন এবং এটি আপনার সমস্যার সমাধান করবে :)


প্রকৃতপক্ষে জেডিকে একটি লিঙ্ক বজায় রেখেছে এবং সম্ভবত পুরানো এপিআই, এসডিকেগুলির সাথে সামঞ্জস্যের জন্য ... আমি সফলভাবে এটি করতে পেরেছি ... আমি জেডিকে 8 থেকে জেডিকে 10 এ যাচ্ছি এবং ডকার ব্যবহার করছি যাতে আমার কেবল একটি থেকে সিসার্টগুলি অনুলিপি করা দরকার অন্যটির কাছে চিত্র ... আমি লিঙ্কটি তৈরি করেছি এবং ঠিক একইভাবে ...rm -f /opt/jdk-minimal/jre/lib/security/cacerts ; ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts
মার্সেলো ডি বিক্রয়

-9

আপনি যদি pom.xML এ p {JAVA_HOME like এর মতো ক্লাসপাথ ভেরিয়েবল ব্যবহার করছেন তবে বলুন।

<target>
                    <property name="compile_classpath" refid="maven.compile.classpath"/>
                    <property name="runtime_classpath" refid="maven.runtime.classpath"/>
                    <property name="test_classpath" refid="maven.test.classpath"/>
                    <property name="plugin_classpath" refid="maven.plugin.classpath"/>
                    <property name="jaxb-api.jar" value="${maven.dependency.javax.xml.bind.jaxb-api.jar.path}"/>
                    <property name="project_home" value="${PROJECT_HOME}"/>
                    <property name="java_home" value="${JAVA_HOME}"/>
                    <property name="ant_home" value="${ANT_HOME}"/>
                    <property name="common_home" value="${COMMON_HOME}"/>
                    <property name="JAXP_HOME" value="${common_home}/lib"/>
                    <property name="ejfw_home" value="${PROJECT_HOME}/lib"/>
                    <property name="weblogic_home" value="${WL_HOME}"/>
                    <property name="fw_home" value="${FW_HOME}"/>
                    <property name="env" value="${BUILDENV}"/>
                    <property name="tokenfile" value="${BUILDENV}${BUILDENV_S2S}.properties"/>

লক্ষ্যে ক্লাসপথ ভেরিয়েবল যুক্ত করুন। অর্থাত্ .., -DANT_Home, -DJAVA_HOME

clean install -e -DPROJECT_HOME=..... -DANT_HOME=C:\bea1036\modules\org.apache.ant_1.7.1 -DJAVA_HOME=C:\bea1036\jdk160_31

1
শ্রেণীর পাথ এবং শংসাপত্রগুলির একে অপরের সাথে কিছুই করার নেই।
লার্নের মারকুইস

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