Title: [246878] trunk/Source/WebKit
Revision
246878
Author
[email protected]
Date
2019-06-27 01:58:52 -0700 (Thu, 27 Jun 2019)

Log Message

[SOUP] WebSockets: handle TLS certificate and errors
https://bugs.webkit.org/show_bug.cgi?id=199223

Reviewed by Michael Catanzaro.

Connect to accept-certificate signal on the WebSocket message connection to decide what to do in case of TLS errors.

* NetworkProcess/soup/NetworkSessionSoup.cpp:
(WebKit::webSocketAcceptCertificateCallback):
(WebKit::webSocketMessageNetworkEventCallback):
(WebKit::NetworkSessionSoup::createWebSocketTask):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (246877 => 246878)


--- trunk/Source/WebKit/ChangeLog	2019-06-27 08:52:38 UTC (rev 246877)
+++ trunk/Source/WebKit/ChangeLog	2019-06-27 08:58:52 UTC (rev 246878)
@@ -1,5 +1,19 @@
 2019-06-27  Carlos Garcia Campos  <[email protected]>
 
+        [SOUP] WebSockets: handle TLS certificate and errors
+        https://bugs.webkit.org/show_bug.cgi?id=199223
+
+        Reviewed by Michael Catanzaro.
+
+        Connect to accept-certificate signal on the WebSocket message connection to decide what to do in case of TLS errors.
+
+        * NetworkProcess/soup/NetworkSessionSoup.cpp:
+        (WebKit::webSocketAcceptCertificateCallback):
+        (WebKit::webSocketMessageNetworkEventCallback):
+        (WebKit::NetworkSessionSoup::createWebSocketTask):
+
+2019-06-27  Carlos Garcia Campos  <[email protected]>
+
         [SOUP] Use libsoup WebSockets API
         https://bugs.webkit.org/show_bug.cgi?id=199151
 

Modified: trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp (246877 => 246878)


--- trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2019-06-27 08:52:38 UTC (rev 246877)
+++ trunk/Source/WebKit/NetworkProcess/soup/NetworkSessionSoup.cpp	2019-06-27 08:58:52 UTC (rev 246878)
@@ -30,6 +30,7 @@
 #include "NetworkSessionCreationParameters.h"
 #include "WebCookieManager.h"
 #include "WebSocketTaskSoup.h"
+#include <WebCore/DeprecatedGlobalSettings.h>
 #include <WebCore/NetworkStorageSession.h>
 #include <WebCore/ResourceRequest.h>
 #include <WebCore/SoupNetworkSession.h>
@@ -67,6 +68,22 @@
 #endif
 }
 
+static gboolean webSocketAcceptCertificateCallback(GTlsConnection*, GTlsCertificate* certificate, GTlsCertificateFlags errors, SoupMessage* soupMessage)
+{
+    if (DeprecatedGlobalSettings::allowsAnySSLCertificate())
+        return TRUE;
+
+    return !SoupNetworkSession::checkTLSErrors(soupURIToURL(soup_message_get_uri(soupMessage)), certificate, errors);
+}
+
+static void webSocketMessageNetworkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream* connection)
+{
+    if (event != G_SOCKET_CLIENT_TLS_HANDSHAKING)
+        return;
+
+    g_signal_connect(connection, "accept-certificate", G_CALLBACK(webSocketAcceptCertificateCallback), soupMessage);
+}
+
 std::unique_ptr<WebSocketTask> NetworkSessionSoup::createWebSocketTask(NetworkSocketChannel& channel, const ResourceRequest& request, const String& protocol)
 {
     GUniquePtr<SoupURI> soupURI = request.createSoupURI();
@@ -75,6 +92,8 @@
 
     GRefPtr<SoupMessage> soupMessage = adoptGRef(soup_message_new_from_uri(SOUP_METHOD_GET, soupURI.get()));
     request.updateSoupMessage(soupMessage.get());
+    if (request.url().protocolIs("wss"))
+        g_signal_connect(soupMessage.get(), "network-event", G_CALLBACK(webSocketMessageNetworkEventCallback), nullptr);
     return std::make_unique<WebSocketTask>(channel, soupSession(), soupMessage.get(), protocol);
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to