diff options
Diffstat (limited to 'net/ssl/server_bound_cert_service.cc')
-rw-r--r-- | net/ssl/server_bound_cert_service.cc | 69 |
1 files changed, 24 insertions, 45 deletions
diff --git a/net/ssl/server_bound_cert_service.cc b/net/ssl/server_bound_cert_service.cc index bf77719..bed97cf 100644 --- a/net/ssl/server_bound_cert_service.cc +++ b/net/ssl/server_bound_cert_service.cc @@ -46,27 +46,11 @@ bool IsSupportedCertType(uint8 type) { switch(type) { case CLIENT_CERT_ECDSA_SIGN: return true; - // If we add any more supported types, CertIsValid will need to be updated - // to check that the returned type matches one of the requested types. default: return false; } } -bool CertIsValid(const std::string& domain, - SSLClientCertType type, - base::Time expiration_time) { - if (expiration_time < base::Time::Now()) { - DVLOG(1) << "Cert store had expired cert for " << domain; - return false; - } else if (!IsSupportedCertType(type)) { - DVLOG(1) << "Cert store had cert of wrong type " << type << " for " - << domain; - return false; - } - return true; -} - // Used by the GetDomainBoundCertResult histogram to record the final // outcome of each GetDomainBoundCert call. Do not re-use values. enum GetCertResult { @@ -415,7 +399,7 @@ ServerBoundCertService::ServerBoundCertService( inflight_joins_(0) { base::Time start = base::Time::Now(); base::Time end = start + base::TimeDelta::FromDays( - kValidityPeriodInDays + kSystemTimeValidityBufferInDays); + kValidityPeriodInDays + kSystemTimeValidityBufferInDays); is_system_time_valid_ = x509_util::IsSupportedValidityRange(start, end); } @@ -507,32 +491,30 @@ int ServerBoundCertService::GetDomainBoundCert( } // Check if a domain bound cert of an acceptable type already exists for this - // domain, and that it has not expired. + // domain. Note that |expiration_time| is ignored, and expired certs are + // considered valid. base::Time expiration_time; if (server_bound_cert_store_->GetServerBoundCert( domain, type, - &expiration_time, + &expiration_time /* ignored */, private_key, cert, base::Bind(&ServerBoundCertService::GotServerBoundCert, weak_ptr_factory_.GetWeakPtr()))) { - if (*type != CLIENT_CERT_INVALID_TYPE) { - // Sync lookup found a cert. - if (CertIsValid(domain, *type, expiration_time)) { - DVLOG(1) << "Cert store had valid cert for " << domain - << " of type " << *type; - cert_store_hits_++; - RecordGetDomainBoundCertResult(SYNC_SUCCESS); - base::TimeDelta request_time = base::TimeTicks::Now() - request_start; - UMA_HISTOGRAM_TIMES("DomainBoundCerts.GetCertTimeSync", request_time); - RecordGetCertTime(request_time); - return OK; - } + if (IsSupportedCertType(*type)) { + // Sync lookup found a valid cert. + DVLOG(1) << "Cert store had valid cert for " << domain + << " of type " << *type; + cert_store_hits_++; + RecordGetDomainBoundCertResult(SYNC_SUCCESS); + base::TimeDelta request_time = base::TimeTicks::Now() - request_start; + UMA_HISTOGRAM_TIMES("DomainBoundCerts.GetCertTimeSync", request_time); + RecordGetCertTime(request_time); + return OK; } - // Sync lookup did not find a cert, or it found an expired one. Start - // generating a new one. + // Sync lookup did not find a valid cert. Start generating a new one. ServerBoundCertServiceWorker* worker = new ServerBoundCertServiceWorker( domain, preferred_type, @@ -577,20 +559,17 @@ void ServerBoundCertService::GotServerBoundCert( } ServerBoundCertServiceJob* job = j->second; - if (type != CLIENT_CERT_INVALID_TYPE) { - // Async DB lookup found a cert. - if (CertIsValid(server_identifier, type, expiration_time)) { - DVLOG(1) << "Cert store had valid cert for " << server_identifier - << " of type " << type; - cert_store_hits_++; - // ServerBoundCertServiceRequest::Post will do the histograms and stuff. - HandleResult(OK, server_identifier, type, key, cert); - return; - } + if (IsSupportedCertType(type)) { + // Async DB lookup found a valid cert. + DVLOG(1) << "Cert store had valid cert for " << server_identifier + << " of type " << type; + cert_store_hits_++; + // ServerBoundCertServiceRequest::Post will do the histograms and stuff. + HandleResult(OK, server_identifier, type, key, cert); + return; } - // Async lookup did not find a cert, or it found an expired one. Start - // generating a new one. + // Async lookup did not find a valid cert. Start generating a new one. ServerBoundCertServiceWorker* worker = new ServerBoundCertServiceWorker( server_identifier, job->type(), |