SSLHandshakeException при отправке HTTP-запроса на тестовый сервер Google App Engine (Java)

Я пытаюсь создать приложение с помощью Google App Engine. Часть функциональности требует от меня получения данных календаря со стороннего сервера через http. Важно отметить, что сервер, к которому я подключаюсь, не использует ssl. Таким образом, целевой URL содержит только «http://».

Во всяком случае, я написал некоторый код в обычном Java-приложении в качестве доказательства концепции.

    try {

        // Create url
        URL targetUrl = new URL(target);

        // Open the connection
        URLConnection connection = targetUrl.openConnection();

        // Create InputStream
        InputStream inStream = connection.getInputStream();

        // Parse calendar data using iCal4j
        CalendarBuilder builder = new CalendarBuilder();
        theCalendar = builder.build(inStream);

        // Close the connection
        inStream.close();

    } catch(IOException e) {
        e.printStackTrace();
    } catch (ParserException e) {
        e.printStackTrace();
    }

Итак, я запустил этот код в Java-приложении, и он работал как часы. Увидев, как это работает, я решил попробовать внедрить тот же код в тестовый сервлет, который я создал в своем проекте Google App Engine. Однако, разрешив его выполнение, я получаю эту ошибку:

javax.net.ssl.SSLHandshakeException: Could not verify SSL certificate for URL: http://the_url
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:175)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:45)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:543)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:422)
at java.net.URL.openStream(URL.java:1037)
at com.amftech.website.CalendarServlet.doGet(CalendarServlet.java:36)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:134)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:95)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:508)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Еще заметил, что при запуске сервера выдавались следующие предупреждения:

Jun 12, 2017 2:43:14 PM com.google.appengine.repackaged.com.google.protobuf.UnsafeUtil supportsUnsafeByteBufferOperations
WARNING: platform method missing - proto runtime falling back to safer methods: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessClassInPackage.sun.misc")
Jun 12, 2017 2:43:14 PM com.google.appengine.repackaged.com.google.protobuf.UnsafeUtil supportsUnsafeArrayOperations
WARNING: platform method missing - proto runtime falling back to safer methods: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "accessClassInPackage.sun.misc")
Jun 12, 2017 2:43:14 PM com.google.appengine.repackaged.com.google.protobuf.UnsafeUtil supportsUnsafeCopyMemory
WARNING: copyMemory is missing from platform - proto runtime falling back to safer methods.

Я не знаю, значат ли что-нибудь эти предупреждения, но я думал, что они могут. Есть ли проблема с настройкой моего тестового сервера? Настройка моего проекта? Я обыскал весь интернет и не нашел ничего, кроме «убедитесь, что вы загрузили сертификат». Но сервер, к которому я подключаюсь, даже не использует SSL, так почему же он жалуется на рукопожатие SSL?


person Austin Fay    schedule 12.06.2017    source источник


Ответы (2)


Итак, я не уверен, что происходит, но я думаю, что моя установка была каким-то образом перепутана. Я смог решить эту проблему, удалив Eclipse, удалив Google Cloud SDK, удалив java, сбросив свое рабочее пространство в Eclipse, а также переустановив и перенастроив все. Так что я надеюсь, что я мог помочь кому-то с той же проблемой!

person Austin Fay    schedule 13.06.2017

Если вы обновили среду выполнения java8 в Google App Engine, вам необходимо настроить файл appengine-web.xml. Для получения дополнительной информации см. java.net.UnknownHostException: appengine.google.com< /а>

person Savio Sebastian    schedule 13.11.2018