我在Tomcat7中运行了一个webapp,它与第三方REST API集成了oauth身份验证。我遇到的问题是间歇性的,似乎是在应用程序运行了大约一周或更长时间后发生的。
尝试从第三方API请求令牌时,我收到以下响应: 引起: javax.net.ssl.SSLPeerUnverifiedException:主机名“login.blah.com”与对等方提供的证书主题不匹配(CN = * .blacked.com,OU =域控制验证)。< /强>
问题是,如果我从同一台机器进行卷曲,它会正确响应,如果我重新启动Tomcat,错误就会消失。我正在使用Spring并使用RestTemplate类进行调用。
最初我使用了RestTemplate的默认实现,并且收到了一个非常通用的SocketTimeout异常。然后我切换到使用Apache HttpComponentsClientHttpRequestFactory,这样我就可以确保我的HttpClient正在关闭并且不会留下陈旧的连接(因为问题只发生在它运行一段时间之后)。自从切换到HttpClient 4.5后,我一直在获得证书问题。
我还在测试环境中运行webapp,在生产中的应用程序抛出异常时,点击相同的URL并正常工作。重新启动tomcat可以解决问题。异常消息“CN = * .blacked.com”中的名称不是我尝试访问的域名,似乎是成人网站的域名。
现在,我对第三方API进行了每次HTTP调用,我使用HttpComponentsClientHttpRequestFactory创建一个新的RestTemplate,发出我的请求,关闭HttpClient并销毁连接工厂。
我不确定是什么导致了这种情况,因为这是一个非常间歇性的问题,所以无法真正重现错误。有没有人有任何想法?