Bug 1128763 - Do insecure fallback after PR_CONNECT_RESET_ERROR for whitelisted sites only. r=keeler

This commit is contained in:
Masatoshi Kimura 2015-02-05 22:02:32 +09:00
Родитель 6fbc2ae89f
Коммит 21dab1da42
2 изменённых файлов: 16 добавлений и 0 удалений

Просмотреть файл

@ -1224,6 +1224,14 @@ retryDueToTLSIntolerance(PRErrorCode err, nsNSSSocketInfo* socketInfo)
return false; return false;
} }
// Allow PR_CONNECT_RESET_ERROR only for whitelisted sites.
if (err == PR_CONNECT_RESET_ERROR &&
!socketInfo->SharedState().IOLayerHelpers()
.isInsecureFallbackSite(socketInfo->GetHostName())) {
return false;
}
if ((err == SSL_ERROR_NO_CYPHER_OVERLAP || err == PR_END_OF_FILE_ERROR || if ((err == SSL_ERROR_NO_CYPHER_OVERLAP || err == PR_END_OF_FILE_ERROR ||
err == PR_CONNECT_RESET_ERROR) && err == PR_CONNECT_RESET_ERROR) &&
nsNSSComponent::AreAnyWeakCiphersEnabled()) { nsNSSComponent::AreAnyWeakCiphersEnabled()) {
@ -1835,6 +1843,13 @@ nsSSLIOLayerHelpers::setInsecureFallbackSites(const nsCString& str)
} }
} }
bool
nsSSLIOLayerHelpers::isInsecureFallbackSite(const nsACString& hostname)
{
MutexAutoLock lock(mutex);
return mInsecureFallbackSites.Contains(hostname);
}
void void
nsSSLIOLayerHelpers::setTreatUnsafeNegotiationAsBroken(bool broken) nsSSLIOLayerHelpers::setTreatUnsafeNegotiationAsBroken(bool broken)
{ {

Просмотреть файл

@ -232,6 +232,7 @@ public:
void clearStoredData(); void clearStoredData();
void loadVersionFallbackLimit(); void loadVersionFallbackLimit();
void setInsecureFallbackSites(const nsCString& str); void setInsecureFallbackSites(const nsCString& str);
bool isInsecureFallbackSite(const nsACString& hostname);
bool mFalseStartRequireNPN; bool mFalseStartRequireNPN;
bool mFalseStartRequireForwardSecrecy; bool mFalseStartRequireForwardSecrecy;