এসএসএল হ্যান্ডশেক কেন 'ডিএইচ কীপেইার তৈরি করতে পারে না' ব্যতিক্রম দেয়?


142

আমি যখন কিছু আইআরসি সার্ভারের সাথে কোনও এসএসএল সংযোগ করি (তবে অন্যরা নয় - সম্ভবত সার্ভারের পছন্দসই এনক্রিপশন পদ্ধতির কারণে) আমি নিম্নলিখিত ব্যতিক্রম পাই:

Caused by: java.lang.RuntimeException: Could not generate DH keypair
    at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:106)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
    ... 3 more

চূড়ান্ত কারণ:

Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
    at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
    at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
    at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:100)
    ... 10 more

এই সমস্যাটি দেখায় এমন একটি সার্ভারের উদাহরণ হ'ল অ্যাপারচার.এস্পার.नेट: 6969697 (এটি একটি আইআরসি সার্ভার)। সমস্যাটি প্রদর্শন করে না এমন একটি সার্ভারের একটি উদাহরণ হল kornbluth.freenode.net:6697। [অবাক হওয়ার মতো বিষয় নয়, প্রতিটি নেটওয়ার্কের সমস্ত সার্ভার একই আচরণ করে]

আমার কোড (যা উল্লিখিত হিসাবে কিছু এসএসএল সার্ভারের সাথে সংযোগ করার সময় কাজ করে) হল:

    SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, trustAllCerts, new SecureRandom());
    s = (SSLSocket)sslContext.getSocketFactory().createSocket();
    s.connect(new InetSocketAddress(host, port), timeout);
    s.setSoTimeout(0);
    ((SSLSocket)s).startHandshake();

এটিই সর্বশেষ শুরু হ্যান্ডশেক যা ব্যতিক্রম ছুঁড়ে। এবং হ্যাঁ 'ট্রাস্টএলকার্টস' নিয়ে কিছু জাদু চলছে; এই কোডটি এসএসএল সিস্টেমকে শংসাপত্রগুলি বৈধতা দিতে বাধ্য করে। (সুতরাং ... শংসাপত্রের সমস্যা নয়))

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

কমান্ডলাইন থেকে 'ওপেনসেল' ব্যবহার করে আমি যখন অ্যাপারচার.এস্পার.net 6697 এ সংযুক্ত থাকি তখন কী হয় তা এখানে:

~ $ openssl s_client -connect aperture.esper.net:6697
CONNECTED(00000003)
depth=0 /C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
verify return:1
---
Certificate chain
 0 s:/C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
   i:/C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
---
Server certificate
-----BEGIN CERTIFICATE-----
[There was a certificate here, but I deleted it to save space]
-----END CERTIFICATE-----
subject=/C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
issuer=/C=GB/ST=England/L=London/O=EsperNet/OU=aperture.esper.net/CN=*.esper.net/emailAddress=support@esper.net
---
No client certificate CA names sent
---
SSL handshake has read 2178 bytes and written 468 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 51F1D40A1B044700365D3BD1C61ABC745FB0C347A334E1410946DCB5EFE37AFD
    Session-ID-ctx: 
    Master-Key: DF8194F6A60B073E049C87284856B5561476315145B55E35811028C4D97F77696F676DB019BB6E271E9965F289A99083
    Key-Arg   : None
    Start Time: 1311801833
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---

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

এটি প্রাসঙ্গিক হওয়া উচিত, আমি ওএস এক্স 10.6.8, জাভা সংস্করণ 1.6.0_26 ব্যবহার করছি।


2
কারণ এই মনে করা হয়: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)। সার্ভারের মাধ্যমে এখানে কোন আকারটি প্রেরণ করা হয়েছিল এবং স্পেসিফিকেশন এ সম্পর্কে কী বলেছে তা ধারণা নেই।
পাওলো ইবারম্যান

@ PaŭloEbermann: আসলে আপনি opensslপ্রশ্নটিতে আউটপুটে ব্যবহৃত সার্ভারটি যে আকারটি দেখতে পাবেন : "সাইফার হ'ল ডিএইচই-আরএসএ-এএস 256-এসএএ, সার্ভার পাবলিক কী 2048 বিট"। এবং 2048> 1024 :-)।
sleske

@ সালস্ক: ঠিক না Server public key (size)ছিল, এবং, সার্টিটির মূল কী ছিল। s_client২০১১ সালে সামান্য কী দেখায়নি; 2015 সালে 1.0.2 এবং Server Temp Keyউচ্চতর বেশ কয়েকটি লাইন উচ্চতর হিসাবে কাজ করে । যদিও একটি ভাল সার্ভারটি সাধারণত ডিএইচই আকারটিকে আরএসএ-প্রমাণীকরণের আকারের মতো করে তোলে।
dave_thompson_085

উত্তর:


117

সমস্যাটি প্রধান আকারের। জাভা সর্বাধিক গ্রহণযোগ্য আকার হ'ল 1024 বিট। এটি একটি পরিচিত সমস্যা (দেখুন জেডিকে -6521495 )।

বাগ রিপোর্ট যে আমি লিঙ্ক একটি উল্লেখ কার্যসংক্রান্ত BouncyCastle এর JCE বাস্তবায়ন ব্যবহার করে। আশা করি এটি আপনার পক্ষে কাজ করা উচিত।

হালনাগাদ

এটি বাগ JDK-7044060 হিসাবে রিপোর্ট করা হয়েছিল এবং সম্প্রতি এটি স্থির করা হয়েছে।

তবে নোট করুন, সীমাটি কেবলমাত্র 2048 বিটে বাড়ানো হয়েছিল। আকারগুলির জন্য> 2048 বিটের জন্য, জেডিকে -8072452 রয়েছে - ডিএইচ কীগুলির সর্বাধিক প্রাথমিক আকার সরান ; ঠিক 9 এর জন্য বলে মনে হচ্ছে।


14
+1 টি। যার যার সান ডেভেলপার নেটওয়ার্ক অ্যাকাউন্ট রয়েছে, দয়া করে এই বাগের জন্য ভোট দিন।
পাওলো ইবারম্যান

1
ধন্যবাদ। একটি বৃহত আকারের অনুরোধ করা সার্ভারগুলির অস্তিত্ব প্রদত্ত একটি দুর্দান্ত গুরুতর সমস্যা বলে মনে হচ্ছে! :( আমি বাউন্সিস্টেল চেষ্টা করেছিলাম; যদি আপনি এটি পছন্দসই সরবরাহকারী হিসাবে সেট আপ করেন তবে এটি পৃথক ব্যতিক্রম (দীর্ঘশ্বাস) সহ ক্র্যাশ হয়ে যায় এবং আমি কেবল ডিএইচ-র জন্য এটি ব্যবহারের একটি সুস্পষ্ট উপায় দেখতে পাচ্ছি না, তবে আমি একটি বিকল্প সমাধান খুঁজে পেয়েছি, যা আমি 'একটি নতুন উত্তর হিসাবে যুক্ত করতে হবে (এটা প্রশংসনীয় নয়।)।
স্যাম

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

2
2048 ফিক্সটি আইসডটিয়া 2.5.3 এ ব্যাকপোর্ট করা হয়েছিল। আইসেডের নতুন সংস্করণগুলি এটিকে 4096 এ উন্নীত করেছে
fuzzyTew

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

67

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

ম্যাক ওএসসি 10.7.5-তে জাভা 1.6.0_65-b14-462 ব্যবহার করে আমি যে পদক্ষেপগুলি নিয়েছি তা এখানে

1) এই জারগুলি ডাউনলোড করুন:

2) এই জারগুলি $ জাভাআহোম / লিবিব / এক্সট্রে সরান

3) সম্পাদনা করুন follows জাভাএহোম / লিবিব / সুরক্ষা / জাভা.সিকিউরিটি নীচে: সুরক্ষা.প্রভাইডার .১ = org.bouncycastle.jce.provider.BouncyCastleProvider

জেআরই ব্যবহার করে অ্যাপ্লিকেশন পুনরায় চালু করুন এবং একবার ব্যবহার করে দেখুন


5
আমার জন্য কাজ কর! যদিও আমি নিশ্চিত তা নিশ্চিত নয়।
ডাইভইন্টো

11
security.provider.2 = org.bouncycastle.jce.provider.BouncyCastleProvider আরও ভাল কাজ করেছে, এটি 1 এ রেখেছে ডিফল্ট সফ্টওয়্যারটিতে ত্রুটির ফলে।
টিনুসস্কি

1
এটি আমার পক্ষেও কার্যকর, তবে আমি গতিশীলভাবে একটি সরবরাহকারী যুক্ত করেছি। বিস্তারিত জানার জন্য আমার উত্তর এখানে রেফার করুন।
v.ladynev

একটি টন ধন্যবাদ, এটি আমার জন্য কাজ করেছে এবং টমক্যাট 7.0.78 উত্সটি সফলভাবে তৈরি করার জন্য প্রয়োজনীয় ছিল।
ফিলিপুনিভারসি

@ mjj1409, জাভা 1.5 তে আমাদের $ জাভাআহোম / লিব / সুরক্ষা পথ নেই
মোস্তফা

15

এখানে আমার সমাধান (জাভা ১.6) রয়েছে, আগ্রহী হবেন কেন আমাকে এটি করতে হয়েছিল:

আমি জাভ্যাক্স.সিকিউরিটি.ডিবাগ = এসএসএল থেকে লক্ষ্য করেছি যে, কখনও কখনও ব্যবহৃত সিফার স্যুট টিএলএস_ডিএইচই হয়..... এবং কখনও কখনও এটি টিএলএস_ইসিডিএইচটি হয় ............. পরে যদি আমি বাউন্সিস্টেল যুক্ত করেছিলাম তবে ঘটবে। যদি টিএলএস_ইসিডিএইচটি নির্বাচিত হয়, তবে বেশিরভাগ সময় এটি কাজ করেছিল, কিন্তু সবসময় নয়, সুতরাং বাউনসিস্টেল সরবরাহকারীকে যুক্ত করা বিশ্বাসযোগ্য ছিল না (প্রতিবার বা অন্য কোনও সময় একই ত্রুটির সাথে ব্যর্থ হয়েছিল)। কোথাও সূর্যের SSL এর বাস্তবায়নের অনুমান কখনও কখনও এটি পছন্দ DHE , কখনও কখনও এটা পছন্দ করে ECDHE

সুতরাং এখানে পোস্ট করা সমাধান টিএলএস_ডেহ সাইফারগুলি সম্পূর্ণরূপে অপসারণের উপর নির্ভর করে। দ্রষ্টব্য: সমাধানের জন্য বাউন্সি ক্যাসল প্রয়োজন হয় না।

সুতরাং এর দ্বারা সার্ভার শংসাপত্র ফাইলটি তৈরি করুন:

echo |openssl s_client -connect example.org:443 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

এটি সংরক্ষণ করুন কারণ এটি পরে উল্লেখ করা হবে, এখানে টিএসএলএস_ডিএইচপি সাইফার স্যুইটগুলি বাদ দিয়ে কোনও এসএসএল http পাওয়ার সমাধান রয়েছে।

package org.example.security;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

import org.apache.log4j.Logger;

public class SSLExcludeCipherConnectionHelper {

    private Logger logger = Logger.getLogger(SSLExcludeCipherConnectionHelper.class);

    private String[] exludedCipherSuites = {"_DHE_","_DH_"};

    private String trustCert = null;

    private TrustManagerFactory tmf;

    public void setExludedCipherSuites(String[] exludedCipherSuites) {
        this.exludedCipherSuites = exludedCipherSuites;
    }

    public SSLExcludeCipherConnectionHelper(String trustCert) {
        super();
        this.trustCert = trustCert;
        //Security.addProvider(new BouncyCastleProvider());
        try {
            this.initTrustManager();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void initTrustManager() throws Exception {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream caInput = new BufferedInputStream(new FileInputStream(trustCert));
        Certificate ca = null;
        try {
            ca = cf.generateCertificate(caInput);
            logger.debug("ca=" + ((X509Certificate) ca).getSubjectDN());
        } finally {
            caInput.close();
        }

        // Create a KeyStore containing our trusted CAs
        KeyStore keyStore = KeyStore.getInstance("jks");
        keyStore.load(null, null);
        keyStore.setCertificateEntry("ca", ca);

        // Create a TrustManager that trusts the CAs in our KeyStore
        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);
    }

    public String get(URL url) throws Exception {
        // Create an SSLContext that uses our TrustManager
        SSLContext context = SSLContext.getInstance("TLS");
        context.init(null, tmf.getTrustManagers(), null);
        SSLParameters params = context.getSupportedSSLParameters();
        List<String> enabledCiphers = new ArrayList<String>();
        for (String cipher : params.getCipherSuites()) {
            boolean exclude = false;
            if (exludedCipherSuites != null) {
                for (int i=0; i<exludedCipherSuites.length && !exclude; i++) {
                    exclude = cipher.indexOf(exludedCipherSuites[i]) >= 0;
                }
            }
            if (!exclude) {
                enabledCiphers.add(cipher);
            }
        }
        String[] cArray = new String[enabledCiphers.size()];
        enabledCiphers.toArray(cArray);

        // Tell the URLConnection to use a SocketFactory from our SSLContext
        HttpsURLConnection urlConnection =
            (HttpsURLConnection)url.openConnection();
        SSLSocketFactory sf = context.getSocketFactory();
        sf = new DOSSLSocketFactory(sf, cArray);
        urlConnection.setSSLSocketFactory(sf);
        BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
        String inputLine;
        StringBuffer buffer = new StringBuffer();
        while ((inputLine = in.readLine()) != null) 
            buffer.append(inputLine);
        in.close();

        return buffer.toString();
    }

    private class DOSSLSocketFactory extends javax.net.ssl.SSLSocketFactory {

        private SSLSocketFactory sf = null;
        private String[] enabledCiphers = null;

        private DOSSLSocketFactory(SSLSocketFactory sf, String[] enabledCiphers) {
            super();
            this.sf = sf;
            this.enabledCiphers = enabledCiphers;
        }

        private Socket getSocketWithEnabledCiphers(Socket socket) {
            if (enabledCiphers != null && socket != null && socket instanceof SSLSocket)
                ((SSLSocket)socket).setEnabledCipherSuites(enabledCiphers);

            return socket;
        }

        @Override
        public Socket createSocket(Socket s, String host, int port,
                boolean autoClose) throws IOException {
            return getSocketWithEnabledCiphers(sf.createSocket(s, host, port, autoClose));
        }

        @Override
        public String[] getDefaultCipherSuites() {
            return sf.getDefaultCipherSuites();
        }

        @Override
        public String[] getSupportedCipherSuites() {
            if (enabledCiphers == null)
                return sf.getSupportedCipherSuites();
            else
                return enabledCiphers;
        }

        @Override
        public Socket createSocket(String host, int port) throws IOException,
                UnknownHostException {
            return getSocketWithEnabledCiphers(sf.createSocket(host, port));
        }

        @Override
        public Socket createSocket(InetAddress address, int port)
                throws IOException {
            return getSocketWithEnabledCiphers(sf.createSocket(address, port));
        }

        @Override
        public Socket createSocket(String host, int port, InetAddress localAddress,
                int localPort) throws IOException, UnknownHostException {
            return getSocketWithEnabledCiphers(sf.createSocket(host, port, localAddress, localPort));
        }

        @Override
        public Socket createSocket(InetAddress address, int port,
                InetAddress localaddress, int localport) throws IOException {
            return getSocketWithEnabledCiphers(sf.createSocket(address, port, localaddress, localport));
        }

    }
}

অবশেষে এখানে এটি কীভাবে ব্যবহার করা হয় (সার্টিফিকেটের পথ যদি ওপেনসেল থেকে সংরক্ষণ করা হয়):

try {
            URL url = new URL("https://www.example.org?q=somedata");            
            SSLExcludeCipherConnectionHelper sslExclHelper = new SSLExcludeCipherConnectionHelper(certFilePath);
            logger.debug(
                    sslExclHelper.get(url)
            );
        } catch (Exception ex) {
            ex.printStackTrace();
        }

9
সবেমাত্র আপনার সমাধানটি পরীক্ষা করা হয়েছে। এটি উদ্দেশ্য হিসাবে কাজ করছে। ধন্যবাদ। আসলে, শুধু যোগ jdk.tls.disabledAlgorithms=DHE, ECDHEমধ্যে JDK_HOME/jre/lib/security/java.securityএছাড়াও কাজ করে এবং সব এই কোড এড়ানো।
লুডোভিক গিলিয়াম

3
শুধু অক্ষম DHE আমার জন্য কাজ: jdk.tls.disabledAlgorithms=DHE। 1.7.0_85-বি 15 ব্যবহার করে।
স্টেফান

1
জেডি কে.হুলস / জেআর / লিবিব / সুরক্ষা / জাভা.সিকিউরিটিতে jdk.tls.disabledAlgorithms = DHE, ECDHE যুক্ত হয়েছে এবং সূক্ষ্মভাবে কাজ করেছে! ধন্যবাদ! 1.7.0_79 ব্যবহার করছেন
এরিক না

1
ইসিডিএইচই অক্ষম করবেন না। এটি ডিএইচই থেকে পৃথক এবং এমনকি প্রাথমিক সংখ্যা ব্যবহার করে না।
কুবাঞ্চিক

1
কেউ কী দয়া করে আমাকে বলবেন আমি কীভাবে 'সার্টিফিলপথ' পেতে পারি। আমি এক সপ্তাহ ধরে এই আটকে ছিলাম। @ Zsozso
ব্যবহারকারী 1172490

13

উপরের উত্তরটি সঠিক, তবে কাজের ভিত্তিতে আমি যখন বাঞ্ছনীয় প্রাসঙ্গিক হিসাবে এটি সরবরাহকারী হিসাবে সেট করেছি তখন আমার বাউন্সিস্টল বাস্তবায়নে সমস্যা হয়েছিল:

java.lang.ArrayIndexOutOfBoundsException: 64
    at com.sun.crypto.provider.TlsPrfGenerator.expand(DashoA13*..)

এটি আমার পাওয়া একটি ফোরাম থ্রেডেও আলোচনা করা হয়েছে, যা কোনও সমাধানের কথা উল্লেখ করে না। http://www.javakb.com/Uwe/Forum.aspx/java-programmer/47512/TLS-problems

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

এখানে একটি কোড যা একটি এসএসএলকেট প্রদত্ত কাজ করে (আপনি এটি সংযোগ দেওয়ার আগে):

List<String> limited = new LinkedList<String>();
for(String suite : ((SSLSocket)s).getEnabledCipherSuites())
{
    if(!suite.contains("_DHE_"))
    {
        limited.add(suite);
    }
}
((SSLSocket)s).setEnabledCipherSuites(limited.toArray(
    new String[limited.size()]));

কদর্য।


1
দুঃখের বিষয় যে এটিই একমাত্র উপায় :( That টিকিটটি '07 সাল থেকে উন্মুক্ত
St অবাক হ'ল

আমি জাভা সিকিউরিটিজে নতুন। দয়া করে সহায়তা করুন আমি এই টুকরা কোডটি কোথায় লিখব?
শশাঙ্ক

আমি এই থ্রেডে প্রতিটি সমাধান চেষ্টা করেছি এবং এটিই ছিল আমার আইবিএম জেভিএম (আইবিএম-জাভা-এস390 এক্স -60) এর সাথে কাজ করে।
জিয়ানলুকা গ্রিকো

@ সাম, ((এসএসএলসকেট) গুলি) এর ভেরিয়েবল কী?
মোস্তফা

13

আপনি আপনার জেডিকে ডিএইচই সম্পূর্ণ অক্ষম করতে পারবেন, জে / লিব / সুরক্ষা / জাভা সম্পাদনা করতে পারবেন এবং নিশ্চিত করুন যে ডিএইচই অক্ষম রয়েছে, যেমন is মত

jdk.tls.disabledAlgorithms=SSLv3, DHE


4
এটি কেবল জেডিকে 1.7 এবং তার পরে পাওয়া যাবে। লিঙ্ক
হোয়াংথিয়েনান

JDK 1.8.0_144-b01
মিঃ

12

আপনি সরবরাহকারীকে গতিশীলভাবে ইনস্টল করতে পারেন:

1) এই জারগুলি ডাউনলোড করুন:

  • bcprov-jdk15on-152.jar
  • bcprov-ext-jdk15on-152.jar

2) WEB-INF/libজারগুলি অনুলিপি করুন (বা আপনার শ্রেণিবদ্ধ)

3) গতিশীলভাবে সরবরাহকারী যুক্ত করুন:

import org.bouncycastle.jce.provider.BouncyCastleProvider;

...

Security.addProvider(new BouncyCastleProvider());


এই সমাধানটি ভালভাবে কাজ করে, এবং আমার ক্ষেত্রে এটি বেশ উপযুক্ত since ধন্যবাদ
hanশানবাक्षी

ধন্যবাদ! এটি আমার জন্য কাজ করেছে। আমার ক্ষেত্রে এটি বিসিপি ১.৪ আমদানি করেছিল যা গুগলে ইমেলগুলি ব্যর্থ করে দেয়।
জাপেথ ওঙ্গেরি - ইঙ্কালিমেভা

আমি javax.net.ssl.SSL.HandshakeException পেয়ে যাচ্ছি: অসমর্থিত বক্ররেখার আইডি: 29 জাভা সংস্করণ সহ 1.6.0_27
অন্য কোডার


6

আপনি যদি jdk1.7.0_04 ব্যবহার করছেন, jdk1.7.0_21 এ আপগ্রেড করুন। এই আপডেটে সমস্যাটি স্থির করা হয়েছে।




আপডেট জে আমার জন্য কাজ করেছে। 6.22 আপডেট হয়েছে 7.59। সমস্যা সমাধান.
এলাজারন

1
@ শশাঙ্ক - জেডিকে 1.8.0_73 এ আপগ্রেড করা আমার পক্ষে কাজ করেছে।
dgoverde

বিট লেন্থ বৃহত্তর 1024 সঙ্গে DHKeyPairs থেকে চালু JDK 1.7.0_91 কিন্তু পাওয়া সার্বজনীন নয়।
আরেকটি কোডার

6

আপনার ভুল মাভেন নির্ভরতা থাকতে পারে এটা সম্ভব। আপনাকে অবশ্যই এই লাইব্রেরিগুলি ম্যাভেন নির্ভরতা শ্রেণিবিন্যাসে খুঁজে পেতে হবে:

bcprov-jdk14, bcpkix-jdk14, bcmail-jdk14

আপনার যদি এই নির্ভরতা থাকে তবে এটি ত্রুটি এবং আপনার এটি করা উচিত:

নির্ভরতা যুক্ত করুন:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcmail-jdk15on</artifactId>
    <version>1.59</version>
</dependency>

ভুল নির্ভরতা অন্তর্ভুক্ত শিল্পকর্ম থেকে এই নির্ভরশীলতা বাদ দিন, আমার ক্ষেত্রে এটি:

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
    <exclusions>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bctsp-jdk14</artifactId>                
        </exclusion>
        <exclusion>
            <groupId>bouncycastle</groupId>
            <artifactId>bcprov-jdk14</artifactId>               
        </exclusion>
        <exclusion>
            <groupId>bouncycastle</groupId>
            <artifactId>bcmail-jdk14</artifactId>               
        </exclusion>
    </exclusions>       
</dependency>

প্রশ্নটি ইতিমধ্যে অনেক উত্তর পেয়েছে এবং এর একটি বৈধ উত্তর রয়েছে। তাছাড়া প্রশ্নটি আরও 6 বছর আগে জিজ্ঞাসা করা হয়েছে। এটি এখনও প্রাসঙ্গিক কিনা আমি নিশ্চিত নই।
ডেভিড গায়ন

5

জাভা ডাউনলোড সাইট থেকে "জাভা ক্রিপ্টোগ্রাফি এক্সটেনশন (জেসিই) আনলিমিটেড স্ট্রেংথ এখুনডিকশন পলিসি ফাইলস" ডাউনলোড করার চেষ্টা করুন এবং আপনার জেআরইতে ফাইলগুলি প্রতিস্থাপন করুন।

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

পুনশ্চ. আমি যখন পলিসি ফাইলগুলি পরিবর্তন করার আগে বাউন্সিস্টেল ব্যবহার করার চেষ্টা করেছি তখন আমি একই ত্রুটি পেয়েছি (অ্যারেআইএনডেক্সআউটআউটবাউন্ডসেক্সপশন: )৪)


আপনি অন্য কোথাও কিছু করেছেন? অথবা ফোল্ডারে 2 টি ফাইল অনুলিপি করেছেন?
জোয়ারগি

এটি একটি সময় হয়েছে তবে যতদূর আমার মনে আছে, আমার যা করার দরকার ছিল তা কেবল। পরে কোনও চলমান জাভা প্রক্রিয়া পুনরায় চালু করা ছাড়াও।
mjomble

5

যদি আপনি এখনও এই ইস্যুতে কামড়ে পড়ে থাকেন এবং আপনি অ্যাপাচি httpd v> ২.৪. are ব্যবহার করছেন তবে এটি চেষ্টা করুন: http://httpd.apache.org/docs/current/ssl/ssl_faq.html#javadh

ইউআরএল থেকে অনুলিপি :

সংস্করণ ২.৪..7 দিয়ে শুরু করে, মোড_এসএল DH পরামিতি ব্যবহার করবে যার মধ্যে 1024 বিটের বেশি দৈর্ঘ্যের প্রাইম রয়েছে। জাভা 7 এবং এর আগে ডিএইচ প্রাইম আকারগুলির জন্য তাদের সমর্থন সর্বাধিক 1024 বিটের মধ্যে সীমাবদ্ধ করে।

যদি আপনার জাভা-ভিত্তিক ক্লায়েন্ট জাভা.এলং.রুনটাইম এক্সেকশন হিসাবে ব্যতিক্রমগুলি সহ অবতরণ করে: ডিএইচ কিপায়ার এবং জাভা.সিকিউরিটি উত্পন্ন করতে পারে না n অবৈধ অ্যালগোরিদমপ্যারামিটার এক্সেক্সশন: প্রাইম আকারটি of৪ এর একাধিক হতে পারে এবং এটি কেবল 512 থেকে 1024 (অন্তর্ভুক্ত) এর মধ্যে হতে পারে and httpd লগগুলি tlsv1 সতর্কতা অভ্যন্তরীণ ত্রুটি (এসএসএল সতর্কতা নম্বর 80) (লগলিল তথ্য বা উচ্চতরতে), আপনি মোড_এসএল এর সিফার তালিকাটি এসএসএল সিফারসুয়েটের সাথে পুনঃবিন্যাস করতে পারেন (সম্ভবত এসএসএলহোনারসিফারআর্ডারের সাথে একত্রে), বা আপনি 1024-বিট প্রাইম সহ কাস্টম ডিএইচ প্যারামিটার ব্যবহার করতে পারেন , যা সর্বদা অন্তর্নির্মিত ডিএইচ প্যারামিটারগুলির চেয়ে বেশি থাকবে।

কাস্টম ডিএইচ প্যারামিটার তৈরি করতে, ব্যবহার করুন

ওপেনএসএল ধাপরম 1024

কমান্ড। বিকল্পভাবে, আপনি আরএফসি 2409, বিভাগ 6.2 থেকে নিম্নলিখিত মানক 1024-বিট ডিএইচ প্যারামিটারগুলি ব্যবহার করতে পারেন:

-----BEGIN DH PARAMETERS-----
MIGHAoGBAP//////////yQ/aoiFowjTExmKLgNwc0SkCTgiKZ8x0Agu+pjsTmyJR
Sgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVtbVHCReSFtXZiXn7G9ExC6aY37WsL
/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR7OZTgf//////////AgEC
-----END DH PARAMETERS-----

আপনি এসএসএল সার্টিফিকেট ফাইল নির্দেশিকা ব্যবহার করে কনফিগার করেছেন এমন প্রথম শংসাপত্র ফাইলের শেষে "শুরু করুন ডিএইচ প্যারামিটারস" এবং "এন্ড ডিএইচ প্যারামিটারস" লাইন সহ কাস্টম প্যারামিটারগুলি যুক্ত করুন।


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


সচেতন থাকুন যে এখন এটি বিশ্বাস করা হয় যে 1024 বিট ডিএইচ ভাঙ্গার জন্য গণ্যমান্যভাবে সম্ভব (যদিও নরকীয় ব্যয়বহুল)।
প্লাগওয়াশ

2

আমার ইয়ানডেক্স মানচিত্রের সার্ভার, জেডিকে ১.6 এবং অ্যাপাচি এইচটিপিপ্লায়েন্ট ৪.২.১ নিয়ে একই সমস্যা রয়েছে। ত্রুটি ছিল

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

সক্রিয় ডিবাগ সহ -Djavax.net.debug=all একটি লগতে একটি বার্তা ছিল

Could not generate DH keypair

আমি বাউন্সিস্টল লাইব্রেরি যুক্ত করে bcprov-jdk16-1.46.jarএবং একটি মানচিত্র পরিষেবা শ্রেণিতে কোনও সরবরাহকারীর নিবন্ধকরণ করে এই সমস্যাটি সমাধান করেছি

public class MapService {

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public GeocodeResult geocode() {

    }

}

একটি সরবরাহকারীর প্রথম ব্যবহারের নিবন্ধভুক্ত করা হয় MapService


2

আমি JDK 6 চালিত একটি CentOS সার্ভারে SSL ত্রুটির মুখোমুখি হয়েছি।

আমার পরিকল্পনা ছিল জেডিকে 6 এর সহাবস্থান করার জন্য একটি উচ্চতর জেডিকে সংস্করণ (জেডিকে)) ইনস্টল করার ছিল তবে এটি প্রমাণিত হয়েছে যে কেবলমাত্র নতুন জেডিকে ইনস্টল করা rpm -iযথেষ্ট ছিল না।

JDK 7 ইনস্টলেশনটি কেবল rpm -Uনীচে চিত্রিত হিসাবে আপগ্রেড বিকল্পের সাহায্যে সফল হবে ।

1. জেডিকে 7 ডাউনলোড করুন

wget -O /root/jdk-7u79-linux-x64.rpm --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; o raclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.rpm"

২. আরপিএম ইনস্টলেশন ব্যর্থ হয়েছে

rpm -ivh jdk-7u79-linux-x64.rpm
Preparing...                ########################################### [100%]
        file /etc/init.d/jexec from install of jdk-2000:1.7.0_79-fcs.x86_64 conflicts with file from package jdk-2000:1.6.0_43-fcs.x86_64

৩. আরপিএম আপগ্রেড সফল হয়েছে

rpm -Uvh jdk-7u79-linux-x64.rpm
Preparing...                ########################################### [100%]
   1:jdk                    ########################################### [100%]
Unpacking JAR files...
        rt.jar...
        jsse.jar...
        charsets.jar...
        tools.jar...
        localedata.jar...
        jfxrt.jar...

৪. নতুন সংস্করণটি নিশ্চিত করুন

java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

1

জেডিকে 8 তে আপগ্রেড করে সমস্যার সমাধান করুন।


1

আমি জেডিকে ১.6.৪৫ তে কোল্ডফিউশন 8 ব্যবহার করেছি এবং আমাকে চিত্রগুলির পরিবর্তে কেবল লাল ক্রস দেওয়ার ক্ষেত্রে সমস্যা ছিল এবং সিএফএইচটিপিও এসএসএল সহ স্থানীয় ওয়েব সার্ভারের সাথে সংযোগ করতে সক্ষম হয় না।

আমার পরীক্ষার স্ক্রিপ্টটি হ'ল কোল্ডফিউশন 8 সহ পুনরুত্পাদন করার ছিল

<CFHTTP URL="https://www.onlineumfragen.com" METHOD="get" ></CFHTTP>
<CFDUMP VAR="#CFHTTP#">

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

java SSLPoke www.onlineumfragen.com 443

এবং পেয়েছিলাম

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

এবং

Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be
multiple of 64, and can only range from 512 to 1024 (inclusive)
    at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
    at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
    at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:107)
    ... 10 more

আমার তখন ধারণা ছিল যে ওয়েবসারভারে (আমার ক্ষেত্রে অ্যাপাচি) এসএসএলের জন্য খুব আধুনিক সাইফার রয়েছে এবং এটি বেশ সীমাবদ্ধ (কোয়ালি স্কোর এ +) এবং 1024 এরও বেশি বিট সহ শক্তিশালী ডিফাই হেলম্যানম্যান কী ব্যবহার করে। স্পষ্টতই, কোল্ডফিউশন এবং জাভা jdk 1.6.45 এটি পরিচালনা করতে পারে না। ওডিসির পরবর্তী পদক্ষেপটি ছিল জাভা জন্য একটি বিকল্প সুরক্ষা সরবরাহকারী ইনস্টল করার কথা ভাবা এবং আমি বাউন্সি দুর্গের জন্য সিদ্ধান্ত নিয়েছিলাম। http://www.itcsolutions.eu/2011/08/22/how-to-use-bouncy-castle-cryptographic-api-in-netbeans-or-eclipse- for-java-jse-projects/ এও দেখুন

আমি তারপর ডাউনলোড

bcprov-ext-jdk15on-156.jar

http://www.bouncycastle.org/latest_releases.html থেকে এবং এটি সি: d jdk6_45 \ jre \ lib \ ext এর অধীনে ইনস্টল করেছেন বা যেখানে আপনার জেডি কে আছে, কোল্ডফিউশন 8 এর মূল ইনস্টলটিতে এটি সি: \ JRun4 under এর অধীনে থাকবে jre \ lib \ ext তবে আমি কোল্ডফিউশন ডিরেক্টরিটির বাইরে অবস্থিত একটি নতুন jdk (1.6.45) ব্যবহার করি। bcprov-ext-jdk15on-156.jar \ ext ডিরেক্টরিতে রাখা খুব গুরুত্বপূর্ণ (এটি আমার প্রায় দুই ঘন্টা এবং কিছু চুলের জন্য ব্যয় করে ;-) তারপর আমি সি ফাইলটি সম্পাদনা করেছি: d jdk6_45 re jre \ lib \ সুরক্ষা \ জাভা.সিকিউরিটি (ওয়ার্ডপ্যাড সহ সম্পাদক.exe নয়!) এবং নতুন সরবরাহকারীর জন্য এক লাইনে রাখুন। এরপরে তালিকার মতো লাগল

#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=sun.security.provider.Sun
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

(পজিশনে নতুনটি দেখুন)

তারপরে সম্পূর্ণভাবে শীতলফিউশন পরিষেবা পুনরায় চালু করুন। আপনি তারপর করতে পারেন

java SSLPoke www.onlineumfragen.com 443 (or of course your url!)

এবং অনুভূতি উপভোগ করুন ... এবং অবশ্যই

কি রাত এবং কি একটি দিন। আশা করি এটি সেখানকার কাউকে (আংশিক বা সম্পূর্ণ) সহায়তা করবে। যদি আপনার কোন প্রশ্ন থাকে তবে কেবল আমাকে তথ্যে মেইল ​​করুন ... (উপরের ডোমেন)।


0

সার্ভার যদি এমন একটি সাইফার সমর্থন করে যা ডিএইচ অন্তর্ভুক্ত না করে, আপনি ক্লায়েন্টকে সেই সাইফারটি নির্বাচন করতে বাধ্য করতে পারেন এবং ডিএইচ ত্রুটি এড়াতে পারেন। যেমন:

String pickedCipher[] ={"TLS_RSA_WITH_AES_256_CBC_SHA"};
sslsocket.setEnabledCipherSuites(pickedCipher);

মনে রাখবেন যে সঠিক সাইফারটি নির্দিষ্ট করে দেওয়া দীর্ঘমেয়াদে ভাঙ্গনের ঝুঁকিতে পড়ে।


0

ইন্টারনেটে সার্ফিংয়ের কয়েক ঘন্টা পরে এটি ঠিক করার জন্য আমাদের ঠিক একই ব্যতিক্রম ত্রুটিটি ফিরে পেয়েছিল।

আমরা oracle.com- এ পাওয়া যে jdk সর্বাধিক সংস্করণটি ডাউনলোড করেছি, এটি ইনস্টল করেছি এবং Jboss অ্যাপ্লিকেশন সার্ভারটি ইনস্টল করা নতুন jdk এর ডিরেক্টরিতে নির্দেশ করে।

পুনরায় চালু Jboss, পুনরায় প্রসেস করা, সমস্যামো স্থির !!!


0

বাঁশের ৫.7 + গ্রেডেল প্রকল্প + অ্যাপাচি দিয়ে আমি এই ত্রুটিটি পেয়েছি। গ্রেডেল এসএসএল এর মাধ্যমে আমাদের একটি সার্ভারের কাছ থেকে কিছু নির্ভরতা পাওয়ার চেষ্টা করেছিল।

সমাধান:

  1. ডিএইচ পরম উত্পন্ন করুন:

ওপেনএসএসএল সহ:

openssl dhparam 1024

উদাহরণ আউটপুট:

-----BEGIN DH PARAMETERS-----
MIGHfoGBALxpfMrDpImEuPlhopxYX4L2CFqQov+FomjKyHJrzj/EkTP0T3oAkjnS
oCGh6p07kwSLS8WCtYJn1GzItiZ05LoAzPs7T3ST2dWrEYFg/dldt+arifj6oWo+
vctDyDqIjlevUE+vyR9MF6B+Rfm4Zs8VGkxmsgXuz0gp/9lmftY7AgEC
-----END DH PARAMETERS-----
  1. শংসাপত্রের ফাইলে আউটপুট যুক্ত করুন (অ্যাপাচি - SSLCertificateFileপ্যারামের জন্য)

  2. অ্যাপাচি পুনরায় চালু করুন

  3. বাঁশ আবার চালু করুন

  4. আবার প্রকল্প তৈরির চেষ্টা করুন


0

আমি আইবিএম জেডিকে ব্যবহার করে জাভা এসভিএন ক্লায়েন্টগুলির সাথে এসএনএন.পাচি.অর্গ.অ্যাক্সেসে একইরকম ত্রুটি পেয়েছি। বর্তমানে, svn.apache.org ক্লায়েন্ট সাইফার পছন্দগুলি ব্যবহার করে।

প্যাকেট ক্যাপচার / javax.net.debug = সব দিয়ে কেবল একবার চালানোর পরে আমি কেবল একটি একক ডিএইচই সাইফারকে কালো তালিকাভুক্ত করতে সক্ষম হয়েছি এবং জিনিসগুলি আমার পক্ষে কাজ করে (এর পরিবর্তে ECDHE আলোচনা করা হয়েছে)।

.../java/jre/lib/security/java.security:
    jdk.tls.disabledAlgorithms=SSL_DHE_RSA_WITH_AES_256_CBC_SHA

ক্লায়েন্ট পরিবর্তন করা সহজ না হলে একটি দুর্দান্ত দ্রুত ফিক্স।


0

সম্প্রতি আমি একই সমস্যা থেকে আপগ্রেড JDK সংস্করণ পর আছে 1.6.0_45 করার jdk1.7.0_191 যা সমস্যাটির সমাধান।


-1

আমার জন্য, নিম্নলিখিত কমান্ড লাইনটি সমস্যার সমাধান করেছে:

java -jar -Dhttps.protocols=TLSv1.2 -Ddeployment.security.TLSv1.2=true -Djavax.net.debug=ssl:handshake XXXXX.jar

আমি JDK 1.7.0_79 ব্যবহার করছি


1
আমি JDK 1.7.0_xx ব্যবহার করে একই পরিস্থিতির মুখোমুখি হয়েছি। BY ডিফল্ট সমস্যা jdk 1.8 ব্যবহারের পরে সমাধান করা হবে। তবে একসময় আমরা জেডিকে দ্রুত আপগ্রেড করতে পারি না। সুতরাং আমার সমস্যাটি সিস্টেম কনফিগারেশন যুক্ত করার পরে সমাধান হয়েছে: System.setProperty ("https.protocols", "TLSv1.2"); System.setProperty ("স্থাপনা। সুরক্ষা। টিএলএসভি 1.2", "সত্য");
রামগাউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.