通过LDAP SSL的Active Directory - Dev env与Tomcat - Grails webapp

时间:2016-05-04 14:08:12

标签: tomcat grails ssl ldap truststore

我们使用Grails编写了自己的自定义webap。 Web包括用于在活动目录服务器内更改用户密码的功能。当从开发环境运行webapp时,我遇到密码更改功能的问题与在Tomcat服务器下作为webapp运行时无法正常工作的问题。

详细说明: 我的理解是,如果要在AD上通过LDAP更改用户密码,则必须使用安全LDAP连接与AD服务器进行通信。

这是我做的工作: 在我的开发环境中,即GGTS(使用Grails 2.x)......我看到了它使用的JVM。我的AD管理员然后给了我一个证书,我使用keystore.exe将其导入到JVM的\ lib \ security \ cacerts文件中。我实际上将它导入到我机器上所有JRE / JDK的所有\ lib \ security \ cacerts中,只是为了安全起见。当我从我的GGTS IDE中运行webapp时......然后我可以使用webapp来更改用户的AD密码,它可以正常工作。我相信当你在GGTS中运行webapp时,GGTS运行它自己的嵌入式网络服务器,我相信它是Tomcat,但我不确定。

然后我使用Grails war命令并从webapp创建一个WAR文件。我将它部署到也在我的机器上运行的独立Tomcat。但是当我在我的webapp中尝试密码更改功能时,我收到此错误:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径

我认为这表明Tomcat在JVM中找到证书会出现某种错误。

我已准备好许多处理此问题的帖子,但无法解决此问题。任何人都可以提出一些见解或其他我应该寻找的东西吗?

关于我尝试或观察过的事情的补充说明: 我已尝试将这些参数用于Tomcat: -Djavax.net.ssl.trustStore = C:\ Program Files(x86)\ Java \ jre1.8.0_91 \ lib \ security \ cacerts -Djavax.net.ssl.trustStorePassword =的changeit -Djavax.net.debug = SSL

要同时控制tomcat将使用哪个信任库,以及将SSL相关信息写入日志文件。

当我将trustStore参数与我自己的位置一起使用时,我确实看到它在日志文件中有效...它将更改为使用我指定的文件,而不是使用之前使用的文件(两者都使用无论如何已将证书导入其中) 日志文件片段: 2016-05-04 09:07:15 Commons Daemon procrun stdout初始化 trustStore是:C:\ Program Files(x86)\ Java \ jre1.8.0_91 \ lib \ security \ cacerts trustStore类型是:jks trustStore提供者是: init truststore

我还会看到它似乎两次提到我的AD服务器的证书..这有关系吗? 添加为可信证书: 第一次:   主题:CN = .testdomain1.local,DC = testdomain1,DC = local   发行人:CN = .testdomain1.local,DC = testdomain1,DC = local   算法:RSA;序列号:0x116305db11e9d28e409e1dce744cf841   有效期为2016年5月2日20:40:49 UTC 2016年5月2日星期六20:50:49 UTC 2026 第二次: 添加为可信证书:   主题:CN = .testdomain1.local,DC = testdomain1,DC = local   发行人:CN = .testdomain1.local,DC = testdomain1,DC = local   算法:RSA;序列号:0x116305db11e9d28e409e1dce744cf841   有效期为2016年5月2日20:40:49 UTC 2016年5月2日星期六20:50:49 UTC 2026

错误发生后,此处还有其他日志信息:

%%已初始化:[会话-2,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA] ** TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ***证书链

%%无效:[会话-2,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA] http-nio-8080-exec-1,SEND TLSv1 ALERT:致命,描述= certificate_unknown http-nio-8080-exec-1,WRITE:TLSv1 Alert,length = 2 http-nio-8080-exec-1,名为closeSocket() http-nio-8080-exec-1,处理异常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到有效的证书路径要求目标 http-nio-8080-exec-1,名为close() http-nio-8080-exec-1,名为closeInternal(true)

1 个答案:

答案 0 :(得分:0)

问题是由IT / AD管理员发布的自签名证书混淆造成的。