| Index: chrome/browser/ui/website_settings/website_settings.cc
|
| diff --git a/chrome/browser/ui/website_settings/website_settings.cc b/chrome/browser/ui/website_settings/website_settings.cc
|
| index df26aea09484c37e76fea5372240fc6e2624ec18..2481d371381a6210a5cff8d56a62b013f6153cc4 100644
|
| --- a/chrome/browser/ui/website_settings/website_settings.cc
|
| +++ b/chrome/browser/ui/website_settings/website_settings.cc
|
| @@ -362,10 +362,16 @@ void WebsiteSettings::Init(Profile* profile,
|
| ssl.signed_certificate_timestamp_ids.end());
|
| }
|
|
|
| - if (ssl.cert_id &&
|
| - cert_store_->RetrieveCert(ssl.cert_id, &cert) &&
|
| + bool was_ssl = ssl.cert_id && cert_store_->RetrieveCert(ssl.cert_id, &cert);
|
| + bool was_ssl_clean_or_minor_errors =
|
| + was_ssl &&
|
| (!net::IsCertStatusError(ssl.cert_status) ||
|
| - net::IsCertStatusMinorError(ssl.cert_status))) {
|
| + net::IsCertStatusMinorError(ssl.cert_status));
|
| + bool was_ssl_using_deprecated_algorithm =
|
| + was_ssl_clean_or_minor_errors &&
|
| + (ssl.cert_status & net::CERT_STATUS_DEPRECATED_SIGNATURE_ALGORITHM);
|
| +
|
| + if (was_ssl_clean_or_minor_errors) {
|
| // There are no major errors. Check for minor errors.
|
| #if defined(OS_CHROMEOS)
|
| policy::PolicyCertService* service =
|
| @@ -378,7 +384,9 @@ void WebsiteSettings::Init(Profile* profile,
|
| site_identity_status_ = SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT;
|
| site_identity_details_ = l10n_util::GetStringFUTF16(
|
| IDS_CERT_POLICY_PROVIDED_CERT_MESSAGE, UTF8ToUTF16(url.host()));
|
| - } else if (net::IsCertStatusMinorError(ssl.cert_status)) {
|
| + } else if (net::IsCertStatusMinorError(ssl.cert_status) &&
|
| + (ssl.cert_status & net::CERT_STATUS_ALL_ERRORS) !=
|
| + net::CERT_STATUS_DEPRECATED_SIGNATURE_ALGORITHM) {
|
| site_identity_status_ = SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN;
|
| base::string16 issuer_name(UTF8ToUTF16(cert->issuer().GetDisplayName()));
|
| if (issuer_name.empty()) {
|
| @@ -401,50 +409,62 @@ void WebsiteSettings::Init(Profile* profile,
|
| } else {
|
| NOTREACHED() << "Need to specify string for this warning";
|
| }
|
| - } else if (ssl.cert_status & net::CERT_STATUS_IS_EV) {
|
| - // EV HTTPS page.
|
| - site_identity_status_ = GetSiteIdentityStatusByCTInfo(
|
| - ssl.signed_certificate_timestamp_ids, true);
|
| - DCHECK(!cert->subject().organization_names.empty());
|
| - organization_name_ = UTF8ToUTF16(cert->subject().organization_names[0]);
|
| - // An EV Cert is required to have a city (localityName) and country but
|
| - // state is "if any".
|
| - DCHECK(!cert->subject().locality_name.empty());
|
| - DCHECK(!cert->subject().country_name.empty());
|
| - base::string16 locality;
|
| - if (!cert->subject().state_or_province_name.empty()) {
|
| - locality = l10n_util::GetStringFUTF16(
|
| - IDS_PAGEINFO_ADDRESS,
|
| - UTF8ToUTF16(cert->subject().locality_name),
|
| - UTF8ToUTF16(cert->subject().state_or_province_name),
|
| - UTF8ToUTF16(cert->subject().country_name));
|
| + } else {
|
| + DCHECK(!net::IsCertStatusError(ssl.cert_status) ||
|
| + (ssl.cert_status & net::CERT_STATUS_ALL_ERRORS) ==
|
| + net::CERT_STATUS_DEPRECATED_SIGNATURE_ALGORITHM);
|
| + if (ssl.cert_status & net::CERT_STATUS_IS_EV) {
|
| + // EV HTTPS page.
|
| + site_identity_status_ = GetSiteIdentityStatusByCTInfo(
|
| + ssl.signed_certificate_timestamp_ids, true);
|
| + DCHECK(!cert->subject().organization_names.empty());
|
| + organization_name_ = UTF8ToUTF16(cert->subject().organization_names[0]);
|
| + // An EV Cert is required to have a city (localityName) and country but
|
| + // state is "if any".
|
| + DCHECK(!cert->subject().locality_name.empty());
|
| + DCHECK(!cert->subject().country_name.empty());
|
| + base::string16 locality;
|
| + if (!cert->subject().state_or_province_name.empty()) {
|
| + locality = l10n_util::GetStringFUTF16(
|
| + IDS_PAGEINFO_ADDRESS,
|
| + UTF8ToUTF16(cert->subject().locality_name),
|
| + UTF8ToUTF16(cert->subject().state_or_province_name),
|
| + UTF8ToUTF16(cert->subject().country_name));
|
| + } else {
|
| + locality = l10n_util::GetStringFUTF16(
|
| + IDS_PAGEINFO_PARTIAL_ADDRESS,
|
| + UTF8ToUTF16(cert->subject().locality_name),
|
| + UTF8ToUTF16(cert->subject().country_name));
|
| + }
|
| + DCHECK(!cert->subject().organization_names.empty());
|
| + site_identity_details_.assign(l10n_util::GetStringFUTF16(
|
| + GetSiteIdentityDetailsMessageByCTInfo(
|
| + ssl.signed_certificate_timestamp_ids, true /* is EV */),
|
| + UTF8ToUTF16(cert->subject().organization_names[0]),
|
| + locality,
|
| + UTF8ToUTF16(cert->issuer().GetDisplayName())));
|
| } else {
|
| - locality = l10n_util::GetStringFUTF16(
|
| - IDS_PAGEINFO_PARTIAL_ADDRESS,
|
| - UTF8ToUTF16(cert->subject().locality_name),
|
| - UTF8ToUTF16(cert->subject().country_name));
|
| + // Non-EV OK HTTPS page.
|
| + site_identity_status_ = GetSiteIdentityStatusByCTInfo(
|
| + ssl.signed_certificate_timestamp_ids, false);
|
| + base::string16 issuer_name(UTF8ToUTF16(cert->issuer().GetDisplayName()));
|
| + if (issuer_name.empty()) {
|
| + issuer_name.assign(l10n_util::GetStringUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_UNKNOWN_PARTY));
|
| + }
|
| +
|
| + site_identity_details_.assign(l10n_util::GetStringFUTF16(
|
| + GetSiteIdentityDetailsMessageByCTInfo(
|
| + ssl.signed_certificate_timestamp_ids, false /* not EV */),
|
| + issuer_name));
|
| }
|
| - DCHECK(!cert->subject().organization_names.empty());
|
| - site_identity_details_.assign(l10n_util::GetStringFUTF16(
|
| - GetSiteIdentityDetailsMessageByCTInfo(
|
| - ssl.signed_certificate_timestamp_ids, true /* is EV */),
|
| - UTF8ToUTF16(cert->subject().organization_names[0]),
|
| - locality,
|
| - UTF8ToUTF16(cert->issuer().GetDisplayName())));
|
| - } else {
|
| - // Non-EV OK HTTPS page.
|
| - site_identity_status_ = GetSiteIdentityStatusByCTInfo(
|
| - ssl.signed_certificate_timestamp_ids, false);
|
| - base::string16 issuer_name(UTF8ToUTF16(cert->issuer().GetDisplayName()));
|
| - if (issuer_name.empty()) {
|
| - issuer_name.assign(l10n_util::GetStringUTF16(
|
| - IDS_PAGE_INFO_SECURITY_TAB_UNKNOWN_PARTY));
|
| + if (was_ssl_using_deprecated_algorithm) {
|
| + site_identity_status_ =
|
| + SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM;
|
| + site_identity_details_ += UTF8ToUTF16("\n\n");
|
| + site_identity_details_ += l10n_util::GetStringUTF16(
|
| + IDS_PAGE_INFO_SECURITY_TAB_DEPRECATED_SIGNATURE_ALGORITHM);
|
| }
|
| -
|
| - site_identity_details_.assign(l10n_util::GetStringFUTF16(
|
| - GetSiteIdentityDetailsMessageByCTInfo(
|
| - ssl.signed_certificate_timestamp_ids, false /* not EV */),
|
| - issuer_name));
|
| }
|
| } else {
|
| // HTTP or HTTPS with errors (not warnings).
|
|
|