Ich versuche, eine Anwendung mit Google App Engine zu erstellen. Ein Teil der Funktionalität erfordert, dass ich Kalenderdaten von einem Drittanbieterserver über http abrufen muss. Es ist wichtig zu beachten, dass der Server, mit dem ich mich verbinde, SSL nicht verwendet. Die Ziel-URL enthält also nur "http: //".SSLHandshakeException beim Ausstellen der HTTP-Anfrage auf dem Google App Engine-Testserver (Java)
Wie auch immer, ich schrieb etwas Code in einer normalen Java-Anwendung als ein Beweis für das Konzept.
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();
}
Also ich lief diesen Code in der Java-Anwendung und es funktionierte wie ein Charme. Nachdem ich gesehen hatte, dass es funktionierte, beschloss ich, den gleichen Code in ein Test-Servlet zu implementieren, das ich in meinem Google App Engine-Projekt erstellt hatte. Doch bei so dass es auszuführen, bekomme ich diesen Fehler:
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)
Ich habe auch bemerkt, dass der Server beim Abschuss wurden folgende Warnungen ausgegeben:
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.
Ich weiß nicht, ob diese Warnungen alles bedeuten, aber ich dachte, sie könnten. Gibt es ein Problem bei der Einrichtung meines Testservers? Mein Projekt-Setup? Ich habe das gesamte Internet durchsucht und nichts gefunden, außer "vergewissere dich, dass du das Zertifikat heruntergeladen hast". Aber der Server, mit dem ich mich verbinde, benutzt nicht einmal SSL, also warum beschwert er sich über einen SSL-Handshake?