SORU
27 Temmuz 2011, ÇARŞAMBA


Neden SSL el sıkışma 'DH anahtarı oluşturamadı ver' durum mu?Java:

Bazı IRC sunucusu ile SSL bağlantısı (ama diğerleri - sunucu tercih edilen şifreleme yöntemi için muhtemelen nedeniyle değil) yaptığım zaman aşağıdaki özel durum alıyorum:

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

Son neden:

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

Bu sorunu gösteren bir örneğini sunuyor.esper.net:6697 (IRC sunucusu). Sorun göstermek olan bir sunucu örneği kornbluth.freenode.net:6697. [Şaşırtıcı olmayan bir şekilde, her bir ağ üzerindeki tüm sunucular aynı ilgili davranış paylaşıyoruz.]

Benim kod da belirtildiği gibi bazı SSL sunucularına bağlanırken çalışır)

    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();

Bu durum oluşturduğunda son startHandshake. Ve evet biraz büyü oluyor 'trustAllCerts'; bu kod sistemi SSL sertifikaları doğrulamak için güçleri yoktur (...Belgesi sorun.)

Belli ki bir ihtimal olduğunu esper bu sunucu yanlış yapılandırılmış, ama aradım ve bulamadınız diğer kaynaklar için insanların sorunları ile esper SSL bağlantı noktaları ve 'openssl' bağlanır (aşağıya bakınız). Eğer bu Java varsayılan SSL desteği bir sınırlama ise, ya bir şey merak ediyorum. Herhangi bir öneriniz var mı?

Burada 6697 aperture.esper.net kullanarak bağlandığımda ne olur 'openssl' komut satırında:

~ $ 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)
---

Sonunda belirtildiği gibi, Java uygulamam için sizden çok daha fazla olan başarılı bir şekilde bağlayın.

İlgili olmalıdır, 10.6.8, Java OS X sürümü 1.6.0_26 kullanıyorum.

CEVAP
27 Temmuz 2011, ÇARŞAMBA


Sorun Başbakan boyutudur. Java kabul maksimum kabul edilebilir boyutu 1024 bittir. Bu bilinen bir sorun (JDK-6521495).

Bug workaround kullanarak bir BouncyCastle. JOYCE uygulama bahseder bağlı olduğunu bildiriyor. Umarım bu sizin için çalışması gerekir.

GÜNCELLEME

Bu böcek gibi JDK-7044060 rapor edildi ve son zamanlarda sabit.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrew_Huang

    Andrew_Huang

    10 ŞUBAT 2006
  • echifitness

    echifitness

    9 Kasım 2008
  • hanksranger

    hanksranger

    6 EKİM 2009