tomcat - 通过LDAP SSL的Active Directory-开发环境与Tomcat-Grails Web应用

标签 tomcat grails ssl ldap truststore

我们已经使用Grails编写了自己的自定义webap。网络包括用于在 Activity 目录服务器内更改用户密码的功能。从开发环境运行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中运行Web应用程序时,GGTS会运行它自己的嵌入式Web服务器,并且我相信它是Tomcat,但我不确定。

然后,我使用Grails war命令并从Web应用程序制作WAR文件。我将其部署到也在我的计算机上运行的独立Tomcat中。但是,当我在Web应用程序中尝试密码更改功能时,出现此错误:

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 =更改
-Djavax.net.debug = ssl

为了控制tomcat将使用哪个信任库,以及将与SSL相关的信息写入日志文件。

当我在自己的位置使用trustStore参数时,确实看到了在日志文件中起作用的情况……它将更改为使用我指定的文件,而不是使用以前使用的文件(都具有证书无论如何都导入其中)
日志文件片段:
2016-05-04 09:07:15 Commons守护进程procrun stdout初始化
trustStore是:C:\ Program Files(x86)\ Java \ jre1.8.0_91 \ lib \ security \ cacerts
trustStore类型是:jks
trustStore提供程序是:
初始化信任库

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

一旦发生错误,这里是其他日志信息:

%%已初始化:[ session 2,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
** TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
***证书链


%%无效:[ session 2,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
http-nio-8080-exec-1,发送TLSv1警报:致命,描述= certificate_unknown
http-nio-8080-exec-1,写:TLSv1警报,长度= 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)

最佳答案

该问题是由IT / AD管理员发布的自签名证书中的混合引起的。

关于tomcat - 通过LDAP SSL的Active Directory-开发环境与Tomcat-Grails Web应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37030222/

相关文章:

java - 如何在 webapp 中实际连接事物

Grails Spring Security Oauth Provider 插件 : Full authentication is required to access this resource

grails - 如何注入(inject)具有单例范围依赖关系的 Grails 2.4.x 服务?

javascript - 如何在 Javascript 中检测 SSL 证书并将其添加到浏览器?

java - Alfresco 插件元数据编写器指南

java - 在调用处理程序之前使用 Tomcat 8 和 Spring 4 ClassCastException 的 websockets

java - 通过注解设置与 Spring 的 JNDI 连接

gradle - 如何从源代码(即github存储库)安装Rundeck?

java - 我可以避免使用 JSSE 将 keystore 密码放在命令行上吗?

java - 如何建立到 mail.google.com 的单向 SSL 连接?