জাভা: sun.security.provider.certpath.SunCertPathBuilderException: অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পেতে ব্যর্থ


248

আমার একটি ক্লাস রয়েছে যা একটি https সার্ভার থেকে একটি ফাইল ডাউনলোড করবে । আমি যখন এটি চালাব, এটি অনেক ত্রুটি ফিরে আসে। দেখে মনে হচ্ছে আমার শংসাপত্র নিয়ে আমার সমস্যা আছে। ক্লায়েন্ট-সার্ভার প্রমাণীকরণ উপেক্ষা করা কি সম্ভব? যদি তাই হয়, কিভাবে?

package com.da;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.IOControl;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.client.methods.AsyncCharConsumer;
import org.apache.http.nio.client.methods.HttpAsyncGet;
import org.apache.http.nio.client.methods.HttpAsyncPost;

public class RSDDownloadFile {
    static FileOutputStream fos;

    public void DownloadFile(String URI, String Request) throws Exception
    {
        java.net.URI uri = URIUtils.createURI("https", "176.66.3.69:6443", -1, "download.aspx",
                "Lang=EN&AuthToken=package", null);
        System.out.println("URI Query: " + uri.toString());

        HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
        httpclient.start();
        try {
            Future<Boolean> future = httpclient.execute(
                    new HttpAsyncGet(uri),
                    new ResponseCallback(), null);

            Boolean result = future.get();
            if (result != null && result.booleanValue()) {
                System.out.println("\nRequest successfully executed");
            } else {
                System.out.println("Request failed");
            }              
        } 
        catch(Exception e){
            System.out.println("[DownloadFile] Exception: " + e.getMessage());
        }
        finally {
            System.out.println("Shutting down");
            httpclient.shutdown();
        }
        System.out.println("Done");  

    }

    static class ResponseCallback extends AsyncCharConsumer<Boolean> {

        @Override
        protected void onResponseReceived(final HttpResponse response) {
             System.out.println("Response: " + response.getStatusLine());
             System.out.println("Header: " + response.toString());
             try {   
                 //if(response.getStatusLine().getStatusCode()==200)
                     fos = new FileOutputStream( "Response.html" );
             }catch(Exception e){
                 System.out.println("[onResponseReceived] Exception: " + e.getMessage());
             }
        }

        @Override
        protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
            try
            {
                while (buf.hasRemaining()) 
                {
                    //System.out.print(buf.get());
                    fos.write(buf.get());
                }
            }catch(Exception e)
            {
                System.out.println("[onCharReceived] Exception: " + e.getMessage());
            }
        }

        @Override
        protected void onCleanup() {
            try
            {             
                if(fos!=null)
                    fos.close();
            }catch(Exception e){
                System.out.println("[onCleanup] Exception: " + e.getMessage());         
            }
             System.out.println("onCleanup()");
        }

        @Override
        protected Boolean buildResult() {
            return Boolean.TRUE;
        }

    }
}

ত্রুটি:

URI Query: https://176.66.3.69:6443/download.aspx?Lang=EN&AuthToken=package
Aug 2, 2011 3:47:57 PM org.apache.http.impl.nio.client.NHttpClientProtocolHandler exception
SEVERE: I/O error: General SSLEngine problem
javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source)
    at javax.net.ssl.SSLEngine.wrap(Unknown Source)
    at org.apache.http.impl.nio.reactor.SSLIOSession.doHandshake(SSLIOSession.java:154)
    at org.apache.http.impl.nio.reactor.SSLIOSession.isAppInputReady(SSLIOSession.java:276)
    at org.apache.http.impl.nio.client.InternalClientEventDispatch.inputReady(InternalClientEventDispatch.java:79)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:161)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:335)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:275)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:542)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.fatal(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.net.ssl.internal.ssl.Handshaker$DelegatedTask.run(Unknown Source)
    at org.apache.http.impl.nio.reactor.SSLIOSession.doHandshake(SSLIOSession.java:180)
    ... 9 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 com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(Unknown Source)
    ... 16 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)
    ... 21 more
onCleanup()

[DownloadFile] Exception: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
Shutting down
Done

2
একসময় আমি এই ত্রুটি পেয়েছিলাম এবং আমাদের সুরক্ষা দলের সাথে যোগাযোগ করেছি এবং এটি প্রমাণিত হয়েছে যে আমরা যে জেআর ব্যবহার করছি তা আমাকে প্যাচ করতে হয়েছিল, কারণ আমাদের দলটি কোম্পানির দেওয়া পুরানো একটি ব্যবহার করছিল। অন্য যে কেউ একই পরিস্থিতিতে থাকতে পারে কেবলমাত্র একটি FYI।
kayleeFrye_onDeck

উত্তর:


215

সমস্যাটি উপস্থিত হয় যখন আপনার সার্ভারে স্ব স্ব স্বাক্ষরযুক্ত শংসাপত্র থাকে। এটি কার্যকর করার জন্য আপনি আপনার JVM এর বিশ্বস্ত শংসাপত্রগুলির তালিকাতে এই শংসাপত্রটি যুক্ত করতে পারেন।

এই নিবন্ধে লেখক বর্ণনা করেছেন যে কীভাবে আপনার ব্রাউজার থেকে শংসাপত্র আনতে হবে এবং এটি আপনার জেভিএমের ক্যাচার্টস ফাইলে যুক্ত করা যায়। আপনি হয় JAVA_HOME/jre/lib/security/cacertsফাইল সম্পাদনা করতে পারেন বা -Djavax.net.ssl.trustStoreপ্যারামিটার দিয়ে অ্যাপ্লিকেশন চালাতে পারেন । আপনি যে কোন জেডিকে / জেআরই ব্যবহার করছেন তা যাচাই করুন কারণ এটি প্রায়শই বিভ্রান্তির কারণ হয়ে থাকে।

আরও দেখুন: এসএসএল শংসাপত্রের সার্ভারের নামগুলি কীভাবে সমাধান করা হয় / কীটল ব্যবহার করে আমি বিকল্প নাম যুক্ত করতে পারি? আপনি যদি java.security.cert.CertificateException: No name matching localhost foundব্যতিক্রম চালানো ।


3
এটি আমার পক্ষে কাজ করেনি। আমি রুট এবং চেইন সার্টিটি ইনস্টল করেছি, তবে টমক্যাট -7 এখনও "অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথটি খুঁজে পেতে অক্ষম" এর কারণে বৈধতা প্রাপ্তির রিপোর্ট করে যা এই ডিবাগ করার কোনও উপায়?
চেরুভিম

সমস্যাটি বিশ্বাসযোগ্য নয় এমন অন্য কেউ দ্বারা স্বাক্ষরিত শংসাপত্রের সাথেও উপস্থিত হয়।
লার্নের মারকুইস

গ্রেট! এটি কাজ করে! কেবল ভুলে যাবেন না যে আপনি জেরে এবং জেডিকে উভয়ই থাকতে পারতেন এবং তাদের উভয়ই cacertsআপডেট করতে হবে
Dima Fomin

আমার ক্ষেত্রে, মূল সিএ ছিল তবে পরবর্তী সিএ ছিল না। পরবর্তী সিএ যোগ করার কৌশলটি কমেছে - ধন্যবাদ।
জাভা-আসক্তি 301

1
আমার ক্ষেত্রে, আমি নেটবিয়ানস + অ্যাপাচি টমক্যাট (সংহত) ব্যবহার করছি, সুতরাং, জেডি কে / জেআর (সি: \ প্রোগ্রাম ফাইলস \ জাভা \ jdk1.8.0_152 \ জেআর \ লিব on) এর উপর "विश्वासের স্টোর" ক্যাটার্টসের জন্য .cer যুক্ত করছি adding সুরক্ষা) এবং জে (সি: \ প্রোগ্রাম ফাইল \ জাভা \ jre1.8.0_91 b lib \ সুরক্ষা) আমার জন্য কাজ করে
Jnn

149

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

openssl x509 -in <(openssl s_client -connect example.com:443 -prexit 2>/dev/null) -out ~/example.crt
sudo keytool -importcert -file ~/example.crt -alias example -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -storepass changeit

3
আমার জন্য কাজ করে কেন? আপনার একটি ব্যাখ্যা সরবরাহ করা প্রয়োজন।
লার্নের মারকুইস

ওপেনএসএল x509-ইন <(ওপেনসেল এস_ক্লিয়েন্ট-সংযোগ উদাহরণ ডটকম ।:৪৪৪ -প্রেক্সিট 2> / ডিভ / নাল) -আউট example / example.crt - কমান্ডটিতে আমার কী। যে এখানে ??
বিষ্ণু রাঙ্গানাথন

3
.crt এবং .pem একই ফাইল ফর্ম্যাটের জন্য সাধারণত ফাইল এক্সটেনশন ব্যবহৃত হয়। আপনার যদি ইতিমধ্যে ফাইলটি থাকে তবে কেবল দ্বিতীয় কমান্ডটি চালান এবং এটি-ফাইল যুক্তিতে প্রেরণ করুন।
গ্যাব মার্টিন-ড্যাম্পেসি

1
দুর্দান্ত জিনিস। কেবলমাত্র এটি হ'ল: আমাকে কোনও কারণে সর্বশেষ ওপেনসেল ০.০.এক্সএক্স ব্যবহার করতে হয়েছিল, পুরানো 9.X.Xx কাজ করছে না।
zbstof

1
এটি এসএনআই শেষ পয়েন্টের সাথে কাজ করে না। সেক্ষেত্রে আপনাকে যুক্ত করতে হবে: সার্টিফিকেট আনার সময় সার্ভারনেম উদাহরণ.কম
প্যাট্রিক বেক

46

সিমানটেকের বৈধ স্বাক্ষরিত ওয়াইল্ডকার্ড শংসাপত্র নিয়ে আমার একই সমস্যা ছিল।

প্রথমে আপনার জাভা অ্যাপ্লিকেশনটি -Djavax.net.debug = SSL- এর সাথে চালানোর চেষ্টা করুন যা আসলে চলছে তা দেখার জন্য see

আমি মধ্যবর্তী শংসাপত্রটি আমদানি শেষ করেছি যা শংসাপত্রের চেইনটি ভেঙে দেয়।

আমি সিম্যানটেক থেকে নিখোঁজ ইন্টারমিডিয়েট সার্টিটি ডাউনলোড করেছি (আপনি এসএসএল হ্যান্ডশেক লগটিতে অনুপস্থিত সার্টিফিকেটের ডাউনলোড লিঙ্কটি দেখতে পাচ্ছেন: http ://sv پرنl-g3-aia.verisign.com/SVRIntlG3.cer আমার ক্ষেত্রে)

এবং আমি জাভা কীস্টোরে শংসাপত্রটি আমদানি করেছি। মধ্যবর্তী শংসাপত্র আমদানির পরে আমার ওয়াইল্ডকার্ড এসএসএল শংসাপত্র অবশেষে কাজ শুরু করেছে:

keytool -import -keystore ../jre/lib/security/cacerts -trustcacerts -alias "VeriSign Class 3 International Server CA - G3" -file /pathto/SVRIntlG3.cer


2
বিভ্রান্তি এড়াতে, লগগুলিতে দূরবর্তী "শংসাপত্র শৃঙ্খলা" দেখতে ডিবাগ প্যারামিটার সহ জাভা (বা জ্যাকুরল) চালান, তারপরে ট্রাস্টস্টোরের "সিএন" কে গ্র্যাপ করুন নিম্নরূপে (ডিফল্টের পরিবর্তে) পাস করা হয়েছে, যদি উপস্থিত না থাকে তবে আপনাকে যুক্ত করতে হবে। ssllabs.com/ssltest/analyze.html সার্ভার সাইড শংসাপত্রগুলিতে অসম্পূর্ণ চেইন রয়েছে কিনা তা দেখানো হবে এবং এর মধ্যে অন্তর্বর্তী শংসাপত্রের পাথ শংসাপত্র যুক্ত করা দরকার। -Djavax.net.debug=ssl,handshake -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStore=our-client-certs -Djavax.net.ssl.trustStoreType=jks -Djavax.net.ssl.trustStore=their-server-certs
কিসনা

এবং, অবশ্যই, এসএসএল সমস্যাগুলি ডিবাগ করার জন্য সরকারী নিবন্ধ: ডকস.ওরকল / জ্যাভেস
কিসনা 4'17

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

41
  1. ফায়ারফক্স ব্যবহার করে SSL শংসাপত্র রফতানি করুন। আপনি ব্রাউজারে ইউআরএল হিট করে এটি রপ্তানি করতে পারেন এবং তারপরে শংসাপত্রটি রফতানির জন্য বিকল্পটি নির্বাচন করতে পারেন। আসুন ধরে নেওয়া যাক যে সার্টিফিকেট ফাইলটির নাম আপনার. ssl.server.name.crt
  2. আপনার JRE_HOME/binবা যানJDK/JRE/bin
  3. কমান্ড টাইপ করুন
  4. keytool -keystore ..\lib\security\cacerts -import -alias your.ssl.server.name -file .\relative-path-to-cert-file\your.ssl.server.name.crt
  5. আপনার জাভা প্রক্রিয়া পুনরায় চালু করুন

13
যদি একটি পাসওয়ার্ড জানতে চাওয়া, ডিফল্ট cacerts কীস্টোর পাসওয়ার্ড ব্যবহার changeit( stackoverflow.com/a/22782035/1304830 )। অ্যাডমিনিস্ট্রেটর হিসাবে সেন্টিমিডি চালাতে ভুলবেন না।
Fr4nz

22

@ গাবে মার্টিন-ড্যাম্পেসির উত্তর আমার পক্ষে সহায়ক। এবং আমি এটি সম্পর্কিত একটি ছোট স্ক্রিপ্ট লিখেছি। ব্যবহার খুব সহজ।

হোস্ট থেকে একটি শংসাপত্র ইনস্টল করুন:

> sudo ./java-cert-importer.sh example.com

ইতিমধ্যে ইনস্টল করা শংসাপত্রটি সরান।

> sudo ./java-cert-importer.sh example.com --delete

java-cert-importer.sh

#!/usr/bin/env bash

# Exit on error
set -e

# Ensure script is running as root
if [ "$EUID" -ne 0 ]
  then echo "WARN: Please run as root (sudo)"
  exit 1
fi

# Check required commands
command -v openssl >/dev/null 2>&1 || { echo "Required command 'openssl' not installed. Aborting." >&2; exit 1; }
command -v keytool >/dev/null 2>&1 || { echo "Required command 'keytool' not installed. Aborting." >&2; exit 1; }

# Get command line args
host=$1; port=${2:-443}; deleteCmd=${3:-${2}}

# Check host argument
if [ ! ${host} ]; then
cat << EOF
Please enter required parameter(s)

usage:  ./java-cert-importer.sh <host> [ <port> | default=443 ] [ -d | --delete ]

EOF
exit 1
fi;

if [ "$JAVA_HOME" ]; then
    javahome=${JAVA_HOME}
elif [[ "$OSTYPE" == "linux-gnu" ]]; then # Linux
    javahome=$(readlink -f $(which java) | sed "s:bin/java::")
elif [[ "$OSTYPE" == "darwin"* ]]; then # Mac OS X
    javahome="$(/usr/libexec/java_home)/jre"
fi

if [ ! "$javahome" ]; then
    echo "WARN: Java home cannot be found."
    exit 1
elif [ ! -d "$javahome" ]; then
    echo "WARN: Detected Java home does not exists: $javahome"
    exit 1
fi

echo "Detected Java Home: $javahome"

# Set cacerts file path
cacertspath=${javahome}/lib/security/cacerts
cacertsbackup="${cacertspath}.$$.backup"

if ( [ "$deleteCmd" == "-d" ] || [ "$deleteCmd" == "--delete" ] ); then
    sudo keytool -delete -alias ${host} -keystore ${cacertspath} -storepass changeit
    echo "Certificate is deleted for ${host}"
    exit 0
fi

# Get host info from user
#read -p "Enter server host (E.g. example.com) : " host
#read -p "Enter server port (Default 443) : " port

# create temp file
tmpfile="/tmp/${host}.$$.crt"

# Create java cacerts backup file
cp ${cacertspath} ${cacertsbackup}

echo "Java CaCerts Backup: ${cacertsbackup}"

# Get certificate from speficied host
openssl x509 -in <(openssl s_client -connect ${host}:${port} -prexit 2>/dev/null) -out ${tmpfile}

# Import certificate into java cacerts file
sudo keytool -importcert -file ${tmpfile} -alias ${host} -keystore ${cacertspath} -storepass changeit

# Remove temp certificate file
rm ${tmpfile}

# Check certificate alias name (same with host) that imported successfully
result=$(keytool -list -v -keystore ${cacertspath} -storepass changeit | grep "Alias name: ${host}")

# Show results to user
if [ "$result" ]; then
    echo "Success: Certificate is imported to java cacerts for ${host}";
else
    echo "Error: Something went wrong";
fi;

নির্দোষভাবে কাজ করে। দারূন কাজ! । এটি এইভাবে কাজ করে: আপনার এসএসএল পরিষেবাটি চালু করুন (যদি এটি চলমান না থাকে), এবং বর্ণিত কমান্ডটি কার্যকর করুন (যেমন ./java-cert-importer.sh example.com 1234)। এটাই.
লিপ

1
দুর্দান্ত কাজ করে। আমি কোনও জেনকিন্স সার্ভারে একটি বাহ্যিক এপিআইয়ের সাথে সংযোগ করার সময় ত্রুটি পেয়েছিলাম যা তার শংসাপত্রটি পরিবর্তন করে এবং আমার বিল্টগুলি ব্যর্থ করে। এটি আমার সমস্যা সমাধান করে
user9869932

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

17

আর অনুরোধ করা হচ্ছে না 'অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পেতে পারছি না'

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

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

মূলত, আপনি আপনার বিশ্বস্ত শংসাপত্রগুলি দিয়ে সার্ভারের শংসাপত্রটি কীস্টোরের সাথে যুক্ত করতে চান

সেখানে প্রদত্ত কোডটি চেষ্টা করে দেখুন। এটি সাহায্য করতে পারে।


5
"শংসাপত্রের বৈধতা এসএসএল সুরক্ষার একটি খুব গুরুত্বপূর্ণ অংশ" সম্পর্কে অংশটি অগত্যা সত্য নয়। এসএসএল আপনাকে দুটি আশ্বাস দেয়: (1) আপনার যোগাযোগটি ব্যক্তিগত এবং আপনি (2) যে আপনি এমন একটি সার্ভারের সাথে কথা বলছেন যা এনএসএ-তে পরিচিত known (:-) কখনও কখনও আপনি কেবল কথোপকথনের গোপনীয়তার বিষয়ে যত্নশীল হন এবং তারপরে একটি স্ব-স্বাক্ষরিত শংসাপত্র জরিমানা। সামাজিক-
biz.org/2011/10/16/the-anti-ssl-consp

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

@ এজেপি সম্মত হন যে আপনি যদি ক্লায়েন্ট শংসাপত্র ব্যবহার করেন তবে আপনি প্রমাণীকরণ পেতে পারেন এবং আমি মনে করি অনুমোদনের সম্ভাবনা রয়েছে ... তবে বেশিরভাগ ব্যবহার ক্লায়েন্ট শংসাপত্রের সাথে নয়। "স্ব-স্বাক্ষরিত" শংসাপত্র এবং একটি স্বাক্ষরকারী কর্তৃপক্ষের শংসাপত্রের মধ্যে পার্থক্যটিকে আপনি কী বলবেন? স্বাক্ষরকারী কর্তৃপক্ষ "সততা" দেয়। এনএসএ সম্পর্কে আমার রসিকতা হ'ল সমস্ত স্বাক্ষরকারী কর্তৃপক্ষ সব কিছু থেকে স্বতন্ত্রভাবে গ্যারান্টি দিতে পারে না। ভৌতিক সত্য নয়, তবে মূল বিষয়টি হচ্ছে আপনার শংসাপত্রটি কেবল গোপনীয় হিসাবে স্বাক্ষরকারী কর্তৃপক্ষ এটি তৈরি করতে পারে। স্ব-স্বাক্ষর করা আরও গোপন হতে পারে।
AgilePro

@AgilePro একটি ব্যবহার সার্ভার শংসাপত্র সার্ভার পরিচয় প্রমাণিত করে হয় প্রয়োজনীয় জন্য RFC 2246. উল্লেখ সার্টিফিকেট সব গোপন নয়, SSL সুরক্ষিত করতে | তাই আপনার মন্তব্যের বাকি কোন মানে নেই।
লার্নের মারকুইস

6

এটি আমার সমস্যার সমাধান করেছে,

আমাদের স্থানীয় জাভাতে শংসাপত্রটি আমদানি করতে হবে। যদি না হয় তবে আমরা নীচের ব্যতিক্রমটি পেতে পারি।

    javax.net.ssl.SSL.andLLandSandException: sun.security. লাডিয়েটার.ভিডিয়েটার ধারণা
        সূর্য.সিকিউরিটি.এসএল.এলার্টস.জেট এসএসএলএক্সেপশন (সতর্কতা.জভা ১৯:২২)
        সূর্য.সিকিউরিটি.এসএসএল এসএসএসএসকেটস আইএমপিএল.ফ্যাটাল (এসএসএলসকেটআইম্পল.জভা ১৯৯৯৯)
        সূর্য.সিকিউরিটি.এসএল.হান্দশেকার.ফ্যাটালএসই (হ্যান্ডশেকার.জভা:30:30)

SSLPOKE একটি সরঞ্জাম যেখানে আপনি নিজের স্থানীয় মেশিন থেকে https সংযোগ পরীক্ষা করতে পারেন।

সংযোগটি পরীক্ষা করার আদেশ:

"%JAVA_HOME%/bin/java" SSLPoke <hostname> 443
    সূর্য.সিকিউরিটি.অলয়েডেটর.ভ্যালিডেটর এক্সসেপশন: পিকেআইএক্স পথের বিল্ডিং ব্যর্থ হয়েছে: 
    sun.security.provider.certpath.SunCertPathBuilderException: অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পেতে ব্যর্থ
        সূর্য.সিকিউরিটি.অডিয়্যালিটার.পিকেএক্সভিডিয়েটার.ডুবিল্ড (পিকেএক্সভিলিয়েটার.জভা ৩8787))
        সূর্য.সিকিউরিটি.অডিয়ালিটার.পিকেএক্সভিলিডেটর.এজিনভ্যালিডেট (পিকেএক্সভিলিডেটর.জভা ২৯২২)
        সূর্য.সিকিউরিটি.অলডিয়েটার.ভালিডেটর.এলিয়েটেড (ভ্যালিডেটর.জভা অ্যাকশন 60)
        সূর্য.সিকিউরিটি.এসএল। এক্স 509 ট্রাস্ট ম্যানেজারআইএমপিএল.এলডেট (এক্স 509 ট্রাস্টম্যানেজারআইএমপিএল.জাভা ৩৪২৪)
        সূর্যের দিকে।
        সূর্য.সিকিউরিটি.এসএল.এক্স509 ট্রাস্টম্যানেজারআইএমপিএল.চেক সার্ভারট্রাস্টেড (এক্স 509 ট্রাস্টম্যানেজারআইএমপিএল.জভা অনুচ্ছেদ 24)
        সূর্য.সিকিউরিটি.এসএসএল.ক্লিয়েন্টহ্যান্ডশেকার.সুরভার সার্টিফিকেট (ক্লায়েন্টহ্যান্ডশেকার.জভা 1496)
        সূর্য.সিকিউরিটি.এসএল.ক্লায়েন্টহ্যান্ডশেকার.প্রসেসমেসেজ (ক্লায়েন্টহ্যান্ডশেকার.জভা রাইটার্স 16)
        সূর্য.সিকিউরিটি.এসএল.হান্দশেকার.প্রসেসলুপ (হ্যান্ডশেকার.জভা ১০০২26)
        সূর্য.সিকিউরিটি.এসএল.হান্ডশেকার.প্রসেস_রেকার্ড (হ্যান্ডশেকার.জভা: ৯61১)
        সূর্য.সিকিউরিটি.এসএসএল এসএসএসস্কটআইপল.ড্রেড রেকর্ডে (এসএসএলসকেটআইম্পল.জভা ১০.০২২)
        সূর্য.সিকিউরিটি.এসএসএল এসএসএসস্কটআইপ্লি.কমফর্ম ইনটিটিয়াল হ্যান্ডশাকে (এসএসএলসকেটআইম্প্লি.জভা ১৩7575)
        সূর্য.সিকিউরিটি.এসএসএল এসএসএসস্কটআইপল.উইরাইট রেকর্ড (এসএসএলসকেটআইম্পল.জভা: 7774)
        সূর্য.সিকিউরিটি.এসএসএল.অপআউটপুটস্ট্রিম.উইরাইটে (অ্যাপআউটপুটস্ট্রিম.জভা 23 23)
        সূর্যের দিকে।
        এসএসএলপোক.মেনে (এসএসএলপোক.জাভা :31১)
    কারণ: sun.security.provider.certpath.SunCertPathBuilderException: এর বৈধ শংসাপত্রের পথটি খুঁজে পেতে অক্ষম 
    অনুরোধ লক্ষ্য
        সূর্য.সিকিউরিটি.প্রোভাইডার.সেটপাথ.সুনকার্টপথবিল্ডার.বিল্ড (সানকার্টপথবিল্ডার.জভা ১৪:১১)
        সূর্য.সিকিউরিটি.প্রোভাইডার.সেটপাথ.সুনকার্টপথবিল্ডার.ইঞ্জিন বিল্ড (সানকার্টপাথবিল্ডার.জভা १२:২6)
        জাভা.সিকিউরিটি.সার্ট.সেটপথবিল্ডার.বিল্ডে (সার্টপথবিল্ডার.জভা রাইটস 80)
        সূর্য.সিকিউরিটি.অডিয়্যালিটার.পিকেএক্সভিডিয়েটার.ডোবিল্ড (পিকেএক্সভিলিডেটর.জভা ৩৩৮২)
        ... আরও 15
keytool -import -alias <anyname> -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file <cert path>

এটি প্রথমে "কীস্টোর পাসওয়ার্ড লিখুন:" changeitকে অনুরোধ করবে ডিফল্ট পাসওয়ার্ড। এবং অবশেষে একটি প্রম্পট "এই শংসাপত্রের উপর বিশ্বাস রাখবেন? [না]:", কীস্টোরের শংসাপত্রটি যুক্ত করতে "হ্যাঁ" সরবরাহ করুন।

Verfication:

C:\tools>"%JAVA_HOME%/bin/java" SSLPoke <hostname> 443
Successfully connected    

5

আমি এটি কেবল কোড দিয়ে কাজ করতে সক্ষম হয়েছি, অর্থাৎ কীটোল ব্যবহার করার দরকার নেই:

import com.netflix.config.DynamicBooleanProperty;
import com.netflix.config.DynamicIntProperty;
import com.netflix.config.DynamicPropertyFactory;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.impl.nio.reactor.IOReactorConfig;
import org.apache.http.nio.conn.NoopIOSessionStrategy;
import org.apache.http.nio.conn.SchemeIOSessionStrategy;
import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class Test
{
    private static final DynamicIntProperty MAX_TOTAL_CONNECTIONS = DynamicPropertyFactory.getInstance().getIntProperty("X.total.connections", 40);
    private static final DynamicIntProperty ROUTE_CONNECTIONS = DynamicPropertyFactory.getInstance().getIntProperty("X.total.connections", 40);
    private static final DynamicIntProperty CONNECT_TIMEOUT = DynamicPropertyFactory.getInstance().getIntProperty("X.connect.timeout", 60000);
    private static final DynamicIntProperty SOCKET_TIMEOUT = DynamicPropertyFactory.getInstance().getIntProperty("X.socket.timeout", -1);
    private static final DynamicIntProperty CONNECTION_REQUEST_TIMEOUT = DynamicPropertyFactory.getInstance().getIntProperty("X.connectionrequest.timeout", 60000);
    private static final DynamicBooleanProperty STALE_CONNECTION_CHECK = DynamicPropertyFactory.getInstance().getBooleanProperty("X.checkconnection", true);

    public static void main(String[] args) throws Exception
    {

        SSLContext sslcontext = SSLContexts.custom()
                .useTLS()
                .loadTrustMaterial(null, new TrustStrategy()
                {
                    @Override
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException
                    {
                        return true;
                    }
                })
                .build();
        SSLIOSessionStrategy sslSessionStrategy = new SSLIOSessionStrategy(sslcontext, new AllowAll());

        Registry<SchemeIOSessionStrategy> sessionStrategyRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
                .register("http", NoopIOSessionStrategy.INSTANCE)
                .register("https", sslSessionStrategy)
                .build();

        DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(IOReactorConfig.DEFAULT);
        PoolingNHttpClientConnectionManager connectionManager = new PoolingNHttpClientConnectionManager(ioReactor, sessionStrategyRegistry);
        connectionManager.setMaxTotal(MAX_TOTAL_CONNECTIONS.get());
        connectionManager.setDefaultMaxPerRoute(ROUTE_CONNECTIONS.get());

        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(SOCKET_TIMEOUT.get())
                .setConnectTimeout(CONNECT_TIMEOUT.get())
                .setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT.get())
                .setStaleConnectionCheckEnabled(STALE_CONNECTION_CHECK.get())
                .build();

        CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom()
                .setSSLStrategy(sslSessionStrategy)
                .setConnectionManager(connectionManager)
                .setDefaultRequestConfig(requestConfig)
                .build();

        httpClient.start();

        // use httpClient...
    }

    private static class AllowAll implements X509HostnameVerifier
    {
        @Override
        public void verify(String s, SSLSocket sslSocket) throws IOException
        {}

        @Override
        public void verify(String s, X509Certificate x509Certificate) throws SSLException {}

        @Override
        public void verify(String s, String[] strings, String[] strings2) throws SSLException
        {}

        @Override
        public boolean verify(String s, SSLSession sslSession)
        {
            return true;
        }
    }
}

1
বিটিডব্লিউ, আমি পোস্টসিএসসিলেট ব্যবহার করছি: 4.0.1
জোনাস বার্গস্ট্রোম

আমার অনুরূপ কিছু দরকার, @ জোনাসবার্গস্ট্রোম, এসএসএল কনটেক্সট সহ আপনার সমাধানটি অনেক সহায়তা করে।
এন্টারএসবি

8
নোট করুন যে এই সমাধানটি অনিরাপদ।
লার্নের মারকুইস

ধন্যবাদ জোনাস, আপনার সমাধান সমস্যার সমাধান করে। তবে আমি দেখতে পেয়েছি যে প্রথম সংযোগটি তৈরি করতে খুব দীর্ঘ সময় (3 - 5s) খরচ হয়, তার পরে প্রতিটি সংযোগের জন্য কেবল 300-400 এমএস প্রয়োজন।
twcai

5

আমার অ্যাপাচি ২.৪ উদাহরণে এই ত্রুটির উত্স (একটি কমোডো ওয়াইল্ডকার্ড শংসাপত্র ব্যবহার করে) SHA-1 স্বাক্ষরিত রুট শংসাপত্রের একটি অসম্পূর্ণ পথ ছিল। জারি করা শংসাপত্রে একাধিক চেইন ছিল এবং SHA-1 মূল শংসাপত্রের দিকে পরিচালিত চেইনের মধ্যবর্তী শংসাপত্রটি অনুপস্থিত ছিল । আধুনিক ব্রাউজারগুলি এটি কীভাবে পরিচালনা করতে পারে তা জানেন তবে জাভা 7 এটি ডিফল্টরূপে পরিচালনা করে না (যদিও কোডটিতে এটি সম্পাদন করার জন্য কয়েকটি বিভ্রান্তিক উপায় রয়েছে)। ফলাফলটি হ'ল ত্রুটি বার্তা যা স্ব-স্বাক্ষরিত শংসাপত্রগুলির ক্ষেত্রে সাদৃশ্যপূর্ণ:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
    ... 22 more

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


ssllabs.com/ssltest একজন ত্রাণকর্তা, কেবল এটি একটি ওয়ার্কিং সার্টের বৈধতার সাথে তুলনা করতে হবে।
কিসনা

5

শুধুমাত্র উইন্ডোজের জন্য, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. ক্রোমে সেটিংসে যান।
  2. সেটিংসে অগ্রিম সেটিংস দেখান ক্লিক করুন।
  3. এইচটিটিপিএস / এসএসএল এর অধীনে পরিচালনা শংসাপত্রগুলি ক্লিক করুন।
  4. আপনার শংসাপত্রটি রফতানি করুন।
  5. উইন্ডোজ অনুসন্ধানে (কীবোর্ডে উইন্ডোজ কী টিপতে) জাভা টাইপ করুন।
  6. (জাভা কনফিগার) বিকল্প নির্বাচন করুন যা জাভা কন্ট্রোল প্যানেলটি খুলবে
  7. জাভা কন্ট্রোল প্যানেলে সুরক্ষা ট্যাব নির্বাচন করুন
  8. শংসাপত্র পরিচালনা নির্বাচন করুন
  9. আমদানি ক্লিক করুন
  10. (ব্যবহারকারী) ট্যাবের অধীনে নির্বাচিত এবং শংসাপত্রের প্রকার (বিশ্বস্ত শংসাপত্র) হিসাবে
  11. ডাউনলোড শংসাপত্রটি আমদানি বোতামে ক্লিক করুন এবং এটি আমদানি করুন।

4

যারা দেবিয়ান এবং প্রিপেইকেজড জাভা পছন্দ করেন তাদের জন্য:

sudo mkdir /usr/share/ca-certificates/test/  # don't mess with other certs
sudo cp ~/tmp/test.loc.crt /usr/share/ca-certificates/test/
sudo dpkg-reconfigure --force ca-certificates  # check your cert in curses GUI!
sudo update-ca-certificates --fresh --verbose

জন্য পরীক্ষা করতে ভুলবেন না /etc/default/cacerts:

# enable/disable updates of the keystore /etc/ssl/certs/java/cacerts
cacerts_updates=yes

শংসাপত্র অপসারণ করতে:

sudo rm /usr/share/ca-certificates/test/test.loc.crt
sudo rm /etc/ssl/certs/java/cacerts
sudo update-ca-certificates --fresh --verbose

2

এটি জাভা 7 এর সাথে GoDaddy শংসাপত্রগুলি ব্যবহার করেও ঘটতে পারে যা SHA2 ব্যবহার করে সই করা আছে।

Chrome এবং অন্যান্য সমস্ত ব্রাউজারগুলি এসএসএ 1 ব্যবহার করে স্বাক্ষরিত এসএসএল শংসাপত্রগুলি হ্রাস করতে শুরু করছে, এটি এটি সুরক্ষিত নয়।

ইস্যুটির আরও তথ্য এখানে পাওয়া যাবে , পাশাপাশি আপনার এখনই প্রয়োজন হলে এটি আপনার সার্ভারে কীভাবে সমাধান করা যায়।


2

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

   <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.6</version>
    </dependency>

2

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

স্ব-স্বাক্ষরিত শংসাপত্র আমদানি করুন:

keytool -import -trustcacerts -alias myselfsignedcert -file /Users/me/Desktop/selfsignedcert.crt -keystore ./privateKeystore.jks

সরকারী মূল শংসাপত্র যুক্ত করুন:

keytool -importkeystore -srckeystore <java-home>/lib/security/cacerts -destkeystore ./privateKeystore.jks

গ্র্যাডল ডিমনও পেল। ./gradlew --statusজিনিসগুলি বিবর্ণ দেখা শুরু করলে এটি সহ সমস্ত চলমান ডিমনগুলি মেরে ফেলা উচিত ।

মূল পোস্টিং:

এটা কেউ বিশ্বাস করবে না, আমি জানি। তবুও, যদি সমস্ত কিছু ব্যর্থ হয় তবে একবার চেষ্টা করে দেখুন: আমার ম্যাকের পুনরায় বুট করার পরে সমস্যাটি চলে গেছে। গরগর।

পটভূমি: ./gradlew জার আমাকে "অনুরোধ করা টার্গেটের বৈধ শংসাপত্রের পথ খুঁজে পেতে অক্ষম" দিয়ে চলেছে

আমি একটি স্বাক্ষরিত শংসাপত্রের সাথে আটকে আছি, ব্রাউজার থেকে রক্ষা পেয়েছি, প্রাইভেটকিস্টোর.জেপিতে আমদানি করা। তারপরে গ্রেডলকে প্রাইভেটকিস্টোর.জ্যাকসের সাথে কাজ করার নির্দেশনা দিয়েছিল:

org.gradle.jvmargs=-Djavax.net.debug=SSL -Djavax.net.ssl.trustStore="/Users/me/IntelliJ/myproject/privateKeystore.jks"  -Djavax.net.ssl.trustStorePassword=changeit

উল্লিখিত হিসাবে, এটি কেবল একটি রিবুট করার পরে কাজ করে।


2

AVG সংস্করণ 18.1.3044 (উইন্ডোজ 10 সহ) আমার স্থানীয় স্প্রিং অ্যাপ্লিকেশনে হস্তক্ষেপ করে।

সমাধান: "ওয়েব এবং ইমেল" নামক AVG বিভাগে প্রবেশ করুন এবং "ইমেল সুরক্ষা" অক্ষম করুন। সাইটটি সুরক্ষিত না থাকলে AVG শংসাপত্রটিকে অবরুদ্ধ করে।


2

Https://176.66.3.69:6443/ এর একটি বৈধ শংসাপত্র রয়েছে তা নিশ্চিত করুন । আপনি এটি ব্রাউজারে https নিরাপদ নয়কাজ করলে প্রথমে এটি ব্রাউজারের মাধ্যমে চেক করতে পারেন এটি জাভাতে কাজ করবে।

এটা আমার জন্য কাজ করছে


এবং ব্রাউজার যদি অভিযোগ করে তবে আমার কী করা উচিত?
গডফাদার

শংসাপত্রটি ইনস্টল করার চেষ্টা করুন
আমর ইব্রাহিম

2

এটি সমাধান করার অনেক উপায় আছে ...

একটি উপায় হ'ল ট্রাস্টস্টোর শংসাপত্রগুলি একটি কীস্টোর ফাইলে সেট করে অ্যাপ্লিকেশনটির পথে রেখে দেওয়া হয় এবং এই সিস্টেম বৈশিষ্ট্যগুলিকে মূল পদ্ধতিতে সেট করা হয়:

public static void main(String[] args) {
  System.setProperty("javax.net.ssl.trustStore", "trust-store.jks");
  System.setProperty("javax.net.ssl.trustStorePassword", "TrustStore");
  ...
}

প্রকল্পের জারের ফাইলের অভ্যন্তরে রিসোর্স ফাইল হিসাবে কীস্টোরটি রেখে অন্য উপায় load

public static SSLContext createSSLContext(String resourcePath, String pass) throws NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException, UnrecoverableKeyException, KeyManagementException {
  // initialise the keystore
  final char[] password = pass.toCharArray();
  KeyStore ks = KeyStore.getInstance("JKS");
  ks.load(ThisClass.class.getResourceAsStream(resourcePath
  ), password);

  // Setup the key manager factory.
  KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
  kmf.init(ks, password);

  // Setup the trust manager factory.
  TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
  tmf.init(ks);

  SSLContext sslc = SSLContext.getInstance("TLS");
  sslc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
  return sslc;
}

public static void main(String[] args) {
  SSLContext.setDefault(
    createSSLContext("/trust-store.jks", "TrustStore"));
  ...
}

উইন্ডোজগুলিতে আপনি এই সমাধানটিও চেষ্টা করে দেখতে পারেন: https://stackoverflow.com/a/59056537/980442


আমি শংসাপত্র কর্তৃপক্ষ সিএ .crtফাইল থেকে কীস্টোর ফাইলটি এইভাবে তৈরি করেছি:

keytool -import -alias ca -keystore trust-store.jks -storepass TrustStore -trustcacerts -file ca.crt

এফওয়াইআই: https://docs.oracle.com/javadb/10.8.3.0/adminguide/cadminsslclient.html


1

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

jdbc:postgresql://myserver.com:5432/mydatabasename?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

1

এই ইমেজ মত সমস্যা ছিল।

এখানে চিত্র বর্ণনা লিখুন

কয়েকটি সমাধান চেষ্টা করল। তবে দেখা গেছে যে এটি একই প্রকল্পের পরেও, যখন এটি অন্য কারও কর্মস্থলে রয়েছে, এটি সম্পূর্ণ ঠিক। কোন অতিরিক্ত সেটিংস প্রয়োজন। সুতরাং আমরা অনুমান করেছি যে এটি একটি পরিবেশগত সমস্যা। আমরা জেডিকে সংস্করণ, আইডিই পরিবর্তন করার চেষ্টা করেছি কিন্তু কার্যকর হয়নি। শীর্ষস্থানীয় উত্তরের চেষ্টা না করা অবধি তদন্তের জন্য প্রায় 4 ঘন্টা সময় লেগেছে। আমি এই উত্তরে উল্লিখিত ত্রুটিটি খুঁজে পাইনি তবে আমি আমার ব্রাউজারের মাধ্যমে এইচটিটিপি ইউআরএল (লক) সম্পর্কে পেয়েছি যে চার্লসের একটি শংসাপত্র রয়েছে। তখন আমি বুঝতে পারি আমার চার্লস সব সময় ছিল। যতক্ষণ না আমি এটি বন্ধ করেছি, এটি ঠিক আছে fine

সুতরাং আমি আমার অভিজ্ঞতাটি রেখেছি যা আপনার ক্ষেত্রে সহায়ক হতে পারে।


0

আমার ক্ষেত্রে আমি জাভা 1.6 দিয়ে ম্যাকওস হাই সিয়েরা চালাচ্ছি। ক্যাবার্ট ফাইলটি গাবে মার্টিন-ড্যাম্পেসির উত্তরের উপরের রেফারেন্সের চেয়ে আলাদা অবস্থানে রয়েছে। ক্যাসার্ট ফাইলটি ইতিমধ্যে অন্য কোনও স্থানে (/ গ্রন্থাগার / ইন্টারনেট প্লাগ-ইন / জাভা অ্যাপলেট প্লাগইন.প্লাগিন / বিষয়বস্তু / হোম / লিবিব / সুরক্ষা / স্যাকার্টস) এর সাথে যুক্ত ছিল।

ফায়ারফক্স ব্যবহার করে, আমি ওয়েব সাইট থেকে প্রশ্নে শংসাপত্রটি একটি "রফতানিকারকফায়ার ক্রিট" নামক একটি স্থানীয় ফাইলে রফতানি করেছিলাম। সেখান থেকে, ক্যাসার্ট ফাইলে শংসাপত্রটি সরানোর জন্য আমি কীটোল ব্যবহার করেছি। এটি সমস্যার সমাধান করেছে।

bash-3.2# cd /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/
bash-3.2# keytool -importcert -file ~/exportedCertFile.crt -alias example -keystore cacerts -storepass changeit

0

প্রথমে এসএসএল শংসাপত্রটি ডাউনলোড করুন তারপরে আপনি আপনার জাভা বিন পথে যেতে পারেন কনসোলে নীচের কমান্ডটি কার্যকর করুন।

C:\java\JDK1.8.0_66-X64\bin>keytool -printcert -file C:\Users\lova\openapi.cer -keystore openapistore

-1

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

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