| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // This protobuffer is intended to store reports from Chrome users of |
| // certificate errors. A report will be sent from Chrome when it gets |
| // e.g. a certificate for google.com that chains up to a root CA not expected by |
| // Chrome for that origin, such as DigiNotar (compromised in July 2011), or |
| // other pinning errors such as a blacklisted cert in the chain, or |
| // (when opted in) other certificate validation errors like an expired |
| // cert. The report from the user will include the hostname being accessed, |
| // the full certificate chain (in PEM format), and the |
| // timestamp of when the client tried to access the site. A response is |
| // generated by the frontend and logged, including validation and error checking |
| // done on the client's input data. |
| // |
| // This should be kept in sync with the internal Google copy when updated. |
| // Contact [email protected] if you have questions. |
| |
| syntax = "proto2"; |
| |
| // Chrome requires this. |
| option optimize_for = LITE_RUNTIME; |
| |
| package chrome_browser_ssl; |
| |
| // Protocol types |
| |
| message CertLoggerInterstitialInfo { |
| // The different reasons that an SSL warning interstitial could be shown to |
| // a user. |
| enum InterstitialReason { |
| UNKNOWN_INTERSTITIAL_REASON = 0; |
| // A standard SSL interstitial. |
| INTERSTITIAL_SSL = 1; |
| // An interstitial alerting the user that they are in a captive portal. |
| INTERSTITIAL_CAPTIVE_PORTAL = 2; |
| // An interstitial telling the user to update their system clock. |
| INTERSTITIAL_CLOCK = 3; |
| // An interstitial telling the user to remove the Superfish software from |
| // their system. |
| INTERSTITIAL_SUPERFISH = 4 [deprecated = true]; |
| // An interstitial telling the user to fix misconfigured MITM software. |
| INTERSTITIAL_MITM_SOFTWARE = 5; |
| // An interstitial telling the user that their connection is being |
| // intercepted by a known certificate. |
| INTERSTITIAL_BLOCKED_INTERCEPTION = 6; |
| // An interstitial telling the user that the site they are visiting use an |
| // outdated version of TLS. |
| INTERSTITIAL_LEGACY_TLS = 7; |
| } |
| |
| // The type of interstitial that was shown |
| optional InterstitialReason interstitial_reason = 1; |
| // True if the user clicked through to the offending website |
| optional bool user_proceeded = 2; |
| // True if the user was shown an option to click through |
| optional bool overridable = 3; |
| // The time (in usec since the Windows epoch) when the client created the |
| // interstitial. |
| optional int64 interstitial_created_time_usec = 4; |
| } |
| |
| // Contains information about features that are enabled/disabled that |
| // might affect certificate validation. |
| message CertLoggerFeaturesInfo { |
| message NetworkTimeQueryingInfo { |
| // True if the network time querying feature is enabled. |
| optional bool network_time_queries_enabled = 1; |
| |
| // The experimental parameter controlling the behavior of network time |
| // queries (whether they happen on-demand when a certificate date error is |
| // encountered, in the background, or both). |
| enum NetworkTimeFetchBehavior { |
| NETWORK_TIME_FETCHES_UNKNOWN = 0; |
| NETWORK_TIME_FETCHES_BACKGROUND_ONLY = 1; |
| NETWORK_TIME_FETCHES_ON_DEMAND_ONLY = 2; |
| NETWORK_TIME_FETCHES_IN_BACKGROUND_AND_ON_DEMAND = 3; |
| } |
| optional NetworkTimeFetchBehavior network_time_query_behavior = 2; |
| } |
| |
| optional NetworkTimeQueryingInfo network_time_querying_info = 1; |
| |
| // Records whether the Android AIA fetching feature is enabled. |
| // |
| // This is an enum rather than a boolean as a convenience to |
| // distinguish reports where fetching is disabled from reports that |
| // were sent before this field was present. (In other words, if it |
| // were a boolean, a value of false might mean that fetching was |
| // disabled, or it might mean that the browser version was older than |
| // when this field was added.) |
| enum AndroidAIAFetchingStatus { |
| ANDROID_AIA_FETCHING_UNKNOWN = 0; |
| ANDROID_AIA_FETCHING_ENABLED = 1; |
| ANDROID_AIA_FETCHING_DISABLED = 2; |
| } |
| optional AndroidAIAFetchingStatus android_aia_fetching_status = 2; |
| |
| // Records the results of the dual certificate verification trial, if |
| // enabled. (See https://crbug.com/649026.) |
| optional TrialVerificationInfo trial_verification_info = 3; |
| } |
| |
| message CertLoggerRequest { |
| // The hostname being accessed (required as the cert could be valid for |
| // multiple hosts, e.g. a wildcard or a SubjectAltName. |
| required string hostname = 1; |
| // The certificate chain as a series of PEM-encoded certificates, including |
| // intermediates but not necessarily the root. |
| required string cert_chain = 2; |
| // The time (in usec since the Windows epoch) when the client generated the |
| // report. |
| required int64 time_usec = 3; |
| // public_key_hash contains the string forms of the hashes calculated for |
| // the chain. (I.e. "sha1/<base64 data>".) |
| repeated string public_key_hash = 4; |
| // pin contains the string forms of the pins that were matched against for |
| // this host. |
| repeated string pin = 5; |
| |
| enum CertError { |
| UNKNOWN_CERT_ERROR = 0; |
| ERR_CERT_REVOKED = 1; |
| ERR_CERT_INVALID = 2; |
| ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN = 3; |
| ERR_CERT_AUTHORITY_INVALID = 4; |
| ERR_CERT_COMMON_NAME_INVALID = 5; |
| ERR_CERT_NAME_CONSTRAINT_VIOLATION = 6; |
| ERR_CERT_WEAK_SIGNATURE_ALGORITHM = 7; |
| ERR_CERT_WEAK_KEY = 8; |
| ERR_CERT_DATE_INVALID = 9; |
| ERR_CERT_VALIDITY_TOO_LONG = 10; |
| ERR_CERT_UNABLE_TO_CHECK_REVOCATION = 11; |
| ERR_CERT_NO_REVOCATION_MECHANISM = 12; |
| ERR_CERT_NON_UNIQUE_NAME = 13; |
| ERR_CERTIFICATE_TRANSPARENCY_REQUIRED = 14; |
| ERR_CERT_SYMANTEC_LEGACY = 15; |
| ERR_CERT_KNOWN_INTERCEPTION_BLOCKED = 16; |
| }; |
| |
| // Certificate errors encountered (if any) when validating this |
| // certificate chain. |
| repeated CertError cert_error = 6; |
| |
| // Information about the interstitial that was shown to the user for |
| // this certificate error. |
| optional CertLoggerInterstitialInfo interstitial_info = 7; |
| |
| // The unverified certificate chain as received by the client, as a |
| // series of PEM-encoded certificates. Can be different than |
| // |cert_chain|, which is the chain the client built during |
| // verification. |
| optional string unverified_cert_chain = 8; |
| |
| // True if the certificate was rooted at a standard CA root ,as opposed to a |
| // user-installed root, but is only meaningful if the underlying certificate |
| // validation library built a trusted chain (i.e. the Chrome net stack set the |
| // error, not the library). |
| optional bool is_issued_by_known_root = 9; |
| |
| // Information about features that were enabled or disabled for the |
| // user that might affect certificate validation. |
| optional CertLoggerFeaturesInfo features_info = 10; |
| |
| // False when the report is attempted to be uploaded for the first time. True |
| // in all other uploads. |
| optional bool is_retry_upload = 11; |
| |
| enum ChromeChannel { |
| CHROME_CHANNEL_NONE = 0; |
| CHROME_CHANNEL_UNKNOWN = 1; |
| CHROME_CHANNEL_DEV = 2; |
| CHROME_CHANNEL_CANARY = 3; |
| CHROME_CHANNEL_BETA = 4; |
| CHROME_CHANNEL_STABLE = 5; |
| }; |
| |
| // The Chrome channel that this error occurred on. |
| optional ChromeChannel chrome_channel = 12; |
| |
| // True if the machine is enterprise managed. Currently only available for |
| // Windows and ChromeOS clients. |
| optional bool is_enterprise_managed = 13; |
| |
| enum CertStatus { |
| UNKNOWN_CERT_STATUS = 0; |
| STATUS_IS_EV = 1; |
| STATUS_REV_CHECKING_ENABLED = 2; |
| STATUS_SHA1_SIGNATURE_PRESENT = 3; |
| STATUS_CT_COMPLIANCE_FAILED = 4; |
| STATUS_KNOWN_INTERCEPTION_DETECTED = 5; |
| } |
| // The non-error status results of validating the chain. |
| repeated CertStatus cert_status = 14; |
| |
| // Chrome version string, e.g. "95.0.4629.0". |
| optional string chrome_version = 15; |
| |
| // The OS type that Chrome was compiled for, e.g. "Mac OS X", "Windows", etc. |
| optional string os_type = 16; |
| |
| // The OS version Chrome is running on, e.g. "11.5.1". |
| optional string os_version = 17; |
| |
| // The hardware name of the system Chrome is running on, e.g. "MacPro6,1". |
| optional string hardware_model_name = 18; |
| |
| // The architecture of the OS Chrome is running on, e.g. "x86", "x86_64", etc. |
| optional string os_architecture = 19; |
| |
| // The architecture that Chrome was compiled for. May be different than |
| // |os_architecture|. |
| optional string process_architecture = 20; |
| }; |
| |
| message MacCertEvidenceInfo { |
| // A bitfield indicating various status of the cert, defined in |
| // cssmapple.h |
| optional uint32 status_bits = 1; |
| |
| // CSSM_RETURN status codes for the cert, defined in cssmtype.h, values in |
| // cssmerr.h and cssmErrorStrings.h. |
| repeated int32 status_codes = 2; |
| } |
| |
| message MacPlatformDebugInfo { |
| // The SecTrustResultType result from SecTrustEvaluate. |
| optional uint32 trust_result = 1; |
| |
| // The OSStatus resultCode from SecTrustGetCssmResultCode. |
| optional int32 result_code = 2; |
| |
| // The CSSM_TP_APPLE_EVIDENCE_INFO statusChain from SecTrustGetResult. Each |
| // entry corresponds to one of the certs in the verified chain (leaf first). |
| repeated MacCertEvidenceInfo status_chain = 3; |
| } |
| |
| message WinPlatformDebugInfo { |
| // The ThisUpdate of AuthRoot, as reflected in the registry, in usec since |
| // the Windows epoch. |
| optional int64 authroot_this_update_time_usec = 1; |
| |
| // The Sequence Number of AuthRoot, as reflected in the registry. |
| optional bytes authroot_sequence_number = 2; |
| } |
| |
| // Contains the results of verification by the trial verifier. All fields |
| // have the same meaning as those of the same name in CertLoggerRequest. |
| message TrialVerificationInfo { |
| optional string cert_chain = 1; |
| |
| repeated string public_key_hash = 2; |
| |
| repeated CertLoggerRequest.CertError cert_error = 3; |
| |
| optional bool is_issued_by_known_root = 4; |
| |
| repeated CertLoggerRequest.CertStatus cert_status = 5; |
| |
| // Configuration flags used when validating a chain, corresponding to |
| // CertVerifier::VerifyFlags, however the numeric values are NOT equivalent. |
| enum VerifyFlags { |
| UNKNOWN_VERIFY_FLAG = 0; |
| VERIFY_REV_CHECKING_ENABLED = 1; |
| VERIFY_EV_CERT = 2 [deprecated = true]; |
| VERIFY_CERT_IO_ENABLED = 3 [deprecated = true]; |
| VERIFY_REV_CHECKING_ENABLED_EV_ONLY = 4 [deprecated = true]; |
| VERIFY_REV_CHECKING_REQUIRED_LOCAL_ANCHORS = 5; |
| VERIFY_ENABLE_SHA1_LOCAL_ANCHORS = 6; |
| VERIFY_DISABLE_SYMANTEC_ENFORCEMENT = 7; |
| } |
| // The VerifyFlags that were used when validating this chain. (Note this |
| // applies to both the primary and trial verifiers.) |
| repeated VerifyFlags verify_flags = 6; |
| |
| enum MacTrustFlags { |
| UNKNOWN_MAC_TRUST_FLAG = 0; |
| MAC_TRUST_SETTINGS_ARRAY_EMPTY = 1; |
| MAC_TRUST_SETTINGS_DICT_EMPTY = 2; |
| MAC_TRUST_SETTINGS_DICT_UNKNOWN_KEY = 3; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_POLICY = 4; |
| MAC_TRUST_SETTINGS_DICT_INVALID_POLICY_TYPE = 5; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_APPLICATION = 6; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_POLICY_STRING = 7; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_KEY_USAGE = 8; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_RESULT = 9; |
| MAC_TRUST_SETTINGS_DICT_INVALID_RESULT_TYPE = 10; |
| MAC_TRUST_SETTINGS_DICT_CONTAINS_ALLOWED_ERROR = 11; |
| MAC_COPY_TRUST_SETTINGS_ERROR = 12; |
| } |
| // Debug flags from the trial verifier path building attempt, only populated |
| // on reports from macOS. Contains the union of flags from all the GetTrust |
| // calls done during verification. |
| repeated MacTrustFlags mac_combined_trust_debug_info = 7; |
| |
| enum MacTrustImplType { |
| MAC_TRUST_IMPL_UNKNOWN = 0; |
| MAC_TRUST_IMPL_DOMAIN_CACHE = 1; |
| MAC_TRUST_IMPL_SIMPLE = 2; |
| MAC_TRUST_IMPL_MRU_CACHE = 3; |
| }; |
| optional MacTrustImplType mac_trust_impl = 13; |
| |
| // The time (in usec since the Windows epoch) when the trial verifier |
| // attempted to verify the chain. |
| optional int64 trial_verification_time_usec = 8; |
| |
| // The GeneralizedTime encoded time when the trial verifier attempted to |
| // verify the chain. |
| optional string trial_der_verification_time = 9; |
| |
| // Debug information from CertVerifyProcMac (if it was the primary verifier). |
| optional MacPlatformDebugInfo mac_platform_debug_info = 10; |
| |
| // DER encoded stapled OCSP response, if present. |
| optional bytes stapled_ocsp = 11; |
| |
| // DER encoded SignedCertificateTimestampList from the TLS extension, if |
| // present. |
| optional bytes sct_list = 12; |
| |
| // Debug information from CertVerifyProcWin (if it was the primary verifier). |
| optional WinPlatformDebugInfo win_platform_debug_info = 14; |
| } |