Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-42868

JIRA LoginManager API call fails with ClassNotFoundException: LdapHostnameVerificationSSLSocketFactory

      We have a plug-in which is calling com.atlassian.jira.security.login.LoginManager.authenticate(User, String). This API throws an exception:

      ... ERROR .... [common.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: null
      com.atlassian.crowd.exception.runtime.OperationFailedException
      	at com.atlassian.crowd.embedded.core.CrowdServiceImpl.convertOperationFailedException(CrowdServiceImpl.java:915)
      	at com.atlassian.crowd.embedded.core.CrowdServiceImpl.authenticate(CrowdServiceImpl.java:80)
      	at com.atlassian.crowd.embedded.core.DelegatingCrowdService.authenticate(DelegatingCrowdService.java:35)
      	at com.atlassian.crowd.embedded.core.FilteredCrowdServiceImpl.authenticate(FilteredCrowdServiceImpl.java:51)
      	at com.atlassian.jira.security.login.LoginManagerImpl$InternalStaticDependencies.authenticate(LoginManagerImpl.java:417)
      	at com.atlassian.jira.security.login.LoginManagerImpl.authenticate(LoginManagerImpl.java:194)
      	at ...
      	at ...  <+3>
      	at java.lang.reflect.Method.invoke(Unknown Source)
      	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)  <+13> (AbstractResourceMethodDispatchProvider.java:205) (ResourceJavaMethodDispatcher.java:75) (HttpMethodRule.java:288) (RightHandPathRule.java:147) (ResourceClassRule.java:108) (RightHandPathRule.java:147) (RootResourceClassesRule.java:84) (WebApplicationImpl.java:1469) (WebApplicationImpl.java:1400) (WebApplicationImpl.java:1349) (WebApplicationImpl.java:1339) (WebComponent.java:416) (ServletContainer.java:537)
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:178)  <+1> (ServletContainer.java:795)
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:73)  <+7> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.jira.tzdetect.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:39)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.jira.baseurl.IncludeResourcesFilter.doFilter(IncludeResourcesFilter.java:38)  <+13> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66) (RestServletUtilsUpdaterFilter.java:26) (RestServletUtilsUpdaterFilter.java:40) (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66) (ContextFilter.java:25) (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.plugins.cors.CorsFilter.doFilter(CorsFilter.java:65)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36)  <+18> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (AccessLogFilter.java:103) (AccessLogFilter.java:87) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.quisapps.jira.fieldsecurity.filter.FieldSecurityFilter.doFilterChainWithProfiling(FieldSecurityFilter.java:212)
      	at com.quisapps.jira.fieldsecurity.filter.FieldSecurityFilter.doFilterInterval(FieldSecurityFilter.java:101)
      	at com.quisapps.jira.fieldsecurity.filter.FieldSecurityFilter.doFilter(FieldSecurityFilter.java:58)  <+22> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (SecurityFilter.java:234) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (BaseLoginFilter.java:169) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:66) (OAuthFilter.java:61) (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:40)  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+9> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210)
      	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
      	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
      	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)  <+10> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (GzipFilter.java:80) (GzipFilter.java:51) (JiraGzipFilter.java:55) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:66)
      	at ...MyFilter3  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at ...MyFilter2  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at ...MyFilter1  <+3> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:66)
      	at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61)  <+40> (DelegatingPluginFilter.java:74) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:45) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (JiraStartupChecklistFilter.java:78) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:57) (ApplicationFilterChain.java:243) (ApplicationFilterChain.java:210) (StandardWrapperValve.java:222) (StandardContextValve.java:123) (AuthenticatorBase.java:502) (StandardHostValve.java:171) (ErrorReportValve.java:100) (StandardEngineValve.java:118) (AccessLogValve.java:953) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1041) (AbstractProtocol.java:603) (JIoEndpoint.java:312)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      	at java.lang.Thread.run(Unknown Source)
      Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not create DirContext instance for transaction; nested exception is org.springframework.ldap.CommunicationException: ...; nested exception is javax.naming.CommunicationException: ... [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
      	at org.springframework.transaction.compensating.support.AbstractCompensatingTransactionManagerDelegate.doBegin(AbstractCompensatingTransactionManagerDelegate.java:91)
      	at org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManager.doBegin(ContextSourceTransactionManager.java:126)
      	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.pageSearchResults(SpringLDAPConnector.java:343)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.searchEntitiesWithRequestControls(SpringLDAPConnector.java:443)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.searchUserObjects(SpringLDAPConnector.java:646)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.findUserWithAttributesByName(SpringLDAPConnector.java:595)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.findUserByName(SpringLDAPConnector.java:581)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.authenticate(SpringLDAPConnector.java:1075)
      	at com.atlassian.crowd.directory.DbCachingRemoteDirectory.authenticateAndUpdateInternalUser(DbCachingRemoteDirectory.java:253)
      	at com.atlassian.crowd.directory.DbCachingRemoteDirectory.performAuthenticationAndUpdateAttributes(DbCachingRemoteDirectory.java:189)
      	at com.atlassian.crowd.directory.DbCachingRemoteDirectory.authenticate(DbCachingRemoteDirectory.java:161)
      	at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.authenticateUser(DirectoryManagerGeneric.java:291)
      	at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.authenticateUser(ApplicationServiceGeneric.java:141)
      	at com.atlassian.crowd.embedded.core.CrowdServiceImpl.authenticate(CrowdServiceImpl.java:68)
      	... 203 more
      Caused by: org.springframework.ldap.CommunicationException: ...; nested exception is javax.naming.CommunicationException: ... [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
      	at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:100)
      	at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:266)
      	at org.springframework.ldap.core.support.AbstractContextSource.getContext(AbstractContextSource.java:106)
      	at org.springframework.ldap.core.support.AbstractContextSource.getReadWriteContext(AbstractContextSource.java:138)
      	at org.springframework.ldap.transaction.compensating.manager.ContextSourceTransactionManagerDelegate.getNewHolder(ContextSourceTransactionManagerDelegate.java:86)
      	... 218 more
      Caused by: javax.naming.CommunicationException: ... [Root exception is java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory]
      	at com.sun.jndi.ldap.Connection.<init>(Unknown Source)
      	at com.sun.jndi.ldap.LdapClient.<init>(Unknown Source)
      	at com.sun.jndi.ldap.LdapClient.getInstance(Unknown Source)
      	at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)
      	at com.sun.jndi.ldap.LdapCtx.<init>(Unknown Source)
      	at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)
      	at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)
      	at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)
      	at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
      	at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
      	at javax.naming.InitialContext.init(Unknown Source)
      	at javax.naming.ldap.InitialLdapContext.<init>(Unknown Source)
      	at org.springframework.ldap.core.support.LdapContextSource.getDirContextInstance(LdapContextSource.java:43)
      	at org.springframework.ldap.core.support.AbstractContextSource.createContext(AbstractContextSource.java:254)
      	... 222 more
      Caused by: java.lang.ClassNotFoundException: com.atlassian.crowd.directory.ssl.LdapHostnameVerificationSSLSocketFactory
      	at com.atlassian.plugins.rest.module.ChainingClassLoader.loadClass(ChainingClassLoader.java:65)
      	at java.lang.Class.forName0(Native Method)
      	at java.lang.Class.forName(Unknown Source)
      	at com.sun.jndi.ldap.VersionHelper12.loadClass(Unknown Source)
      	at com.sun.jndi.ldap.Connection.createSocket(Unknown Source)
      
      • JIRA 6.2.6
      • Atlassian Embedded Crowd Plug-In 1.7.3

      The exception looks similar to JRA-27347. Is it possible that a regression could have been introduced to the Atlassian Embedded Crowd Plug-in?

          Form Name

            [JRASERVER-42868] JIRA LoginManager API call fails with ClassNotFoundException: LdapHostnameVerificationSSLSocketFactory

            Lokesh posted a solution at https://community.developer.atlassian.com/t/getting-exception-while-updating-user-groups-from-ssl-enabled-ad-directory/20168/3

            The solution is to switch to another class loader so that the LdapHostnameVerificationSSLSocketFactory class can be loaded

            Thread currentThread = Thread.currentThread();
            ClassLoader classLoader= currentThread.getContextClassLoader();
            currentThread.setContextClassLoader(LdapHostnameVerificationSSLSocketFactory.class.getClassLoader()); 

            Hua Soon SIM [Akeles] added a comment - Lokesh posted a solution at  https://community.developer.atlassian.com/t/getting-exception-while-updating-user-groups-from-ssl-enabled-ad-directory/20168/3 The solution is to switch to another class loader so that the LdapHostnameVerificationSSLSocketFactory class can be loaded Thread currentThread = Thread .currentThread(); ClassLoader classLoader= currentThread.getContextClassLoader(); currentThread.setContextClassLoader(LdapHostnameVerificationSSLSocketFactory. class. getClassLoader());

            Hi there,

            what was the solution for this problem.

            We also use the method authenticate from the LoginManager and got the error with LDAPS. (Jira 8.8.0 and Confluence 7.3)

             

            Kind regards,

            Mario Anstoots

            Mario Anstoots added a comment - Hi there, what was the solution for this problem. We also use the method authenticate from the LoginManager and got the error with LDAPS. (Jira 8.8.0 and Confluence 7.3)   Kind regards, Mario Anstoots

            Hi gunnar,

            To be honest I do not have enough information to know that. In order to do that, I would need to go into a detailed investigation of what's happening here with you, and this is not the correct channel to do that.

            jira.atlassian.com is our public defect tracker where verified bugs with clear reproduction steps are recorded and therefore it is not the correct place to handle support queries and troubleshooting. Therefore, this is best handled by our support team in a ticket at https://support.atlassian.com

            Please do raise a ticket there if you haven't done so already so we can work with you further.

            Regards,

            Oswaldo Hernández.
            JIRA Bugmaster.
            [Atlassian].

            Oswaldo Hernandez (Inactive) added a comment - Hi gunnar , To be honest I do not have enough information to know that. In order to do that, I would need to go into a detailed investigation of what's happening here with you, and this is not the correct channel to do that. jira.atlassian.com is our public defect tracker where verified bugs with clear reproduction steps are recorded and therefore it is not the correct place to handle support queries and troubleshooting. Therefore, this is best handled by our support team in a ticket at https://support.atlassian.com Please do raise a ticket there if you haven't done so already so we can work with you further. Regards, Oswaldo Hernández. JIRA Bugmaster. [Atlassian] .

            Thanks Oswaldo. The answer is unfortunate, though. I believe the api is failing because of the Crowd plug-in. Thus I was wondering if there is a way to fix the root cause exception in the Crowd plug-in?

            Gunnar Wagenknecht added a comment - Thanks Oswaldo. The answer is unfortunate, though. I believe the api is failing because of the Crowd plug-in. Thus I was wondering if there is a way to fix the root cause exception in the Crowd plug-in?

            Sorry gunnar, I made a mistake an accidentally marked the comment with the answer above as private. You should be able to see it now

            Apologies for any confusion.

            Regards,

            Oswaldo Hernández.
            JIRA Bugmaster.
            [Atlassian].

            Oswaldo Hernandez (Inactive) added a comment - Sorry gunnar , I made a mistake an accidentally marked the comment with the answer above as private. You should be able to see it now Apologies for any confusion. Regards, Oswaldo Hernández. JIRA Bugmaster. [Atlassian] .

            Gunnar Wagenknecht added a comment - - edited

            This has been marked Resolved/Answered. Where can I read the answer?

            Gunnar Wagenknecht added a comment - - edited This has been marked Resolved/Answered. Where can I read the answer?

            Hi gunnar,

            This class is not part of the jira api. Therefore, we can not guarantee how it will behave when used by any third-party plugin and so I will proceed to close this issue.

            Regards,

            Oswaldo Hernández.
            JIRA Bugmaster.
            [Atlassian].

            Oswaldo Hernandez (Inactive) added a comment - - edited Hi gunnar , This class is not part of the jira api. Therefore, we can not guarantee how it will behave when used by any third-party plugin and so I will proceed to close this issue. Regards, Oswaldo Hernández. JIRA Bugmaster. [Atlassian] .

              Unassigned Unassigned
              d3dcf6589317 Gunnar Wagenknecht
              Affected customers:
              1 This affects my team
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: