Skip to content

Commit 07cf1e9

Browse files
committed
Bug 1720118 - always use the TLS token cache r=kershaw,necko-reviewers,ci-and-tooling,jmaher
Differential Revision: https://phabricator.services.mozilla.com/D158792
1 parent 62885a5 commit 07cf1e9

File tree

12 files changed

+12
-174
lines changed

12 files changed

+12
-174
lines changed

modules/libpref/init/StaticPrefList.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11035,12 +11035,6 @@
1103511035
value: true
1103611036
mirror: always
1103711037

11038-
# Whether to cache SSL resumption tokens in necko.
11039-
- name: network.ssl_tokens_cache_enabled
11040-
type: RelaxedAtomicBool
11041-
value: true
11042-
mirror: always
11043-
1104411038
# Capacity of the above cache, in kilobytes.
1104511039
- name: network.ssl_tokens_cache_capacity
1104611040
type: RelaxedAtomicUint32

netwerk/base/SSLTokensCache.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -510,10 +510,6 @@ SSLTokensCache::CollectReports(nsIHandleReportCallback* aHandleReport,
510510
// static
511511
void SSLTokensCache::Clear() {
512512
LOG(("SSLTokensCache::Clear"));
513-
if (!StaticPrefs::network_ssl_tokens_cache_enabled() &&
514-
!StaticPrefs::network_http_http3_enable_0rtt()) {
515-
return;
516-
}
517513

518514
StaticMutexAutoLock lock(sLock);
519515
if (!gInstance) {

netwerk/base/nsIOService.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ static const char* gCallbackPrefs[] = {
217217
static const char* gCallbackPrefsForSocketProcess[] = {
218218
WEBRTC_PREF_PREFIX,
219219
NETWORK_DNS_PREF,
220-
"network.ssl_tokens_cache_enabled",
221220
"network.send_ODA_to_content_directly",
222221
"network.trr.",
223222
"doh-rollout.",

netwerk/test/unit/test_http3_0rtt.js

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
var { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm");
66

77
registerCleanupFunction(async () => {
8-
Services.prefs.clearUserPref("network.ssl_tokens_cache_enabled");
98
http3_clear_prefs();
109
});
1110

@@ -68,14 +67,8 @@ async function test_first_conn_no_resumed() {
6867
await chanPromise(chan, listener);
6968
}
7069

71-
async function test_0RTT(enable_ssl_tokens_cache, enable_0rtt, resumed) {
72-
info(
73-
`enable_ssl_tokens_cache=${enable_ssl_tokens_cache} enable_0rtt=${enable_0rtt} resumed=${resumed}`
74-
);
75-
Services.prefs.setBoolPref(
76-
"network.ssl_tokens_cache_enabled",
77-
enable_ssl_tokens_cache
78-
);
70+
async function test_0RTT(enable_0rtt, resumed) {
71+
info(`enable_0rtt=${enable_0rtt} resumed=${resumed}`);
7972
Services.prefs.setBoolPref("network.http.http3.enable_0rtt", enable_0rtt);
8073

8174
// Make sure the h3 connection created by the previous test is cleared.
@@ -92,16 +85,10 @@ async function test_0RTT(enable_ssl_tokens_cache, enable_0rtt, resumed) {
9285

9386
add_task(async function test_0RTT_setups() {
9487
await test_first_conn_no_resumed();
95-
// http3.0RTT and network.ssl_tokens_cache_enabled enabled
96-
// ssl_tokens_cache
97-
await test_0RTT(true, true, true);
9888

99-
// http3.0RTT enabled and network.ssl_tokens_cache_enabled disabled
100-
await test_0RTT(false, true, true);
89+
// http3.0RTT enabled
90+
await test_0RTT(true, true);
10191

102-
// http3.0RTT disabled and network.ssl_tokens_cache_enabled enabled
103-
await test_0RTT(true, false, false);
104-
105-
// http3.0RTT disabled and network.ssl_tokens_cache_enabled disabled
106-
await test_0RTT(false, false, false);
92+
// http3.0RTT disabled
93+
await test_0RTT(false, false);
10794
});

netwerk/test/unit/test_http3_prio_disabled.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ load("../unit/test_http3_prio_helpers.js");
1515
// otherwise the wrapper will handle
1616
if (!inChildProcess()) {
1717
registerCleanupFunction(async () => {
18-
Services.prefs.clearUserPref("network.ssl_tokens_cache_enabled");
1918
Services.prefs.clearUserPref("network.http.http3.priority");
2019
http3_clear_prefs();
2120
});

netwerk/test/unit/test_http3_prio_enabled.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ load("../unit/test_http3_prio_helpers.js");
1515
// otherwise the wrapper will handle
1616
if (!inChildProcess()) {
1717
registerCleanupFunction(async () => {
18-
Services.prefs.clearUserPref("network.ssl_tokens_cache_enabled");
1918
Services.prefs.clearUserPref("network.http.http3.priority");
2019
http3_clear_prefs();
2120
});

netwerk/test/unit_ipc/test_http3_prio_disabled_wrap.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//
44

55
registerCleanupFunction(async () => {
6-
Services.prefs.clearUserPref("network.ssl_tokens_cache_enabled");
76
Services.prefs.clearUserPref("network.http.http3.priority");
87
http3_clear_prefs();
98
});

netwerk/test/unit_ipc/test_http3_prio_enabled_wrap.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//
44

55
registerCleanupFunction(async () => {
6-
Services.prefs.clearUserPref("network.ssl_tokens_cache_enabled");
76
Services.prefs.clearUserPref("network.http.http3.priority");
87
http3_clear_prefs();
98
});

security/manager/ssl/nsNSSCallbacks.cpp

Lines changed: 1 addition & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,126 +1008,6 @@ static void AccumulateCipherSuite(Telemetry::HistogramID probe,
10081008
Telemetry::Accumulate(probe, value);
10091009
}
10101010

1011-
// In the case of session resumption, the AuthCertificate hook has been bypassed
1012-
// (because we've previously successfully connected to our peer). That being the
1013-
// case, we unfortunately don't know what the verified certificate chain was, if
1014-
// the peer's server certificate verified as extended validation, or what its CT
1015-
// status is (if enabled). To address this, we attempt to build a certificate
1016-
// chain here using as much of the original context as possible (e.g. stapled
1017-
// OCSP responses, SCTs, the hostname, the first party domain, etc.). Note that
1018-
// because we are on the socket thread, this must not cause any network
1019-
// requests, hence the use of FLAG_LOCAL_ONLY.
1020-
static void RebuildVerifiedCertificateInformation(PRFileDesc* fd,
1021-
nsNSSSocketInfo* infoObject) {
1022-
MOZ_ASSERT(fd);
1023-
MOZ_ASSERT(infoObject);
1024-
1025-
if (!fd || !infoObject) {
1026-
return;
1027-
}
1028-
1029-
UniqueCERTCertificate cert(SSL_PeerCertificate(fd));
1030-
MOZ_ASSERT(cert, "SSL_PeerCertificate failed in TLS handshake callback?");
1031-
if (!cert) {
1032-
return;
1033-
}
1034-
1035-
Maybe<nsTArray<nsTArray<uint8_t>>> maybePeerCertsBytes;
1036-
UniqueCERTCertList peerCertChain(SSL_PeerCertificateChain(fd));
1037-
if (!peerCertChain) {
1038-
MOZ_LOG(gPIPNSSLog, LogLevel::Debug,
1039-
("RebuildVerifiedCertificateInformation: failed to get peer "
1040-
"certificate chain"));
1041-
} else {
1042-
nsTArray<nsTArray<uint8_t>> peerCertsBytes;
1043-
for (CERTCertListNode* n = CERT_LIST_HEAD(peerCertChain);
1044-
!CERT_LIST_END(n, peerCertChain); n = CERT_LIST_NEXT(n)) {
1045-
// Don't include the end-entity certificate.
1046-
if (n == CERT_LIST_HEAD(peerCertChain)) {
1047-
continue;
1048-
}
1049-
nsTArray<uint8_t> certBytes;
1050-
certBytes.AppendElements(n->cert->derCert.data, n->cert->derCert.len);
1051-
peerCertsBytes.AppendElement(std::move(certBytes));
1052-
}
1053-
maybePeerCertsBytes.emplace(std::move(peerCertsBytes));
1054-
}
1055-
1056-
RefPtr<SharedCertVerifier> certVerifier(GetDefaultCertVerifier());
1057-
MOZ_ASSERT(certVerifier,
1058-
"Certificate verifier uninitialized in TLS handshake callback?");
1059-
if (!certVerifier) {
1060-
return;
1061-
}
1062-
1063-
// We don't own these pointers.
1064-
const SECItemArray* stapledOCSPResponses = SSL_PeerStapledOCSPResponses(fd);
1065-
Maybe<nsTArray<uint8_t>> stapledOCSPResponse;
1066-
// we currently only support single stapled responses
1067-
if (stapledOCSPResponses && stapledOCSPResponses->len == 1) {
1068-
stapledOCSPResponse.emplace();
1069-
stapledOCSPResponse->SetCapacity(stapledOCSPResponses->items[0].len);
1070-
stapledOCSPResponse->AppendElements(stapledOCSPResponses->items[0].data,
1071-
stapledOCSPResponses->items[0].len);
1072-
}
1073-
1074-
Maybe<nsTArray<uint8_t>> sctsFromTLSExtension;
1075-
const SECItem* sctsFromTLSExtensionSECItem = SSL_PeerSignedCertTimestamps(fd);
1076-
if (sctsFromTLSExtensionSECItem) {
1077-
sctsFromTLSExtension.emplace();
1078-
sctsFromTLSExtension->SetCapacity(sctsFromTLSExtensionSECItem->len);
1079-
sctsFromTLSExtension->AppendElements(sctsFromTLSExtensionSECItem->data,
1080-
sctsFromTLSExtensionSECItem->len);
1081-
}
1082-
1083-
int flags = mozilla::psm::CertVerifier::FLAG_LOCAL_ONLY;
1084-
if (!infoObject->SharedState().IsOCSPStaplingEnabled() ||
1085-
!infoObject->SharedState().IsOCSPMustStapleEnabled()) {
1086-
flags |= CertVerifier::FLAG_TLS_IGNORE_STATUS_REQUEST;
1087-
}
1088-
1089-
EVStatus evStatus;
1090-
CertificateTransparencyInfo certificateTransparencyInfo;
1091-
nsTArray<nsTArray<uint8_t>> builtChainCertBytes;
1092-
nsTArray<uint8_t> certBytes(cert->derCert.data, cert->derCert.len);
1093-
bool isBuiltCertChainRootBuiltInRoot = false;
1094-
mozilla::pkix::Result rv = certVerifier->VerifySSLServerCert(
1095-
certBytes, mozilla::pkix::Now(), infoObject, infoObject->GetHostName(),
1096-
builtChainCertBytes, flags, maybePeerCertsBytes, stapledOCSPResponse,
1097-
sctsFromTLSExtension, Nothing(), infoObject->GetOriginAttributes(),
1098-
&evStatus,
1099-
nullptr, // OCSP stapling telemetry
1100-
nullptr, // key size telemetry
1101-
nullptr, // pinning telemetry
1102-
&certificateTransparencyInfo, &isBuiltCertChainRootBuiltInRoot);
1103-
1104-
if (rv != Success) {
1105-
MOZ_LOG(gPIPNSSLog, LogLevel::Debug,
1106-
("HandshakeCallback: couldn't rebuild verified certificate info"));
1107-
}
1108-
1109-
nsCOMPtr<nsIX509Cert> x509Cert(new nsNSSCertificate(cert.get()));
1110-
if (rv == Success && evStatus == EVStatus::EV) {
1111-
MOZ_LOG(gPIPNSSLog, LogLevel::Debug,
1112-
("HandshakeCallback using NEW cert (is EV)"));
1113-
infoObject->SetServerCert(x509Cert, EVStatus::EV);
1114-
} else {
1115-
MOZ_LOG(gPIPNSSLog, LogLevel::Debug,
1116-
("HandshakeCallback using NEW cert (is not EV)"));
1117-
infoObject->SetServerCert(x509Cert, EVStatus::NotEV);
1118-
}
1119-
1120-
if (rv == Success) {
1121-
uint16_t status =
1122-
TransportSecurityInfo::ConvertCertificateTransparencyInfoToStatus(
1123-
certificateTransparencyInfo);
1124-
infoObject->SetCertificateTransparencyStatus(status);
1125-
infoObject->SetSucceededCertChain(std::move(builtChainCertBytes));
1126-
infoObject->SetIsBuiltCertChainRootBuiltInRoot(
1127-
isBuiltCertChainRootBuiltInRoot);
1128-
}
1129-
}
1130-
11311011
void HandshakeCallback(PRFileDesc* fd, void* client_data) {
11321012
SECStatus rv;
11331013

@@ -1265,11 +1145,7 @@ void HandshakeCallback(PRFileDesc* fd, void* client_data) {
12651145
MOZ_LOG(gPIPNSSLog, LogLevel::Debug,
12661146
("HandshakeCallback KEEPING existing cert\n"));
12671147
} else {
1268-
if (StaticPrefs::network_ssl_tokens_cache_enabled()) {
1269-
infoObject->RebuildCertificateInfoFromSSLTokenCache();
1270-
} else {
1271-
RebuildVerifiedCertificateInformation(fd, infoObject);
1272-
}
1148+
infoObject->RebuildCertificateInfoFromSSLTokenCache();
12731149
}
12741150

12751151
nsITransportSecurityInfo::OverridableErrorCategory overridableErrorCategory;

security/manager/ssl/nsNSSIOLayer.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -774,9 +774,7 @@ PRStatus nsNSSSocketInfo::CloseSocketAndDestroy() {
774774

775775
// We need to clear the callback to make sure the ssl layer cannot call the
776776
// callback after mFD is nulled.
777-
if (StaticPrefs::network_ssl_tokens_cache_enabled()) {
778-
SSL_SetResumptionTokenCallback(mFd, nullptr, nullptr);
779-
}
777+
SSL_SetResumptionTokenCallback(mFd, nullptr, nullptr);
780778

781779
PRStatus status = mFd->methods->close(mFd);
782780

@@ -901,10 +899,6 @@ nsNSSSocketInfo::GetPeerId(nsACString& aResult) {
901899
}
902900

903901
nsresult nsNSSSocketInfo::SetResumptionTokenFromExternalCache() {
904-
if (!StaticPrefs::network_ssl_tokens_cache_enabled()) {
905-
return NS_OK;
906-
}
907-
908902
if (!mFd) {
909903
return NS_ERROR_FAILURE;
910904
}
@@ -2255,13 +2249,11 @@ nsresult nsSSLIOLayerAddToSocket(int32_t family, const char* host, int32_t port,
22552249

22562250
infoObject->SharedState().NoteSocketCreated();
22572251

2258-
if (StaticPrefs::network_ssl_tokens_cache_enabled()) {
2259-
rv = infoObject->SetResumptionTokenFromExternalCache();
2260-
if (NS_FAILED(rv)) {
2261-
return rv;
2262-
}
2263-
SSL_SetResumptionTokenCallback(sslSock, &StoreResumptionToken, infoObject);
2252+
rv = infoObject->SetResumptionTokenFromExternalCache();
2253+
if (NS_FAILED(rv)) {
2254+
return rv;
22642255
}
2256+
SSL_SetResumptionTokenCallback(sslSock, &StoreResumptionToken, infoObject);
22652257

22662258
return NS_OK;
22672259
loser:

0 commit comments

Comments
 (0)