Skip to content

Commit 28fc966

Browse files
committed
Set ignoreHTTPSErrors per context
1 parent fa17570 commit 28fc966

File tree

6 files changed

+40
-6
lines changed

6 files changed

+40
-6
lines changed

juggler/TargetRegistry.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const {EventEmitter} = ChromeUtils.import('resource://gre/modules/EventEmitter.j
22
const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
33
const {SimpleChannel} = ChromeUtils.import('chrome://juggler/content/SimpleChannel.js');
44
const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
5+
const {Preferences} = ChromeUtils.import("resource://gre/modules/Preferences.jsm");
56
const {ContextualIdentityService} = ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm");
67
const {NetUtil} = ChromeUtils.import('resource://gre/modules/NetUtil.jsm');
78
const {PageHandler} = ChromeUtils.import("chrome://juggler/content/protocol/PageHandler.js");
@@ -325,6 +326,18 @@ class BrowserContext {
325326
this.options.scriptsToEvaluateOnNewDocument = [];
326327
this.options.bindings = [];
327328
this.pages = new Set();
329+
330+
if (this.options.ignoreHTTPSErrors) {
331+
Preferences.set("network.stricttransportsecurity.preloadlist", false);
332+
Preferences.set("security.cert_pinning.enforcement_level", 0);
333+
334+
const certOverrideService = Cc[
335+
"@mozilla.org/security/certoverride;1"
336+
].getService(Ci.nsICertOverrideService);
337+
certOverrideService.setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
338+
true, this.userContextId
339+
);
340+
}
328341
}
329342

330343
destroy() {

juggler/protocol/Protocol.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ const Browser = {
210210
removeOnDetach: t.Optional(t.Boolean),
211211
userAgent: t.Optional(t.String),
212212
bypassCSP: t.Optional(t.Boolean),
213+
ignoreHTTPSErrors: t.Optional(t.Boolean),
213214
javaScriptDisabled: t.Optional(t.Boolean),
214215
viewport: t.Optional(pageTypes.Viewport),
215216
locale: t.Optional(t.String),

security/manager/ssl/SSLServerCertVerification.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,8 +1296,8 @@ PRErrorCode AuthCertificateParseResults(
12961296
return SEC_ERROR_NO_MEMORY;
12971297
}
12981298
nsresult rv = overrideService->HasMatchingOverride(
1299-
aHostName, aPort, nssCert, &overrideBits, &isTemporaryOverride,
1300-
&haveOverride);
1299+
aHostName, aPort, aOriginAttributes.mUserContextId, nssCert,
1300+
&overrideBits, &isTemporaryOverride, &haveOverride);
13011301
if (NS_SUCCEEDED(rv) && haveOverride) {
13021302
// remove the errors that are already overriden
13031303
remainingDisplayErrors &= ~overrideBits;

security/manager/ssl/nsCertOverrideService.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -413,13 +413,20 @@ nsCertOverrideService::RememberTemporaryValidityOverrideUsingFingerprint(
413413

414414
NS_IMETHODIMP
415415
nsCertOverrideService::HasMatchingOverride(const nsACString& aHostName,
416-
int32_t aPort, nsIX509Cert* aCert,
416+
int32_t aPort,
417+
uint32_t aUserContextId,
418+
nsIX509Cert* aCert,
417419
uint32_t* aOverrideBits,
418420
bool* aIsTemporary, bool* _retval) {
419421
bool disableAllSecurityCheck = false;
420422
{
421423
MutexAutoLock lock(mMutex);
422-
disableAllSecurityCheck = mDisableAllSecurityCheck;
424+
if (aUserContextId) {
425+
disableAllSecurityCheck = mUserContextIdsWithDisabledSecurityChecks.has(
426+
aUserContextId);
427+
} else {
428+
disableAllSecurityCheck = mDisableAllSecurityCheck;
429+
}
423430
}
424431
if (disableAllSecurityCheck) {
425432
nsCertOverride::OverrideBits all = nsCertOverride::OverrideBits::Untrusted |
@@ -632,12 +639,21 @@ static bool IsDebugger() {
632639

633640
NS_IMETHODIMP
634641
nsCertOverrideService::
635-
SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(bool aDisable) {
642+
SetDisableAllSecurityChecksAndLetAttackersInterceptMyData(
643+
bool aDisable, uint32_t aUserContextId) {
636644
if (false /* juggler hacks */ && !(PR_GetEnv("XPCSHELL_TEST_PROFILE_DIR") || IsDebugger())) {
637645
return NS_ERROR_NOT_AVAILABLE;
638646
}
639647

640648
MutexAutoLock lock(mMutex);
649+
if (aUserContextId) {
650+
if (aDisable) {
651+
mozilla::Unused << mUserContextIdsWithDisabledSecurityChecks.put(aUserContextId);
652+
} else {
653+
mUserContextIdsWithDisabledSecurityChecks.remove(aUserContextId);
654+
}
655+
return NS_OK;
656+
}
641657
mDisableAllSecurityCheck = aDisable;
642658
return NS_OK;
643659
}

security/manager/ssl/nsCertOverrideService.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class nsCertOverrideService final : public nsICertOverrideService,
133133
~nsCertOverrideService();
134134

135135
bool mDisableAllSecurityCheck;
136+
mozilla::HashSet<uint32_t> mUserContextIdsWithDisabledSecurityChecks;
136137
mozilla::Mutex mMutex;
137138
nsCOMPtr<nsIFile> mSettingsFile;
138139
nsTHashtable<nsCertOverrideEntry> mSettingsTable;

security/manager/ssl/nsICertOverrideService.idl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ interface nsICertOverrideService : nsISupports {
9898
[must_use]
9999
boolean hasMatchingOverride(in AUTF8String aHostName,
100100
in int32_t aPort,
101+
in uint32_t aUserContextId,
101102
in nsIX509Cert aCert,
102103
out uint32_t aOverrideBits,
103104
out boolean aIsTemporary);
@@ -137,5 +138,7 @@ interface nsICertOverrideService : nsISupports {
137138
* @param aDisable If true, disable all security check and make
138139
* hasMatchingOverride always return true.
139140
*/
140-
void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(in boolean aDisable);
141+
void setDisableAllSecurityChecksAndLetAttackersInterceptMyData(
142+
in boolean aDisable,
143+
[optional] in uint32_t aUserContextId);
141144
};

0 commit comments

Comments
 (0)