0

我一直在努力让 Start Tls 为我的 ldap 服务器工作。我在 spring 上下文文件中配置了密钥库和密码。我的配置似乎适用于 SSL,但 Star Tls 引起了鸡皮疙瘩。我在我的 LDAP 服务器的包装器中添加了 StarTlsHandler 作为 ExtendedOperationHandler。我是否还需要配置其他任何东西。

我正在使用 JDK 1.6.0_15

密钥库和密码目前是硬编码的,当我使用 SSL 或调试时它们看起来还可以。

我正在使用 JLdap Client 来测试我的实现。

这是我为 Handler 添加的代码片段: ldapServer.setKeystoreFile("C:/jdk/dgekey.ks"); ldapServer.setCertificatePassword("secret"); ldapServer.addExtendedOperationHandler(new StartTlsHandler());

您可以在下面看到服务器端的堆栈跟踪,客户端跟踪进一步向下:

2011-05-10 12:51:29,345 [rThread-4861-21] 调试 [org.apache.directory.server.ldap.handlers.extended.StartTlsHandler] 设置 LDAP 服务 2011-05-10 12:51:29,345 [rThread -4861-21] 调试 [org.apache.directory.server.ldap.handlers.extended.StartTlsHandler] 提供程序 = SUN 版本 1.6 2011-05-10 12:58:31,029 [rThread-4861-21] 错误 [org.apache .directory.server.core.security.CoreKeyStoreSpi] ERR_68 尝试提取密钥失败。java.lang.IllegalStateException:ERR_436 用于主体的名称必须规范化!在 org.apache.directory.server.core.LdapPrincipal.(LdapPrincipal.java:76) 在 org.apache.directory.server.core.security.CoreKeyStoreSpi.getTlsEntry(CoreKeyStoreSpi.java:84) 在 org.apache.directory。 server.core.security.CoreKeyStoreSpi.engineGetKey(CoreKeyStoreSpi.java:231) 在 java.security.KeyStore.getKey(KeyStore.java:

****通过 javax.net.debug=all 进行客户端跟踪;****

keyStore 是:C:/jdk/cacerts keyStore 类型是:jks keyStore 提供者是:init keystore init keymanager of type SunX509 trustStore 是:C:\jdk\cacerts trustStore 类型是:jks trustStore provider 是:init truststore 添加为受信任的证书:主题:CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH 发行人:CN=SwissSign Platinum CA - G2,O=SwissSign AG,C=CH 算法:RSA;序列号:0x4eb200670c035d4f 有效期从 2006 年 10 月 25 日星期三 10:36:00 CEST 到 2036 年 10 月 25 日星期六 10:36:00 CEST

触发 SecureRandom 播种完成播种 SecureRandom %% 没有缓存的客户端会话 *** ClientHello, TLSv1 RandomCookie: GMT: 1288255192 bytes = { 100, 146, 27, 29, 47, 10, 97, 247, 253, 145, 49, 147 ,239,157,90,4,34,15,99,243,191,156,251,25,64,42,210,231}会话ID:{}密码套件:[SSL_RSA_WITH_RC4_128_MD5,SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]压缩方法:{0}


[写入] MD5 和 SHA1 哈希:len = 73 0000: 01 00 00 45 03 01 4D C9 37 D8 64 92 1B 1D 2F 0A ...E..M.7.d.../。0010:61 F7 FD 91 31 93 EF 9D 5A 04 22 0F 63 F3 BF 9C a...1...Z.".c... 0020:FB 19 40 2A D2 E7 00 00 1E 00 04 00 05 00 2F 00 ..@........../. 0030:33 00 32 00 0A 00 16 00 13 00 09 00 15 00 12 00 3.2 ...... 0040:03 00 08 00 14 00 11 01 00 ...... .. main, WRITE: TLSv1 Handshake, length = 73 [write] MD5 and SHA1 hashes: len = 98 0000: 01 03 01 00 39 00 00 00 20 00 00 04 01 00 80 00 ....9.... ...... 0010: 00 05 00 00 2F 00 00 33 00 00 32 00 00 0A 07 00 ..../..3..2...... 0020: C0 00 00 16 00 00 13 00 00 09 06 00 40 00 00 15 ....@... 0030: 00 00 12 00 00 03 02 00 80 00 00 08 00 00 14 00 .... ........ 0040: 00 11 4D C9 37 D8 64 92 1B 1D 2F 0A 61 F7 FD 91 ..M.7.d.../.a... 0050: 31 93 EF 9D 5A 04 22 0F 63 F3 BF 9C FB 19 40 2A 1...Z.".c.....@ 0060: D2 E7 .. main, WRITE: SSLv2 client hello message, length = 98 main, READ: TLSv1 Alert, length = 2 main, RECV TLSv1 ALERT: fatal, handshake_failure main, call closeSocket() main, 处理异常: javax. net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 错误:LDAPException:无法协商安全连接 (91) 连接错误 javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

4

1 回答 1

1

目前 TlsHandler 只能从 uid=admin,ou=system 条目中读取证书。您可以在将证书和密钥设置为管理员条目的适当属性值(uid=admin,ou=system)后尝试吗?我将尝试在最新的主干中解决此问题。(感谢您是否可以提交错误报告)。

于 2011-05-10T20:55:39.770 回答