Javax.net.ssl.SSLHandshakeException সমাধান: সূর্য.সিকিউরিটি. লায়েডেটর.ভালিডেটর এক্সপেশন: PKIX পাথ বিল্ডিং ব্যর্থ হয়েছে?


426

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

আসল বিষয়টি এখানে।

আমি এই ত্রুটি পাচ্ছি:

বিশদ বার্তা সূর্য.সিকিউরিটি.অলডিয়েটার.ভালিডেটর এক্সসেপশন: পিকেএক্স পাথ বিল্ডিং ব্যর্থ হয়েছে:
sun.security.provider.certpath.SunCertPathBuilderException: অনুরোধ করা টার্গেটে বৈধ শংসাপত্রের পথ খুঁজে পেতে ব্যর্থ

কারণ javax.net.ssl.SSL.andLLandSandException: sun.security. লাডিয়েটার.ভালিডেটর এক্সপেশন: PKIX পাথ বিল্ডিং ব্যর্থ হয়েছে: সূর্য.সিকিউরিটি।

আমি টমকেট 6 ওয়েবসার্ভার হিসাবে ব্যবহার করছি। আমার কাছে দুটি বন্দুকের বিভিন্ন টমক্যাটে তবে একই মেশিনে দুটি এইচটিটিপিএস ওয়েব অ্যাপ্লিকেশন ইনস্টল করা আছে। বলে App1(port 8443)App2(port 443)App1সাথে সংযোগ করে App2। যখন আমি App1সংযোগ App2করি তখন উপরের ত্রুটিটি পাই। আমি জানি এটি একটি খুব সাধারণ ত্রুটি তাই বিভিন্ন ফোরাম এবং সাইটগুলিতে বহু সমাধান জুড়ে এসেছিল। server.xmlউভয় টোমকেটসের নীচে আমার প্রবেশ রয়েছে :

keystoreFile="c:/.keystore" 
keystorePass="changeit"

প্রতিটি সাইট একইভাবে বলেছে যে অ্যাপ 2 দ্বারা দেওয়া শংসাপত্রটি অ্যাপ্লিকেশন jvm এর বিশ্বস্ত দোকানে নেই trusted এটি সত্য বলে মনে হয় যখন আমি IE ব্রাউজারে একই ইউআরএল হিট করার চেষ্টা করেছি, এটি কাজ করে (ওয়ার্মিংয়ের সাথে, এই ওয়েব সাইটের সুরক্ষা শংসাপত্রের সাথে একটি সমস্যা আছে Here আমি এখানে এই ওয়েবসাইটটিতে চালিয়ে যেতে বলি)। কিন্তু যখন একই URL টি জাভা ক্লায়েন্ট দ্বারা আঘাত করা হয় (আমার ক্ষেত্রে) আমি উপরের ত্রুটিটি পাই। সুতরাং এটি ট্রস্টস্টোরে রাখার জন্য আমি এই তিনটি বিকল্প চেষ্টা করেছিলাম:

বিকল্প 1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

অপশন 2 পরিবেশ পরিবর্তনশীল নীচে সেট

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

অপশন 3 পরিবেশ পরিবর্তনশীল নীচে সেট করা

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

তবে কিছুই কাজ করেনি

অ্যাপাচি এইচটিপিপিএলিয়েন্টের সাথে কীভাবে অবৈধ এসএসএল শংসাপত্রগুলি পরিচালনা করতে হবে তার পরামর্শ দেওয়া জাভা পদ্ধতির শেষ অবধি কি কাজ করা হয়েছে? পাস্কেল থিভেন্ট অর্থাৎ প্রোগ্রাম ইনস্টল করে দিয়ে

তবে এই পদ্ধতির ডেভবক্স সেটআপের জন্য ঠিক আছে তবে আমি উত্পাদন পরিবেশে এটি ব্যবহার করতে পারি না।

আমি অবাক হচ্ছি কেন তিন পন্থা উপরে কাজ করে নি উল্লেখ করেছিলেন, যখন আমি একই মান উল্লেখ করেছি server.xmlএর app2সেটিংস এর দ্বারা truststore মধ্যে সার্ভার এবং একই মান

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

মধ্যে app1প্রোগ্রাম।

আরও তথ্যের জন্য আমি এইভাবে সংযোগটি করছি:

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

if (conn instanceof HttpsURLConnection) {

  HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

  reply.load(conn1.getInputStream());


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

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

stackoverflow.com/questions/2893819/… - প্রাসঙ্গিক এবং একটি দুর্দান্ত উত্তর।
সিদ্ধার্থ

উত্তর:


406

আপনার জন্য শংসাপত্র যুক্ত করতে হবে App2 ব্যবহৃত এ অবস্থিত জেভিএম এর truststore ফাইলে %JAVA_HOME%\lib\security\cacerts

প্রথমে নীচের কমান্ডটি চালিয়ে আপনার শংসাপত্রটি ইতিমধ্যে ট্রাস্টস্টোরে রয়েছে কিনা তা পরীক্ষা করতে পারেন: keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts"(আপনাকে একটি পাসওয়ার্ড দেওয়ার দরকার নেই)

যদি আপনার শংসাপত্রটি অনুপস্থিত থাকে তবে আপনি এটি আপনার ব্রাউজারের সাথে ডাউনলোড করে এটি পেতে এবং নিম্নলিখিত কমান্ডের সাথে এটি ট্রাস্টস্টোরে যুক্ত করতে পারেন:

keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>

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

সান / ওরাকল সম্পর্কিত তথ্য এখানে পাওয়া যাবে


6
আপনাকে পুরো পথটি ব্যবহার করতে হবে, উদাহরণস্বরূপ সি: ava জাভা d
জেডিকি b

48
সাইমনসেজ যেমন বলেছিল, আপনার পাসওয়ার্ডের দরকার নেই তবে আপনি এটি চাইলে ডিফল্ট পাসওয়ার্ডটি হ'ল "পরিবর্তন"।
ফেলিক্স

16
এছাড়াও, উইন্ডোজটিতে আপনাকে প্রশাসক হিসাবে টার্মিনালটি চালানো দরকার, অন্যথায় আপনি keytool error: java.io.FileNotFoundException ... (Access is denied)যখন নিজের শংসাপত্রটি আমদানির চেষ্টা করবেন তখন ত্রুটি পাবেন ।
ফেলিক্স

2
আহ @ সিমোনসেজ আপনি আমার দেবতা। তবে এটি যুক্ত করতে, @ এম শ্যাচের কাজ হিসাবে এটির জন্য উল্লিখিত বিশ্বাসের স্টোরের অবস্থান এবং পাসওয়ার্ড অবশ্যই নির্দিষ্ট করতে হবে।
বুডসনকিস

2
জাভা 1.8 নিয়ে সমস্যা অবিরত রয়েছে। বর্ণিত হিসাবে শংসাপত্র যোগ করার প্রয়োজন এবং জাভা <1.8
টম হাওয়ার্ড

180

javax.net.ssl.SSL.andLLandSandException: sun.security. লাডিয়েটার.ভিডিয়েটার ধারণা

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

You আপনি যদি আপনার ব্রাউজারে এইচটিটিপিএস ইউআরএল অ্যাক্সেস করতে পারেন তবে মূল সিএ সনাক্ত করতে জাভা আপডেট করা সম্ভব।

Your আপনার ব্রাউজারে, এইচটিটিপিএস URL এ যান যা জাভা অ্যাক্সেস করতে পারে না। এইচটিটিপিএস শংসাপত্র শৃঙ্খলে ক্লিক করুন (ইন্টারনেট এক্সপ্লোরারে লক আইকন রয়েছে), শংসাপত্রটি দেখতে লকটিতে ক্লিক করুন।

The শংসাপত্রের "বিশদ" এবং "ফাইলটিতে অনুলিপি করুন" এ যান। এটি বেস 64 (.cer) ফর্ম্যাটে অনুলিপি করুন । এটি আপনার ডেস্কটপে সংরক্ষণ করা হবে।

All সমস্ত সতর্কতা উপেক্ষা করে শংসাপত্র ইনস্টল করুন।

• আমি যে URL টি অ্যাক্সেস করার চেষ্টা করছিলাম তার শংসাপত্রের তথ্যটি এইভাবেই সংগ্রহ করেছি।

শংসাপত্র সম্পর্কে জানতে এখন আমার জাভা সংস্করণটি তৈরি করতে হয়েছিল যাতে আরও এটি ইউআরএল সনাক্ত করতে অস্বীকার না করে। এই বিষয়ে আমি অবশ্যই উল্লেখ করতে হবে যে আমি জেডিকে-র \ jre \ lib location সুরক্ষার স্থানে ডিফল্টরূপে মূল শংসাপত্রের তথ্যটি রেখেছি এবং এটি অ্যাক্সেসের জন্য ডিফল্ট পাসওয়ার্ড হ'ল: পরিবর্তন

ক্যাসর্টের তথ্য দেখার জন্য নিম্নলিখিতগুলি অনুসরণ করার পদ্ধতিটি নিম্নলিখিত:

Start স্টার্ট বাটনে ক্লিক করুন -> রান করুন

Cm টাইপ সেন্টিমিটার। কমান্ড প্রম্পটটি খোলে (আপনাকে এটি প্রশাসক হিসাবে খোলার প্রয়োজন হতে পারে)।

Your আপনার Java/jreX/binডিরেক্টরিতে যান

The নিম্নলিখিত টাইপ করুন

keytool-list -keystore D: \ জাভা \ jdk1.5.0_12 \ জেআর \ lib \ সুরক্ষা \ cacerts

এটি কীস্টোরের মধ্যে থাকা বর্তমান শংসাপত্রগুলির তালিকা দেয়। এটি দেখতে এমন কিছু দেখাচ্ছে:

সি: \ ডকুমেন্টস এবং সেটিংস \ নীলাঞ্জনা> কীটল-তালিকা -কীস্টোর ডি: \ জাভা \ jdk1.5.0_12 \ জেআর \ লিবিব \ সুরক্ষা \ কেসেটস

কীস্টোর পাসওয়ার্ড প্রবেশ করুন: পরিবর্তন

কীস্টোর প্রকার: jks

কীস্টোর সরবরাহকারী: সান

আপনার কীস্টোরে 44 টি এন্ট্রি রয়েছে

verisignclass3g2ca, মার্চ 26, 2004, বিশ্বস্ত কার্টেন্ট্রি,

শংসাপত্রের ফিঙ্গারপ্রিন্ট (MD5): এ 2: 33: 9 বি: 4 সি: 74: 78: 73: ডি 4: 6 সি: ই 7: সি 1: এফ 3: 8 ডি: সিবি: 5 সি: E9

এনট্রেস্টক্লিয়েন্টকা, জানুয়ারী 9, 2003, বিশ্বস্ত কের্তেন্ট্রি,

শংসাপত্রের ফিঙ্গারপ্রিন্ট (MD5): 0 সি: 41: 2F: 13: 5B: A0: 54: F5: 96: 66: 2D: 7E: CD: 0E: 03: F4

ঠাট্টেপার্সোনালবাসিক, ফেব্রুয়ারী 13, 1999

শংসাপত্রের ফিঙ্গারপ্রিন্ট (MD5): E6: 0B: D2: C9: CA: 2D: 88: DB: 1A: 71: 0E: 4B: 78: EB: 02: 41

addtrustclass1ca, 1 মে, 2006, বিশ্বস্ত কের্টেনট্রি,

শংসাপত্রের ফিঙ্গারপ্রিন্ট (MD5): 1E: 42: 95: 02: 33: 92: 6B: B9: 5F: C0: 7F: DA: D6: B2: 4B: FC

verisignclass2g3ca, মার্চ 26, 2004, বিশ্বস্ত কার্টেন্ট্রি,

শংসাপত্রের ফিঙ্গারপ্রিন্ট (MD5): F8: BE: C4: 63: 22: C9: A8: 46: 74: 8B: B8: 1D: 1E: 4A: 2B: F6

• এখন আমাকে পূর্বে ইনস্টল করা শংসাপত্রটি ক্যা্যাসার্টসে অন্তর্ভুক্ত করতে হয়েছিল।

• এর জন্য নিম্নলিখিত পদ্ধতিটি রয়েছে:

কীটল-ইম্পোর্ট -নোপ্রোম্ট্ট ট্রাস্টস্যাকেরেটস আলিয়াস ALIASNAME -ফায়ার করুন ফাইলমিনিম_থিক_আইএনএসটিএলএল_সির্টিফিকেট -কোস্টোর প্যাথএইচসিএইসিআরটিএস_ফাইলে-স্টোরপাস পাসওয়ার্ড

আপনি যদি জাভা 7 ব্যবহার করেন:

কীটোল ইম্পোর্টসার্ট-স্ট্রাস্টসেসার্টস আলিয়াস ALIASNAME- ফাইল পাঠ্যথ্যাফিক্যালএফএইফএফআইএলএফআরআম__থ_আইএনএসটিএলএল_সির্টিফিকেট -কোস্টোর প্যাথএইচএইচসিসিআরটিএস_ফিল - স্টোরপাস পরিবর্তন

Then এটি তখন ক্যাসর্ট ফাইলে শংসাপত্রের তথ্য যুক্ত করবে।

উপরের উল্লিখিত ব্যতিক্রমের জন্যই আমি এটির সমাধানটি পেয়েছি !!


5
শংসাপত্রের মেয়াদ শেষ হলে আপনি কী করবেন? সব কিছুর পুনরাবৃত্তি (বার্ষিক)?
ggkmath

7
প্রোগ্রামযুক্তভাবে এটি করার কোনও উপায় আছে কি?
মেশুলাম সিল্ক

1
পিকেআইক্স ত্রুটি নিয়ে কাজ করা লোকদের জন্য, "পথ কোনও বিশ্বাসের অ্যাঙ্করগুলির সাথে চেইন করে না", দুর্ভাগ্যক্রমে এই সমাধানটি আমার পক্ষে সেই সমস্যাটি সমাধান করেনি।
আইসডড্যান্ট

3
একটি প্রশ্ন - উপনাম নামটি কি ওয়েব ঠিকানা যা আমরা শংসাপত্রটি আমদানি করছি? উদাহরণস্বরূপ, যদি ইউআরএল ডোমেইন.সাইট.com/pages/service.asmx হয় তবে উপনামটি ডোমেইন.সাইট ডট কম হওয়া উচিত বা সম্পূর্ণ ইউআরএল (ডোমেন.সাইট.com/pages/service.asmx) হওয়া উচিত বা এটিও http সহ প্রিফিক্স করা উচিত : // নাকি এটি কেবল একটি স্বেচ্ছাচারী নাম?
ন্যানোসফ্ট

1
পাথ: \ lib \ সুরক্ষা> কীটোল -আইম্পোর্ট -নোপ্রোম্ট-ট্রাস্টক্যাসার্টস -ালিয়াস ওয়েবকার্ট -ফাইলে ওয়েবকার্টেরেসসরস.সিার-কিস্টোর সি: / ব্যবহারকারী / জ্যাকি / ডেস্কটপ-স্টোরপাস পরিবর্তনটি আমি পেয়েছি "সিস্টেমটি নির্দিষ্ট ফাইলটি খুঁজে পাচ্ছে না"
জেসি

46

টমকেট 7 এ এটি কীভাবে কাজ করবেন

আমি টমক্যাট অ্যাপে স্ব স্বাক্ষরিত শংসাপত্রটি সমর্থন করতে চেয়েছিলাম তবে নিম্নলিখিত স্নিপেটটি কাজ করতে ব্যর্থ হয়েছিল

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

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

        URL url = new URL("https:// ... .com");
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        httpURLConnection.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());

        String serializedMessage = "{}";
        wr.writeBytes(serializedMessage);
        wr.flush();
        wr.close();

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println(responseCode);
    }
}

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

1) .crtফাইলটি ডাউনলোড করুন

echo -n | openssl s_client -connect <your domain>:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/<your domain>.crt
  • <your domain>আপনার ডোমেন (যেমন jossef.com) দিয়ে প্রতিস্থাপন

2) .crtজাভার cacertsশংসাপত্রের স্টোরটিতে ফাইলটি প্রয়োগ করুন

keytool -import -v -trustcacerts -alias <your domain> -file ~/<your domain>.crt -keystore <JAVA HOME>/jre/lib/security/cacerts -keypass changeit -storepass changeit
  • <your domain>আপনার ডোমেন (যেমন jossef.com) দিয়ে প্রতিস্থাপন
  • <JAVA HOME>আপনার জাভা হোম ডিরেক্টরি সঙ্গে প্রতিস্থাপন

3) এটি হ্যাক

আইভির Javaডিফল্ট শংসাপত্রের স্টোরগুলিতে আমার শংসাপত্র ইনস্টল করা সত্ত্বেও টমক্যাট এটিকে উপেক্ষা করে (মনে হয় এটি জাভার ডিফল্ট শংসাপত্রের স্টোরগুলি ব্যবহার করার জন্য কনফিগার করা হয়নি)।

এটি হ্যাক করতে আপনার কোডের যে কোনও জায়গায় নিম্নলিখিতটি যুক্ত করুন:

String certificatesTrustStorePath = "<JAVA HOME>/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);

// ...

4
দ্বিতীয় ধাপটি আমার জন্য স্প্রিংবুট এবং টমকেট using ব্যবহার করে কৌশলটি করেছে। আপনাকে ধন্যবাদ।
টিম পেরি

টমক্যাট দ্বারা ব্যবহৃত জাভা থেকে কী কীটল ব্যবহার করতে হবে? কারণ একটি সার্ভারে আমার অনেক জাভা থাকতে পারে
ভিকিফোর

@ ভিকিফর হ্যাঁ আপনি এটি আপনার সিস্টেমে ইনস্টল করা সমস্ত জাভা
ডায়ারের

1
এই কাজ! এমন একটি দরকারী উত্তরের জন্য একটি টন @ জোসেফহারুশকে ধন্যবাদ!
টম টেলর

1
আমার সমস্যাটিতে @ জোসেফ হারুশের কোড বিভাগটি যুক্ত করার পরে আমার সমস্যা সমাধান হয়েছে solved
চাওদ পঠিরানা

10

আমার ক্ষেত্রে সমস্যাটি ছিল যে ওয়েবসার্ভারটি কেবল শংসাপত্র এবং মধ্যবর্তী সিএ পাঠাচ্ছিল, রুট সিএ নয়। এই JVM বিকল্পটি যুক্ত করা সমস্যার সমাধান করেছে:-Dcom.sun.security.enableAIAcaIssuers=true

কর্তৃপক্ষের তথ্য অ্যাক্সেস এক্সটেনশনের সিআইএসউয়ার্স অ্যাক্সেস পদ্ধতির জন্য সমর্থন উপলব্ধ। এটি সামঞ্জস্যের জন্য ডিফল্টরূপে অক্ষম করা হয়েছে এবং সিস্টেমের সম্পত্তিটিকে com.sun.security.enableAIAcaIssuersমানটিকে সত্য করে সেট করে সক্ষম করা যেতে পারে ।

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

সূত্র


এটি আসলে আমার সমস্যার সমাধান করেছে, ধন্যবাদ!
Luís সিলভা

6

আর একটি কারণ জেডিকের পুরানো সংস্করণ হতে পারে। আমি jdk সংস্করণ 1.8.0_60 ব্যবহার করছিলাম, কেবল সর্বশেষতম সংস্করণে আপডেট করা শংসাপত্রের সমস্যাটি সমাধান করেছে।


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

5

আমার ক্যাসার্ট ফাইলটি সম্পূর্ণ খালি ছিল। আমি আমার উইন্ডোজ মেশিনের (যা ওরাকল জাভা 7 ব্যবহার করে) সিসার্টস ফাইলটি অনুলিপি করে এটি সমাধান করেছি এবং এটি আমার লিনাক্স বাক্সে (ওপেনজেডিকে) স্ক্রিপ করব।

cd %JAVA_HOME%/jre/lib/security/
scp cacerts mylinuxmachin:/tmp

এবং তারপরে লিনাক্স মেশিনে

cp /tmp/cacerts /etc/ssl/certs/java/cacerts

এখন পর্যন্ত এটি দুর্দান্ত কাজ করেছে।


1
সমস্যাটি যদি আপনি জাভাটির একটি পুরানো সংস্করণ ব্যবহার করেন যা সর্বশেষতম শংসাপত্রগুলি না করে তবে এটি আশ্চর্যজনকভাবে কাজ করে।
আত্রিপাঠি

@ অ্যাট্রিপাঠি ম্যাক সম্পর্কে কেমন আছেন?
আইওএসএন্ড্রয়েডওয়াইন্ডোমোবাইল অ্যাপসদেভ

আপনার জাভা ইনস্টলেশনটিতে মারাত্মক কিছু সমস্যা ছিল যদি ক্যাসর্ট ফাইলটি খালি থাকে। আপনার সব কিছু পুনরায় ইনস্টল করা উচিত ছিল।
লার্নের মারকুইস

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

5

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

দেখা গেল সমস্যাটি পুরো শংসাপত্র শৃঙ্খলাবিহীন একটি শংসাপত্র। আমি যখন অন্তর্বর্তী শংসাপত্র যুক্ত করলাম তখন সমস্যাটি সমাধান হয়ে গেল।

আশাকরি এটা সাহায্য করবে.


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

এটি আমাকে আমার ক্ষেত্রে সাহায্য করতে সাহায্য করতে পারে কারণ আমি এইচডিডি
আসফ ম্যাগেন

এনগিনেক্সের সাহায্যে এটি এসএসএল কনফিগারেশনের জন্য .key এবং .pem ফাইলগুলি কেবল ব্যবহার করে। প্রথমে আপনি .crt কে .pem তে রূপান্তর করুন (কেবল: সিপি yourfile.crt yourfile.pem) এবং তারপরে এসএসএল সার্ট চেইনের জন্য: আপনি .pem এর শেষ অংশে .cer ফাইলটি যুক্ত করুন (বিড়াল yourfile.cer >> yourfile.pem)
এই আনহ Nguyễn

5

লিনাক্সের অধীনে টমকেট 7 ব্যবহার করে, এটি কৌশলটি করেছে।

String certificatesTrustStorePath = "/etc/alternatives/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

লিনাক্সের অধীনে, $JAVA_HOMEসর্বদা সেটআপ হয় না তবে সাধারণত /etc/alternatives/jreনির্দেশ করে$JAVA_HOME/jre


5

নীচে কোড আমার জন্য কাজ করে:

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class TrustAnyTrustManager implements X509TrustManager {

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

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}

HttpsURLConnection conn = null;
            URL url = new URL(serviceUrl);
            conn = (HttpsURLConnection) url.openConnection();
             SSLContext sc = SSLContext.getInstance("SSL");  
             sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());  

             conn.setSSLSocketFactory(sc.getSocketFactory());

5
এই কোডটি সম্পূর্ণ নিরাপদ এবং ব্যবহার করা উচিত নয়।
লার্নের

@ ব্যবহারকারী 207421 কেন এটি অনিরাপদ? সংক্ষেপে কোডে কী হচ্ছে।
গোবিন্দ সাখারে

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

4

আমি jdk1.8.0_171যখন একই সমস্যার মুখোমুখি হয়েছিলাম তখন আমি ব্যবহার করছিলাম। আমি এখানে শীর্ষ 2 সমাধান চেষ্টা করেছি (কীটোল ব্যবহার করে একটি শংসাপত্র যুক্ত করা এবং এটিতে একটি হ্যাক রয়েছে এমন অন্য সমাধান) তবে তারা আমার পক্ষে কাজ করেনি।

আমি আমার জেডিকে আপগ্রেড করেছি 1.8.0_181এবং এটি একটি কবজির মতো কাজ করেছে।


2

আমি একটি ছোট উইন 32 (উইনএক্সপি 32 বিট টেস্টেট) মূ .় সিএমডি (কমান্ডলাইন) স্ক্রিপ্ট লিখেছিলাম যা প্রোগ্রাম ফাইলগুলিতে সমস্ত জাভা সংস্করণ সন্ধান করে এবং সেগুলিতে একটি শংসাপত্র যুক্ত করে। পাসওয়ার্ডটি ডিফল্ট "পরিবর্তন" হওয়া বা স্ক্রিপ্টে নিজেকে পরিবর্তন করতে হবে :-)

@echo off

for /F  %%d in ('dir /B %ProgramFiles%\java') do (
    %ProgramFiles%\Java\%%d\bin\keytool.exe -import -noprompt -trustcacerts -file some-exported-cert-saved-as.crt -keystore %ProgramFiles%\Java\%%d\lib\security\cacerts -storepass changeit
)

pause

2

নীচে MacOS এক্সের জন্য আমার জন্য সঠিক কমান্ডটি কাজ করেছে যেখানে আমাকে 'ইম্পোর্টেরেট' বিকল্পে ডাবল হাইপেনের সাথে চেষ্টা করতে হয়েছিল যা কাজ করেছে:

sudo keytool -–importcert -file /PathTo/YourCertFileDownloadedFromBrowserLockIcon.crt -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/security/cacerts -alias "Cert" -storepass changeit

2

আমার জন্য এই পোস্ট থেকে স্বীকৃত সমাধানটি কাজ করে নি: https://stackoverflow.com/a/9619478/4507034

পরিবর্তে, আমি আমার মেশিনের বিশ্বস্ত শংসাপত্রগুলিতে শংসাপত্রটি আমদানি করে সমস্যার সমাধান করতে পেরেছি।

পদক্ষেপ:

  1. URL- এ যান (উদা। https://localhost:8443/yourpath) যেখানে শংসাপত্র কাজ করছে না।
  2. উল্লিখিত পোস্টে বর্ণিত শংসাপত্রটি রফতানি করুন।
  3. আপনার উইন্ডোজ মেশিনে খোলা: Manage computer certificates
  4. Trusted Root Certification Authorities-> এ যানCertificates
  5. আপনার your_certification_name.cerফাইলটি এখানে আমদানি করুন ।

1

উবুন্টু সার্ভারে টমক্যাট চলার জন্য, কোন জাভা ব্যবহৃত হচ্ছে তা জানতে, "পিএস-শেফ | গ্রেপ টমক্যাট" কমান্ডটি ব্যবহার করুন:

নমুনা:

/home/mcp01$ **ps -ef |grep tomcat**
tomcat7  28477     1  0 10:59 ?        00:00:18 **/usr/local/java/jdk1.7.0_15/bin/java** -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -Djava.awt.headless=true -Xmx512m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat7/endorsed -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp org.apache.catalina.startup.Bootstrap start
1005     28567 28131  0 11:34 pts/1    00:00:00 grep --color=auto tomcat

তারপরে, আমরা এগুলিতে যেতে পারি: সিডি / ওএসআর / লোকাল / জাভা / জেডকি 1.7.0_15/jre/lib/ সুরক্ষা

ডিফল্ট কেসার্টস ফাইলটি এখানে অবস্থিত। এটিতে অবিশ্বস্ত শংসাপত্র .োকান।


1

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

  1. সাইট সারটি ডাউনলোড করুন,

  2. শংসাপত্রটি অনুলিপি করুন (উদাঃ: cert_file.cer) ডিরেক্টরিতে $ JAVA_Home \ Jre \ Lib \ সুরক্ষা

  3. প্রশাসকটিতে সিএমডি খুলুন এবং ডিরেক্টরিটি $ জাভাআহোম \ জেরে \ লিবি \ সুরক্ষাতে পরিবর্তন করুন

  4. নিচে কমান্ডটি ব্যবহার করে একটি ট্রাস্ট স্টোরে শংসাপত্রটি আমদানি করুন,

keytool -import -alias ca -file cert_file.cer -keystore cacerts -storepass changeit

যদি আপনার কোন ত্রুটি হয়ে থাকে তবে কীটোলটি সনাক্তযোগ্য নয় দয়া করে উল্লেখ করুন।

নীচের মত হ্যাঁ টাইপ করুন

এই শংসাপত্রকে বিশ্বাস করুন: [হ্যাঁ]

  1. এখন আপনার কোড চালানোর চেষ্টা করুন বা জাভা ব্যবহার করে প্রোগ্রামটিমে URL টি অ্যাক্সেস করুন।

হালনাগাদ

যদি আপনার অ্যাপ্লিকেশন সার্ভারটি jboss হয় তবে সিস্টেমের সম্পত্তিটি নীচে যুক্ত করার চেষ্টা করুন

System.setProperty("org.jboss.security.ignoreHttpsHost","true");

আশাকরি এটা সাহায্য করবে!


1

নিষ্পত্তি সমাধান (আলপাইন লিনাক্স)

আমাদের অ্যাপ্লিকেশন পরিবেশে এই সমস্যাটি সমাধান করতে সক্ষম হতে আমরা লিনাক্স টার্মিনাল কমান্ডগুলি নিম্নলিখিতভাবে প্রস্তুত করেছি:

cd ~

হোম ডিরেক্টরিতে সার্ট ফাইল তৈরি করবে।

apk add openssl

এই কমান্ডটি আলপাইন লিনাক্সে ওপেনসেল ইনস্টল করে। আপনি অন্যান্য লিনাক্স ডিস্ট্রিবিউশনের জন্য সঠিক কমান্ডগুলি সন্ধান করতে পারেন।

openssl s_client -connect <host-dns-ssl-belongs> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

প্রয়োজনীয় শংসাপত্র ফাইল তৈরি করেছে।

sudo $JAVA_HOME/bin/keytool -import -alias server_name -keystore $JAVA_HOME/lib/security/cacerts -file public.crt -storepass changeit -noprompt

জেনারেট হওয়া ফাইলটি 'কীটোল' প্রোগ্রামটি দিয়ে জেআরই-তে প্রয়োগ করা হয়েছে।

বিঃদ্রঃ: দয়া করে আপনার ডিএনএস এর সাথে প্রতিস্থাপন করুন<host-dns-ssl-belongs>

নোট 2 : দয়া করে আলতো করে নোট করুন-noprompt যাচাইকরণ বার্তাটি প্রম্পট করবে না (হ্যাঁ / না) এবং -storepass changeitপরামিতি পাসওয়ার্ড প্রম্পটটি অক্ষম করবে এবং প্রয়োজনীয় পাসওয়ার্ড সরবরাহ করবে (ডিফল্টটি 'চেঞ্জিট')) এই দুটি বৈশিষ্ট্য আপনাকে আপনার অ্যাপ্লিকেশন পরিবেশে সেই স্ক্রিপ্টগুলি ব্যবহার করতে দেবে যেমন ডকার চিত্র তৈরি করা।

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


0

আমারও এই সমস্যা আছে।

আমি। কিস্টোরগুলিতে এসএসএল শংসাপত্র যুক্ত করে প্রায় সবকিছু চেষ্টা করেছিলাম, তবে, এটি জাভা 1_6_x এর সাথে কাজ করে নি। আমার জন্য এটি যদি জাভা, জাভা 1_8_x এর জেভিএম হিসাবে নতুন সংস্করণ ব্যবহার করা শুরু করে তবে এটি আমাদের পক্ষে সহায়তা করেছিল।


1
আমার জন্যও একই. জাভা 1.8.0_91 থেকে 1.8.0_121 এ একটি আপডেট সমস্যার সমাধান করেছে। অ্যাপাচি এইচটিটিপি ক্লিনেন্ট ব্যবহার করে আমি ব্যতিক্রম পেয়েছি।
দেবব্যাক

Oauth2 প্রমাণীকরণ
সোফিয়ান

0

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

আমি অনুপস্থিত প্রক্সি শংসাপত্রটি ট্রস্টস্টোরে অবস্থিত /Users/[username]/Documents/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/security/cacerts

নিম্নলিখিত কমান্ড সহ: keytool -import -trustcacerts -keystore cacerts -storepass [password] -noprompt -alias [alias] -file [my_certificate_location]

উদাহরণস্বরূপ, ডিফল্ট ট্রস্টস্টোর পাসওয়ার্ড সহ keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias myproxycert -file /Users/myname/Downloads/MyProxy.crt


0

শুধু একটি ছোট হ্যাক। Https থেকে http এ "hudson.model.UpdateCenter.xML" ফাইলটিতে URL আপডেট করুন

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://updates.jenkins.io/update-center.json</url>
  </site>
</sites>

0

আমি চিম করতে চাই যেহেতু আমার একটি কিউইএমইউ পরিবেশ রয়েছে যেখানে আমাকে জাভাতে ফাইল ডাউনলোড করতে হবে। এটি /etc/ssl/certs/java/cacertsকিউইএমইউ-তে সমস্যা আছে কারণ এটির সাথে মেলে না/etc/ssl/certs/java/cacerts হোস্ট পরিবেশে । হোস্ট পরিবেশটি কোনও সংস্থার প্রক্সিের পিছনে থাকে তাই জাভা ক্যাচার্টগুলি একটি কাস্টমাইজড সংস্করণ।

আপনি যদি কোনও QEMU পরিবেশ ব্যবহার করছেন তবে হোস্ট সিস্টেমটি প্রথমে ফাইলগুলি অ্যাক্সেস করতে পারে তা নিশ্চিত করুন make উদাহরণস্বরূপ আপনি প্রথমে আপনার হোস্ট মেশিনে এই স্ক্রিপ্টটি ব্যবহার করে দেখতে পারেন। যদি স্ক্রিপ্টটি কেবল হোস্ট মেশিনে চলে তবে কিউইএমইউতে না, তবে আমার মতো আপনারও সমস্যা হচ্ছে।

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

এর থেকে আরও ভাল সমাধান /etcহ'ল কিউইউএমইউ পরিবেশে মাউন্ট করা; তবে আমি নিশ্চিত নই যে এই প্রক্রিয়াতে অন্যান্য ফাইলগুলি প্রভাব ফেলবে কিনা। তাই আমি সিদ্ধান্ত নিয়েছি যে এই কুরুচিপূর্ণ তবে সহজ কাজের চারপাশে ব্যবহার করব।


0

কুখ্যাত PKIX ত্রুটি বার্তার জন্য অন্য কোনও সম্ভাব্য কারণ ডকুমেন্ট করার জন্য এটি যে কোনও জায়গা হিসাবে ভাল বলে মনে হয়। কীস্টোর এবং ট্রস্টস্টোরের সামগ্রী এবং বিভিন্ন জাভা ইনস্টলেশন কনফিগারেশনে অনেক দীর্ঘ সময় ব্যয় করার পরে আমি বুঝতে পেরেছিলাম যে আমার সমস্যাটি ... একটি টাইপও ডাউন।

টাইপোর অর্থ হ'ল আমি কীস্টোরটি ট্রস্টস্টোর হিসাবেও ব্যবহার করছিলাম। আমার সংস্থাগুলি রুট সিএকে কীস্টোরে স্ট্যান্ডলোন সার্ট হিসাবে সংজ্ঞায়িত করা হয়নি তবে কেবল একটি শংসাপত্রের চেইনের অংশ হিসাবে চিহ্নিত করা হয়েছিল এবং অন্য কোথাও সংজ্ঞায়িত করা হয়নি (অর্থাত্ কেসেটস) আমি পিকেআইএস ত্রুটি পেয়ে চলেছি।

একটি ব্যর্থ রিলিজের পরে (এটি প্রোড কনফিগারেশন, এটি অন্য কোথাও ঠিক ছিল) এবং দু'দিনের মাথা চুলকানো শেষ পর্যন্ত টাইপোটি দেখলাম, এবং এখন সব ঠিক আছে।

আশা করি এটি কাউকে সাহায্য করবে।


-1

এটি আপনার কোডে যুক্ত করুন:

TrustManager[] trustAllCerts = new TrustManager[]{
           new X509TrustManager() {
               @Override
               public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                   return new X509Certificate[0];
               }

               @Override
               public void checkClientTrusted(
                       java.security.cert.X509Certificate[] certs, String authType) {
               }

               @Override
               public void checkServerTrusted(
                       java.security.cert.X509Certificate[] certs, String authType) {
               }
           }
       };

       try {
           SSLContext sc = SSLContext.getInstance("SSL");
           sc.init(null, trustAllCerts, new java.security.SecureRandom());
           HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
       } catch (GeneralSecurityException e) {
       }

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

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