2017-07-26 66 views
0

私は、LDAPを使用してユーザーを認証し、承認するJava webapp(リアルタイムのxmppサーバーを起動します)を持っています。DHPublicKeyがアルゴリズムの制約に準拠していません

最近、LDAPサーバーは暗号スイートをより安全な暗号にアップグレードしました。 /jre/lib/security/java.securityファイルで許可されている最小のkeySizeを格下げするまで、私はこのLDAPサーバーとアプリケーションを話すことができませんでした。

#jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 2048 
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024 

私はアプリが使用するJREで暗号を更新するJCE 8を追加、新しい暗号は、私がWebアプリケーションの管理コンソールで暗号を有効に(私はthis programを使用し、前と後の比較)

現れました - 特に:

> *  TLS_DHE_RSA_WITH_AES_256_CBC_SHA 

> *  TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 
> *  TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 

私は、LDAPサーバを使用した暗号化するか見てthis programを使用:

Testing server - upgraded endpoint 
Given this client's capabilities ([SSLv3, TLSv1, TLSv1.1, TLSv1.2]),    the server prefers protocol=TLSv1.2,  cipher=TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 

Testing server - non-upgraded endpoint 
Given this client's capabilities ([SSLv3, TLSv1, TLSv1.1, TLSv1.2]),  the server prefers protocol=TLSv1.2, cipher=TLS_RSA_WITH_AES_128_CBC_SHA 

アプリは、以下のjava.security設定で古いLDAP(およびクラスタ内のアップグレードされていないエンドポイント)に話すことができた:

jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 2048 

エンドポイントだったときに、以下の結果(それはF5ロードバランサの後ろに置かれていました)、最小keySizeをダウングレードするまで、アプリケーションを接続することができませんでした。 LDAPの証明書チェーン(新しいものと古いものとの比較)は変更されませんでした。私からのopenssl s_clientを試みたマシン上のopensslのバージョンに応じて、1.2対多分TLSバージョン1 - それはoldLDAPの場合と同様に

openssl s_client -connect newLDAP:636 

は、2048年公開鍵を示し、唯一の違いは、より強力な暗号でした。

xmppウェブアプリケーション:5223と管理コンソール:9091もSSLを使用し、それぞれに2048ビットの公開鍵があります。アプリケーションのログファイルに

エラーは次のとおりです。

"DHPublicKey does not comply to algorithm constraints" 

上記の制約は、私が参照にjdk.tls.disabledAlgorithms java.securityファイルのプロパティを信じています。

明らかに安全性の高い暗号が、アプリとLDAP接続が機能するために最小のkeySizeを必要とする理由が混乱しています。

何かが間違っているか間違っている必要があります。ここで

は、アプリケーションのログから、いくつかのスタックトレースです:任意の洞察力のための

2017.07.25 18:54:32 WARN [Jetty-QTP-AdminConsole-98]: org.jivesoftware.admin.LoginLimitManager - Failed admin console login attempt by <myuserid> from <myIP> 
    2017.07.25 18:54:33 INFO [Server SR - 881162561]: org.jivesoftware.openfire.net.SocketReadingMode - STARTTLS negotiation (with: [email protected] socket: Socket[addr=/78.46.93.108,port=57984,localport=5269] session: [email protected]3cab status: 1 address: <xyz>.com/5c3gn5yu6p id: 5c3gn5yu6p) failed. 
    javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints 
      at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431) 
      at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) 
      at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813) 
      at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781) 
      at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:241) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.start(TLSStreamHandler.java:178) 
      at org.jivesoftware.openfire.net.SocketConnection.startTLS(SocketConnection.java:1 95) 
      at org.jivesoftware.openfire.net.SocketReadingMode.negotiateTLS(SocketReadingMode. java:87) 
      at org.jivesoftware.openfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:138) 
      at org.jivesoftware.openfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 76) 
      at org.jivesoftware.openfire.net.SocketReader.run(SocketReader.java:145) 
      at java.lang.Thread.run(Thread.java:745) 
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints 
      at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237) 
      at sun.security.ssl.ServerHandshaker.clientKeyExchange(ServerHandshaker.java:1599) 
      at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:269) 
      at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
      at sun.security.ssl.Handshaker$1.run(Handshaker.java:919) 
      at sun.security.ssl.Handshaker$1.run(Handshaker.java:916) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doTasks(TLSStreamHandler.java:34 4) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:254) 
      ... 7 more 













    2017.07.25 18:54:36 INFO [Server SR - 1692736043]: org.jivesoftware.openfire.net.SocketReadingMode - STARTTLS negotiation (with: [email protected] socket: Socket[addr=/136.243.42.223,port=47704,localport=5269] session: [email protected]ab9e3 status: 1 address: <xyz>.com/5rljrbkums id: 5rljrbkums) failed. 
    javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints 
      at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431) 
      at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) 
      at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:813) 
      at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781) 
      at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:241) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.start(TLSStreamHandler.java:178) 
      at org.jivesoftware.openfire.net.SocketConnection.startTLS(SocketConnection.java:1 95) 
      at org.jivesoftware.openfire.net.SocketReadingMode.negotiateTLS(SocketReadingMode. java:87) 
      at org.jivesoftware.openfire.net.BlockingReadingMode.readStream(BlockingReadingMod e.java:138) 
      at org.jivesoftware.openfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 76) 
      at org.jivesoftware.openfire.net.SocketReader.run(SocketReader.java:145) 
      at java.lang.Thread.run(Thread.java:745) 
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints 
      at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237) 
      at sun.security.ssl.ServerHandshaker.clientKeyExchange(ServerHandshaker.java:1599) 
      at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:269) 
      at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
      at sun.security.ssl.Handshaker$1.run(Handshaker.java:919) 
      at sun.security.ssl.Handshaker$1.run(Handshaker.java:916) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doTasks(TLSStreamHandler.java:34 4) 
      at org.jivesoftware.openfire.net.TLSStreamHandler.doHandshake(TLSStreamHandler.jav a:254) 
      ... 7 more 





    2017.07.25 19:03:00 ERROR [Jetty-QTP-AdminConsole-56]: org.jivesoftware.openfire.ldap.LdapAuthProvider - Error connecting to LDAP server 
    javax.naming.CommunicationException: <myLDAP>:636 [Root exception is javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints] 
      at com.sun.jndi.ldap.Connection.<init>(Connection.java:226) 
      at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:137) 
      at com.sun.jndi.ldap.LdapClientFactory.createPooledConnection(LdapClientFactory.ja va:64) 
      at com.sun.jndi.ldap.pool.Connections.<init>(Connections.java:115) 
      at com.sun.jndi.ldap.pool.Pool.getPooledConnection(Pool.java:132) 
      at com.sun.jndi.ldap.LdapPoolManager.getLdapClient(LdapPoolManager.java:329) 
      at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1606) 
      at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2746) 
      at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:319) 
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:192) 
      at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:210) 
      at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:153) 
      at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:83) 
      at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684) 
      at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) 
      at javax.naming.InitialContext.init(InitialContext.java:244) 
      at javax.naming.ldap.InitialLdapContext.<init>(InitialLdapContext.java:154) 
      at org.jivesoftware.util.JiveInitialLdapContext.<init>(JiveInitialLdapContext.java :43) 
      at org.jivesoftware.openfire.ldap.LdapManager.getContext(LdapManager.java:568) 
      at org.jivesoftware.openfire.ldap.LdapManager.findUserDN(LdapManager.java:975) 
      at org.jivesoftware.openfire.ldap.LdapManager.findUserDN(LdapManager.java:928) 
      at org.jivesoftware.openfire.ldap.LdapAuthProvider.authenticate(LdapAuthProvider.j ava:126) 
      at org.jivesoftware.openfire.auth.AuthFactory.authenticate(AuthFactory.java:217) 
      at org.jivesoftware.openfire.admin.login_jsp._jspService(login_jsp.java:175) 
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1669) 
      at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652) 
      at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:76) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652) 
      at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingF ilter.java:53) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652) 
      at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:80) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652) 
      at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:162) 
      at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.ja va:1652) 
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
      at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:22 3) 
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:11 27) 
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:106 1) 
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandler Collection.java:215) 
      at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.jav a:110) 
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
      at org.eclipse.jetty.server.Server.handle(Server.java:499) 
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
      at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
      at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
      at java.lang.Thread.run(Thread.java:745) 
    Caused by: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints 
      at sun.security.ssl.DHCrypt.checkConstraints(DHCrypt.java:237) 
      at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:712) 
      at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:268) 
      at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
      at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) 
      at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) 
      at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) 
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) 
      at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) 
      at com.sun.jndi.ldap.Connection.createSocket(Connection.java:376) 
      at com.sun.jndi.ldap.Connection.<init>(Connection.java:203) 
      ... 56 more 

おかげで、 SM

+0

あなたの質問が何であるか分かりません。サーバーは、2048ビットを使用する前は、明らかに1024ビットのDHグループを使用しています。サーバー管理者に苦情を言います。 –

+0

1024ビットグループを使用しているサーバーを確認するにはどうすればいいですか?私は、openssl s_clientとJava SSLTestプログラムを使ってLDAPサーバに接続することについて述べました。 Opensslは公開鍵が2048ビットであることを示し、SSLTestプログラムはTLSのバージョンと暗号を示します。 –

+0

DHE暗号スイートを使用した「公開鍵...」通常、RSAである長期認証公開鍵と接続ごとに変わるDH公開鍵の2つの公開鍵があります。私は常にssllabs.comのサーバーテスターを使用して、サーバーSSL機能の良好なプロファイルを取得しています。 –

答えて

0

詳しい背景:私は別のサーバーをスキャンし

(例えばWebサーバ)の後ろ同じF5新しいLDAPサーバーも遅れていますが、ssllabsからアクセスできます...サポートされている1024個のDHキー...したがって、WebサーバーはグレードBにダウングレードされました。これは、新しいLDAPサーバーに接続するためにjava.security設定を低くする必要があったためです。

アクセシブルなWebサーバー上で(アップグレードされていないF5の後ろに)同じLDAPをスキャンしましたが、サポートされている弱い暗号と安全でないプロトコルのサポートによってF評価。

個々のF5のVIPで同じ暗号スイートが使用されていると仮定すると、これは説明できると思います。

妥当な説明とSSL解析ツールの提案を示唆したJames K. Polk(コメントあり)に感謝します。

0

私自身の質問に従うために、私はそれが最初にJames K Polkで示唆された新しいLDAPシステムでの一時的な鍵交換の問題であることを確認しました! SSLyzeの彼の提案も非常に有用でした。

新旧のLDAPシステムで次のコマンドを実行しました。新しいシステムでは最大1024ビットの鍵交換のみがサポートされていますが、古いシステムでは鍵交換が行われない可能性があります。 JREのjava.securityファイルのDH keySize設定が機能しました(たとえば、使用されていないなど)。

python -m sslyze --tlsv1_2 --starttls=auto myLDAP:636 



AVAILABLE PLUGINS 
----------------- 

    OpenSslCipherSuitesPlugin 
    HeartbleedPlugin 
    OpenSslCcsInjectionPlugin 
    CertificateInfoPlugin 
    SessionResumptionPlugin 
    CompressionPlugin 
    SessionRenegotiationPlugin 
    FallbackScsvPlugin 
    HttpHeadersPlugin 



CHECKING HOST(S) AVAILABILITY 
----------------------------- 

    myLDAP:636      => 0.1.2.3 




SCAN RESULTS FOR myLDAP:636 - 0.1.2.3 
------------------------------------------------- 

* TLSV1_2 Cipher Suites: 
    Preferred: 
    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384    DH-1024 bits 256 bits 
    Accepted: 
    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384    ECDH-384 bits 256 bits 
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384    ECDH-384 bits 256 bits 
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA    ECDH-384 bits 256 bits 
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA256    DH-1024 bits 256 bits 
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA     DH-1024 bits 256 bits 
    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384    DH-1024 bits 256 bits 
    TLS_RSA_WITH_AES_256_GCM_SHA384     -    256 bits 
    TLS_RSA_WITH_AES_256_CBC_SHA      -    256 bits 
    TLS_RSA_WITH_AES_256_CBC_SHA256     -    256 bits 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256    ECDH-384 bits 128 bits 
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256    ECDH-384 bits 128 bits 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA    ECDH-384 bits 128 bits 
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256    DH-1024 bits 128 bits 
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA     DH-1024 bits 128 bits 
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA256    DH-1024 bits 128 bits 
    TLS_RSA_WITH_AES_128_CBC_SHA256     -    128 bits 
    TLS_RSA_WITH_AES_128_GCM_SHA256     -    128 bits 
    TLS_RSA_WITH_AES_128_CBC_SHA      -    128 bits 
    TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA    ECDH-384 bits 112 bits 
    TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     DH-1024 bits 112 bits 
    TLS_RSA_WITH_3DES_EDE_CBC_SHA      -    112 bits 
    Rejected: 
    <snipped> 


SCAN COMPLETED IN 0.16 S 
------------------------ 











python -m sslyze --tlsv1_2 --starttls=auto oldLDAP:636 



AVAILABLE PLUGINS 
----------------- 

    CompressionPlugin 
    OpenSslCipherSuitesPlugin 
    CertificateInfoPlugin 
    FallbackScsvPlugin 
    OpenSslCcsInjectionPlugin 
    SessionResumptionPlugin 
    SessionRenegotiationPlugin 
    HttpHeadersPlugin 
    HeartbleedPlugin 



CHECKING HOST(S) AVAILABILITY 
----------------------------- 

    oldLDAP:636      => 4.5.6.7 




SCAN RESULTS FOR oldLDAP:636 - 4.5.6.7 
------------------------------------------------------------- 

* TLSV1_2 Cipher Suites: 
    Preferred: 
    TLS_RSA_WITH_RC4_128_SHA       -    128 bits 
    Accepted: 
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA    ECDH-256 bits 256 bits 
    TLS_RSA_WITH_AES_256_CBC_SHA      -    256 bits 
    TLS_RSA_WITH_AES_256_CBC_SHA256     -    256 bits 
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA    ECDH-256 bits 128 bits 
    TLS_RSA_WITH_AES_128_CBC_SHA256     -    128 bits 
    TLS_RSA_WITH_AES_128_CBC_SHA      -    128 bits 
    TLS_RSA_WITH_RC4_128_SHA       -    128 bits 
    TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA    ECDH-256 bits 112 bits 
    TLS_RSA_WITH_3DES_EDE_CBC_SHA      -    112 bits 
    Rejected: 
    <snipped> 


SCAN COMPLETED IN 0.34 S 
------------------------ 
関連する問題