aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/servoparser
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-08-08 16:00:10 +0200
committerGitHub <noreply@github.com>2023-08-08 14:00:10 +0000
commitbce7622cde4cd10f6b3edf852d97ae9a540a0076 (patch)
treee8c09178e875b63e64b32a290840c6ff80d2c4e0 /components/script/dom/servoparser
parentab0f48f8e8a72542269c9e563fad4fa03273d2f3 (diff)
downloadservo-bce7622cde4cd10f6b3edf852d97ae9a540a0076.tar.gz
servo-bce7622cde4cd10f6b3edf852d97ae9a540a0076.zip
Switch to rustls and webpki-roots (#30025)
This change replaces OpenSSL with rustls and also the manually curated CA certs file with webpki-roots (effectively the same thing, but as a crate). Generally speaking the design of the network stack is the same. Changes: - Code around certificate overrides needed to be refactored to work with rustls so the various thread-safe list of certificates is refactored into `CertificateErrorOverrideManager` - hyper-rustls takes care of setting ALPN protocols for HTTP requests, so for WebSockets this is moved to the WebSocket code. - The safe set of cypher suites is chosen, which seem to correspond to the "Modern" configuration from [1]. This can be adjusted later. - Instead of passing a string of PEM CA certificates around, an enum is used that includes parsed Certificates (or the default which reads them from webpki-roots). - Code for starting up an SSL server for testing is cleaned up a little, due to the fact that the certificates need to be overriden explicitly now. This is due to the fact that the `webpki` crate is more stringent with self-signed certificates than SSL (CA certificates cannot used as end-entity certificates). [2] 1. https://wiki.mozilla.org/Security/Server_Side_TLS 2. https://github.com/briansmith/webpki/issues/114 Fixes #7888. Fixes #13749. Fixes #26835. Fixes #29291.
Diffstat (limited to 'components/script/dom/servoparser')
-rw-r--r--components/script/dom/servoparser/mod.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index 44d0c3de1df..943a680d4ef 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -36,6 +36,7 @@ use crate::dom::virtualmethods::vtable_for;
use crate::network_listener::PreInvoke;
use crate::realms::enter_realm;
use crate::script_thread::ScriptThread;
+use base64::{engine::general_purpose, Engine as _};
use content_security_policy::{self as csp, CspList};
use dom_struct::dom_struct;
use embedder_traits::resources::{self, Resource};
@@ -880,8 +881,8 @@ impl FetchResponseListener for ParserContext {
self.is_synthesized_document = true;
let page = resources::read_string(Resource::BadCertHTML);
let page = page.replace("${reason}", &reason);
- let page =
- page.replace("${bytes}", std::str::from_utf8(&bytes).unwrap_or_default());
+ let encoded_bytes = general_purpose::STANDARD_NO_PAD.encode(&bytes);
+ let page = page.replace("${bytes}", encoded_bytes.as_str());
let page =
page.replace("${secret}", &net_traits::PRIVILEGED_SECRET.to_string());
parser.push_string_input_chunk(page);