Tomcat SSL证书 - 发布请求失败

时间:2018-03-19 17:59:38

标签: java tomcat ssl certificate keystore

我有一个试图发出以下请求的Tomcat Java应用程序:

https://www.googleapis.com/oauth2/v4/token?scope=profile+email

我看到它何时尝试写入失败的连接。

conn.getOutputStream().write(content);

其中写入正文的内容是上面显示的数据。它会引发以下错误:

java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$DefaultSSLContext)

当我将Fiddler连接到Tomcat时,我可以看到在成功发送之前的请求:https://accounts.google.com/o/oauth2/v2/auth 但我实际上从未在Fiddler中看到下一个发送到URL的请求失败:https://www.googleapis.com/oauth2/v4/token

基于此以及它打印的消息,在准备要发送的数据时似乎失败了。

问题听起来像SSL和证书。 我下载了URL https://www.googleapis.com/oauth2/v4/token的两个证书,并将它们安装到第一个Tomcat的密钥库,然后安装到信任库。 (首先将它添加到密钥库中,当它没有工作时,我添加到trustsstore。 这并没有解决问题。

由于我记录了正在写入输出流的数据,因此我尝试从日志文件中手动复制请求正文数据,包括从Google返回的代码并将其粘贴到Chrome扩展程序中#34 ;休息控制台"。 当我这样做它有效。但我发现Chrome已经为https://www.googleapis.com安装了证书,所以也许这就是浏览器请求工作的原因。

在此代码的oAuth1版本中,我认为我们不需要安装证书。此外,当我从Google oAuth2运行Java示例时,除非证书以某种方式与Jetty打包在一起,否则我不会看到它们已安装。所以,我并不认为证书是问题所在。

在Tomcat中,我尝试通过在Tomcat JVM启动中添加以下内容来启用SSL调试:

-Djavax.net.debug=ssl,session,defaultctx,trustmanager,keymanager

它写了很多信息,但是在发生错误之前没有写任何内容。

如何确定错误?

=================================

这是堆栈跟踪:

  2018-03-19 08:32:11,324  DEBUG [scribe.model.Request] [http-bio-8080-exec-11] 
  java.security.NoSuchAlgorithmException: Error constructing implementation 
  (algorithm: Default, provider: SunJSSE, class: 
  sun.security.ssl.SSLContextImpl$DefaultSSLContext)
   2018-03-19 08:32:11,324  DEBUG [scribe.model.Request] [http-bio-8080-exec-11] 
  java.lang.Throwable:
        at org.scribe.model.Request.addBody(Request.java:153)
        at org.scribe.model.Request.doSend(Request.java:113)
        at org.scribe.model.Request.send(Request.java:69)
        at org.scribe.model.OAuthRequest.send(OAuthRequest.java:12)
        at org.scribe.oauth.OAuth20ServiceImpl.getAccessToken(OAuth20ServiceImpl.java:38)
        at ch.gadp.alfresco.OAuthSSOAuthenticationFilter.getUserProfile(OAuthSSOAuthenticationFilter.java:192)
        at ch.gadp.alfresco.OAuthSSOAuthenticationFilter.processRequestToken(OAuthSSOAuthenticationFilter.java:331)
        at ch.gadp.alfresco.OAuthSSOAuthenticationFilter.doOAuthAuthentication(OAuthSSOAuthenticationFilter.java:375)
        at ch.gadp.alfresco.OAuthSSOAuthenticationFilter.doFilter(OAuthSSOAuthenticationFilter.java:428)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)

0 个答案:

没有答案