আমি যখন কিছু আইআরসি সার্ভারের সাথে কোনও এসএসএল সংযোগ করি (তবে অন্যরা নয় - সম্ভবত সার্ভারের পছন্দসই এনক্রিপশন পদ্ধতির কারণে) আমি নিম্নলিখিত ব্যতিক্রম পাই:
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 ব্যবহার করছি।
openssl
প্রশ্নটিতে আউটপুটে ব্যবহৃত সার্ভারটি যে আকারটি দেখতে পাবেন : "সাইফার হ'ল ডিএইচই-আরএসএ-এএস 256-এসএএ, সার্ভার পাবলিক কী 2048 বিট"। এবং 2048> 1024 :-)।
Server public key (size)
ছিল, এবং, সার্টিটির মূল কী ছিল। s_client
২০১১ সালে সামান্য কী দেখায়নি; 2015 সালে 1.0.2 এবং Server Temp Key
উচ্চতর বেশ কয়েকটি লাইন উচ্চতর হিসাবে কাজ করে । যদিও একটি ভাল সার্ভারটি সাধারণত ডিএইচই আকারটিকে আরএসএ-প্রমাণীকরণের আকারের মতো করে তোলে।
Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
। সার্ভারের মাধ্যমে এখানে কোন আকারটি প্রেরণ করা হয়েছিল এবং স্পেসিফিকেশন এ সম্পর্কে কী বলেছে তা ধারণা নেই।