mirror of
				https://github.com/SSLMate/certspotter.git
				synced 2025-07-03 10:47:17 +02:00 
			
		
		
		
	Update man pages
This commit is contained in:
		
							parent
							
								
									3c23ab4e34
								
							
						
					
					
						commit
						04ea5c949f
					
				@ -2,104 +2,254 @@
 | 
			
		||||
 | 
			
		||||
**certspotter-script** - Certificate Transparency Log Monitor (hook script)
 | 
			
		||||
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
 | 
			
		||||
**certspotter-script**
 | 
			
		||||
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
 | 
			
		||||
**certspotter-script** is *any* program that is called from **certspotter**'s
 | 
			
		||||
*-script* argument. **certspotter** executes this script when a file from the
 | 
			
		||||
CT log matches against the watchlist.
 | 
			
		||||
**certspotter-script** is *any* program that is called using **certspotter(8)**'s
 | 
			
		||||
*-script* argument. **certspotter** executes this program when it needs to notify
 | 
			
		||||
you about an event, such as detecting a certificate for a domain on your watch list.
 | 
			
		||||
 | 
			
		||||
# ENVIRONMENT
 | 
			
		||||
 | 
			
		||||
The script will have the following variables defined in its environment:
 | 
			
		||||
## Event information
 | 
			
		||||
 | 
			
		||||
## Log entry information
 | 
			
		||||
The following environment variables are set for all types of events:
 | 
			
		||||
 | 
			
		||||
**CERT\_FILENAME**
 | 
			
		||||
:    The path of the saved certificate on the local filesystem, if one exists.
 | 
			
		||||
`EVENT`
 | 
			
		||||
 | 
			
		||||
**CERT\_TYPE**
 | 
			
		||||
:    The certificate's type (*cert* or *precert*).
 | 
			
		||||
:   One of the following values, indicating the type of event:
 | 
			
		||||
 | 
			
		||||
**FINGERPRINT**
 | 
			
		||||
:    The certificate's fingerprint.
 | 
			
		||||
      * `discovered_cert` - certspotter has discovered a certificate for a
 | 
			
		||||
      domain on your watch list.
 | 
			
		||||
 | 
			
		||||
**LOG\_URI**
 | 
			
		||||
:    The URI of the log the certificate was found on.
 | 
			
		||||
      * `malformed_cert` - certspotter can't determine if a certificate
 | 
			
		||||
      matches your watch list because the certificate or the log entry
 | 
			
		||||
      is malformed.
 | 
			
		||||
 | 
			
		||||
**ENTRY\_INDEX**
 | 
			
		||||
:    The entry's index in the log.
 | 
			
		||||
      * `error` - a problem is preventing certspotter from monitoring all
 | 
			
		||||
      logs.
 | 
			
		||||
 | 
			
		||||
**CERT\_PARSEABLE**
 | 
			
		||||
:    Whether the certificate could be parsed.
 | 
			
		||||
    Additional event types may be defined in the future, so your script should
 | 
			
		||||
    be able to handle unknown values.
 | 
			
		||||
 | 
			
		||||
## Identifiers
 | 
			
		||||
`SUMMARY`
 | 
			
		||||
 | 
			
		||||
**DNS\_NAMES**
 | 
			
		||||
:    A comma-separated list of the certificate's dnsNames.
 | 
			
		||||
:   A short human-readable string describing the event.
 | 
			
		||||
 | 
			
		||||
**IP\_ADDRESSES**
 | 
			
		||||
:    A comma-separated list of the certificate's IP addresses.
 | 
			
		||||
 | 
			
		||||
## Certificate information
 | 
			
		||||
## Discovered certificate information
 | 
			
		||||
 | 
			
		||||
**PUBKEY\_HASH**
 | 
			
		||||
:    The certificate public key's hash.
 | 
			
		||||
The following environment variables are set for `discovered_cert` events:
 | 
			
		||||
 | 
			
		||||
**SERIAL**
 | 
			
		||||
:    The certificate's serial.
 | 
			
		||||
`WATCH_ITEM`
 | 
			
		||||
 | 
			
		||||
**NOT\_BEFORE**, **NOT\_AFTER**
 | 
			
		||||
:    The certificate's validity information, as a string.
 | 
			
		||||
:    The item from your watch list which matches this certificate.
 | 
			
		||||
     (If more than one item matches, the first one is used.)
 | 
			
		||||
 | 
			
		||||
**NOT\_BEFORE\_UNIXTIME**, **NOT\_AFTER\_UNIXTIME**
 | 
			
		||||
:    The certificate's validity information, as UNIX time.
 | 
			
		||||
`LOG_URI`
 | 
			
		||||
 | 
			
		||||
**SUBJECT\_DN**
 | 
			
		||||
:    The certificate's subject distinguished name (DN).
 | 
			
		||||
:    The URI of the log containing the certificate.
 | 
			
		||||
 | 
			
		||||
**ISSUER\_DN**
 | 
			
		||||
:    the certificate issuer distinguished name (DN).
 | 
			
		||||
`ENTRY_INDEX`
 | 
			
		||||
 | 
			
		||||
## Errors
 | 
			
		||||
:    The index of the log entry containing the certificate.
 | 
			
		||||
 | 
			
		||||
**PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract information about
 | 
			
		||||
    the certificate. In this case, **CERT\_PARSEABLE** will also be set to "no"
 | 
			
		||||
    and information such as **PUBKEY\_HASH**, **SERIAL**, as well as validity
 | 
			
		||||
    and subject, will not be present.
 | 
			
		||||
`TBS_SHA256`
 | 
			
		||||
 | 
			
		||||
**SERIAL\_PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract the certificate's
 | 
			
		||||
    serial. Emitted instead of **SERIAL**.
 | 
			
		||||
:    The hex-encoded SHA-256 digest of the TBSCertificate, as defined in RFC 6962 Section 3.2.
 | 
			
		||||
     Certificates and their corresponding precertificates have the same `TBS_SHA256` value.
 | 
			
		||||
 | 
			
		||||
**IDENTIFIERS\_PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract the certificate's
 | 
			
		||||
    identifiers. Emitted instead of **DNS\_NAMES**, **IP\_ADDRESSES**.
 | 
			
		||||
`CERT_SHA256`
 | 
			
		||||
 | 
			
		||||
**VALIDITY\_PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract the certificate's
 | 
			
		||||
    validity information. Emitted instead of **NOT\_BEFORE**, **NOT\_AFTER**.
 | 
			
		||||
:    The hex-encoded SHA-256 digest (sometimes called fingerprint) of the certificate.
 | 
			
		||||
     The digest is computed over the ASN.1 DER encoding. 
 | 
			
		||||
 | 
			
		||||
**SUBJECT\_PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract the certificate's
 | 
			
		||||
    subject information. Emitted instead of **SUBJECT\_DN**.
 | 
			
		||||
`PUBKEY_SHA256`
 | 
			
		||||
 | 
			
		||||
**ISSUER\_PARSE\_ERROR**
 | 
			
		||||
:   Set to the error that occurred when attempting to extract the certificate's
 | 
			
		||||
    issuer information. Emitted instead of **ISSUER\_DN**.
 | 
			
		||||
:    The hex-encoded SHA-256 digest of the certificate's Subject Public Key Info.
 | 
			
		||||
 | 
			
		||||
`CERT_FILENAME`
 | 
			
		||||
 | 
			
		||||
:    Path to a file containing the PEM-encoded certificate chain.  Not set if `-no_save` was used.
 | 
			
		||||
 | 
			
		||||
`JSON_FILENAME`
 | 
			
		||||
 | 
			
		||||
:    Path to a JSON containing additional information about the certificate.  See below for the format of the JSON file.
 | 
			
		||||
     Not set if `-no_save` was used.
 | 
			
		||||
 | 
			
		||||
`TEXT_FILENAME`
 | 
			
		||||
 | 
			
		||||
:    Path to a file containing a text representation of the certificate.
 | 
			
		||||
     Not set if `-no_save` was used.
 | 
			
		||||
 | 
			
		||||
`NOT_BEFORE`, `NOT_BEFORE_UNIXTIME`, `NOT_BEFORE_RFC3339`
 | 
			
		||||
 | 
			
		||||
:    The not before time of the certificate, in a human-readable format, seconds since the UNIX epoch, and RFC3339, respectively.  These variables may be unset if there was a parse error, in which case `VALIDITY_PARSE_ERROR` is set.
 | 
			
		||||
 | 
			
		||||
`NOT_AFTER`, `NOT_AFTER_UNIXTIME`, `NOT_AFTER_RFC3339`
 | 
			
		||||
 | 
			
		||||
:    The not after (expiration) time of the certificate, in a human-readable format, seconds since the UNIX epoch, and RFC3339, respectively.  These variables may be unset if there was a parse error, in which case `VALIDITY_PARSE_ERROR` is set.
 | 
			
		||||
 | 
			
		||||
`VALIDITY_PARSE_ERROR`
 | 
			
		||||
 | 
			
		||||
:    Error parsing not before and not after, if any.  If this variable is set, then the `NOT_BEFORE` and `NOT_AFTER` family of variables are unset.
 | 
			
		||||
 | 
			
		||||
`SUBJECT_DN`
 | 
			
		||||
 | 
			
		||||
:    The distinguished name of the certificate's subject.  This variable may be unset if there was a parse error, in which case `SUBJECT_PARSE_ERROR` is set.
 | 
			
		||||
 | 
			
		||||
`SUBJECT_PARSE_ERROR`
 | 
			
		||||
 | 
			
		||||
:    Error parsing the subject, if any.  If this variable is set, then `SUBJECT_DN` is unset.
 | 
			
		||||
 | 
			
		||||
`ISSUER_DN`
 | 
			
		||||
 | 
			
		||||
:    The distinguished name of the certificate's issuer.  This variable may be unset if there was a parse error, in which case `ISSUER_PARSE_ERROR` is set.
 | 
			
		||||
 | 
			
		||||
`ISSUER_PARSE_ERROR`
 | 
			
		||||
 | 
			
		||||
:    Error parsing the issuer, if any.  If this variable is set, then `ISSUER_DN` is unset.
 | 
			
		||||
 | 
			
		||||
`SERIAL`
 | 
			
		||||
 | 
			
		||||
:    The hex-encoded serial number of the certificate.  Prefixed with a minus (-) sign if negative.  This variable may be unset if there was a parse error, in which case `SERIAL_PARSE_ERROR` is set.
 | 
			
		||||
 | 
			
		||||
`SERIAL_PARSE_ERROR`
 | 
			
		||||
 | 
			
		||||
:    Error parsing the serial number, if any.  If this variable is set, then `SERIAL` is unset.
 | 
			
		||||
 | 
			
		||||
## Malformed certificate information
 | 
			
		||||
 | 
			
		||||
The following environment variables are set for `malformed_cert` events:
 | 
			
		||||
 | 
			
		||||
`LOG_URI`
 | 
			
		||||
 | 
			
		||||
:    The URI of the log containing the malformed certificate.
 | 
			
		||||
 | 
			
		||||
`ENTRY_INDEX`
 | 
			
		||||
 | 
			
		||||
:    The index of the log entry containing the malformed certificate.
 | 
			
		||||
 | 
			
		||||
`LEAF_HASH`
 | 
			
		||||
 | 
			
		||||
:    The base64-encoded Merkle hash of the leaf containing the malformed certificate.
 | 
			
		||||
 | 
			
		||||
`PARSE_ERROR`
 | 
			
		||||
 | 
			
		||||
:    A human-readable string describing why the certificate is malformed.
 | 
			
		||||
 | 
			
		||||
# JSON FILE FORMAT
 | 
			
		||||
 | 
			
		||||
Unless `-no_save` is used, certspotter saves a JSON file for every discovered certificate
 | 
			
		||||
under `$CERTSPOTTER_STATE_DIR`, and puts the path to the file in `$JSON_FILENAME`.  Your
 | 
			
		||||
script can read the JSON file, such as with the jq(1) command, to get additional information
 | 
			
		||||
about the certificate which isn't appropriate for environment variables.
 | 
			
		||||
 | 
			
		||||
The JSON file contains an object with the following fields:
 | 
			
		||||
 | 
			
		||||
`tbs_sha256`
 | 
			
		||||
 | 
			
		||||
:    A string containing the hex-encoded SHA-256 digest of the TBSCertificate, as defined in RFC 6962 Section 3.2.
 | 
			
		||||
     Certificates and their corresponding precertificates have the same `tbs_sha256` value.
 | 
			
		||||
 | 
			
		||||
`cert_sha256`
 | 
			
		||||
 | 
			
		||||
:    A string containing the hex-encoded SHA-256 digest (sometimes called fingerprint) of the certificate.
 | 
			
		||||
     The digest is computed over the ASN.1 DER encoding. 
 | 
			
		||||
 | 
			
		||||
`pubkey_sha256`
 | 
			
		||||
 | 
			
		||||
:    A string containing the hex-encoded SHA-256 digest of the certificate's Subject Public Key Info.
 | 
			
		||||
 | 
			
		||||
`issuer_der`
 | 
			
		||||
 | 
			
		||||
:    A base64 string containing the certificate's DER-encoded issuer distinguished name.
 | 
			
		||||
 | 
			
		||||
`subject_der`
 | 
			
		||||
 | 
			
		||||
:    A base64 string containing the certificate's DER-encoded subject distinguished name.
 | 
			
		||||
 | 
			
		||||
`dns_names`
 | 
			
		||||
 | 
			
		||||
:    An array of strings containing the DNS names for which the
 | 
			
		||||
     certificate is valid, taken from both the DNS subject alternative names
 | 
			
		||||
     (SANs) and the subject common name (CN). Internationalized domain names
 | 
			
		||||
     are encoded in Punycode.
 | 
			
		||||
 | 
			
		||||
`ip_addresses`
 | 
			
		||||
 | 
			
		||||
:    An array of strings containing the IP addresses for which the certificate is valid,
 | 
			
		||||
     taken from both the IP subject alternative names (SANs) and the subject common name (CN).
 | 
			
		||||
 | 
			
		||||
`not_before`
 | 
			
		||||
 | 
			
		||||
:    A string containing the not before time of the certificate in RFC3339 format.
 | 
			
		||||
     Null if there was an error parsing the certificate's validity.
 | 
			
		||||
 | 
			
		||||
`not_after`
 | 
			
		||||
 | 
			
		||||
:    A string containing the not after (expiration) time of the certificate in RFC3339 format.
 | 
			
		||||
     Null if there was an error parsing the certificate's validity.
 | 
			
		||||
 | 
			
		||||
`serial_number`
 | 
			
		||||
 | 
			
		||||
:    A string containing the hex-encoded serial number of the certificate.  Prefixed with a minus (-) sign if negative.
 | 
			
		||||
     Null if there was an error parsing the serial number.
 | 
			
		||||
 | 
			
		||||
# EXAMPLES
 | 
			
		||||
 | 
			
		||||
Example environment variables for a `discovered_cert` event:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
CERT_FILENAME=/home/andrew/.certspotter/certs/3c/3cdc83b3932c194fcdf17aa2bf1abc34e8438b293c3d5c70693e175b38ff128a.pem
 | 
			
		||||
CERT_SHA256=3cdc83b3932c194fcdf17aa2bf1abc34e8438b293c3d5c70693e175b38ff128a
 | 
			
		||||
ENTRY_INDEX=6464843
 | 
			
		||||
EVENT=discovered_cert
 | 
			
		||||
ISSUER_DN=C=GB, ST=Greater Manchester, L=Salford, O=Sectigo Limited, CN=Sectigo RSA Domain Validation Secure Server CA
 | 
			
		||||
JSON_FILENAME=/usr2/andrew/.certspotter/certs/3c/3cdc83b3932c194fcdf17aa2bf1abc34e8438b293c3d5c70693e175b38ff128a.v1.json
 | 
			
		||||
LOG_URI=https://ct.cloudflare.com/logs/nimbus2024/
 | 
			
		||||
NOT_AFTER='2024-01-26 03:47:26 +0000 UTC'
 | 
			
		||||
NOT_AFTER_RFC3339=2024-01-26T03:47:26Z
 | 
			
		||||
NOT_AFTER_UNIXTIME=1706240846
 | 
			
		||||
NOT_BEFORE='2023-01-31 03:47:26 +0000 UTC'
 | 
			
		||||
NOT_BEFORE_RFC3339=2023-01-31T03:47:26Z
 | 
			
		||||
NOT_BEFORE_UNIXTIME=1675136846
 | 
			
		||||
PUBKEY_SHA256=33ac1d9b9e56005ccac045eac2398b3e9dd6b3f5b66ae6260f2d478c7c0d82c8
 | 
			
		||||
SERIAL=c170fbf3bf27481e5c351a4db6f2dc5f
 | 
			
		||||
SUBJECT_DN=CN=sslmate.com
 | 
			
		||||
SUMMARY='certificate discovered for .sslmate.com'
 | 
			
		||||
TBS_SHA256=2388ee81c6f45cffc73e68a35fa8921e839e20acc9a98e8e6dcaea07cbfbdef8
 | 
			
		||||
TEXT_FILENAME=/usr2/andrew/.certspotter/certs/3c/3cdc83b3932c194fcdf17aa2bf1abc34e8438b293c3d5c70693e175b38ff128a.txt
 | 
			
		||||
WATCH_ITEM=.sslmate.com
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Example JSON file for a discovered certificate:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{
 | 
			
		||||
  "cert_sha256": "3cdc83b3932c194fcdf17aa2bf1abc34e8438b293c3d5c70693e175b38ff128a",
 | 
			
		||||
  "dns_names": [
 | 
			
		||||
    "sslmate.com",
 | 
			
		||||
    "www.sslmate.com"
 | 
			
		||||
  ],
 | 
			
		||||
  "ip_addresses": [],
 | 
			
		||||
  "issuer_der": "MIGPMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxNzA1BgNVBAMTLlNlY3RpZ28gUlNBIERvbWFpbiBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0E=",
 | 
			
		||||
  "not_after": "2024-01-26T03:47:26Z",
 | 
			
		||||
  "not_before": "2023-01-31T03:47:26Z",
 | 
			
		||||
  "pubkey_sha256": "33ac1d9b9e56005ccac045eac2398b3e9dd6b3f5b66ae6260f2d478c7c0d82c8",
 | 
			
		||||
  "serial_number": "c170fbf3bf27481e5c351a4db6f2dc5f",
 | 
			
		||||
  "subject_der": "MBYxFDASBgNVBAMTC3NzbG1hdGUuY29t",
 | 
			
		||||
  "tbs_sha256": "2388ee81c6f45cffc73e68a35fa8921e839e20acc9a98e8e6dcaea07cbfbdef8"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# SEE ALSO
 | 
			
		||||
 | 
			
		||||
**certspotter**(8), **x509**(1)
 | 
			
		||||
certspotter(8)
 | 
			
		||||
 | 
			
		||||
# COPYRIGHT
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2016-2022 Opsmate, Inc.
 | 
			
		||||
Copyright (c) 2016-2023 Opsmate, Inc.
 | 
			
		||||
 | 
			
		||||
# BUGS
 | 
			
		||||
 | 
			
		||||
Report bugs to <https://github.com/SSLmate/certspotter>.
 | 
			
		||||
Report bugs to <https://github.com/SSLMate/certspotter>.
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,13 @@
 | 
			
		||||
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
 | 
			
		||||
**certspotter** [**-verbose**] [**-start\_at\_end**] [**-watchlist** _file_] `...`
 | 
			
		||||
**certspotter** [`-start_at_end`] [`-watchlist` *FILENAME*] [`-email` *ADDRESS*] `...`
 | 
			
		||||
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
 | 
			
		||||
**Cert Spotter** is a Certificate Transparency log monitor from SSLMate that
 | 
			
		||||
alerts you when a SSL/TLS certificate is issued for one of your domains. Cert
 | 
			
		||||
Spotter is easier than other open source CT monitors, since it does not require
 | 
			
		||||
alerts you when a SSL/TLS certificate is issued for one of your domains.
 | 
			
		||||
Cert Spotter is easier to use than other open source CT monitors, since it does not require
 | 
			
		||||
a database. It's also more robust, since it uses a special certificate parser
 | 
			
		||||
that ensures it won't miss certificates.
 | 
			
		||||
 | 
			
		||||
@ -30,163 +30,137 @@ You can use Cert Spotter to detect:
 | 
			
		||||
 | 
			
		||||
# OPTIONS
 | 
			
		||||
 | 
			
		||||
**-all_time**
 | 
			
		||||
:   Scan certs from all time, not just those logged since the previous run of
 | 
			
		||||
    Cert Spotter.
 | 
			
		||||
-batch_size *NUMBER*
 | 
			
		||||
 | 
			
		||||
**-batch_size** _int_
 | 
			
		||||
:   Max number of entries to request at per call to get-entries. This is
 | 
			
		||||
    advanced option. Defaults to 1000.
 | 
			
		||||
:   Maximum number of entries to request per call to get-entries.
 | 
			
		||||
    You should not generally need to change this. Defaults to 1000.
 | 
			
		||||
 | 
			
		||||
**-logs** _string_
 | 
			
		||||
:   Filename or HTTPS URL of a JSON file containing logs to monitor, in the
 | 
			
		||||
    format documented at <https://www.certificate-transparency.org/known-logs>.
 | 
			
		||||
-email *ADDRESS*
 | 
			
		||||
 | 
			
		||||
:   Email address to contact when a matching certificate is discovered.
 | 
			
		||||
    You can specify this option more than once to email multiple addresses.
 | 
			
		||||
    Your system must have a working sendmail(1) command.
 | 
			
		||||
 | 
			
		||||
-logs *ADDRESS*
 | 
			
		||||
 | 
			
		||||
:   Filename or HTTPS URL of a v2 or v3 JSON log list containing logs to monitor.
 | 
			
		||||
    The schema for this file can be found at <https://www.gstatic.com/ct/log_list/v3/log_list_schema.json>.
 | 
			
		||||
    Defaults to <https://loglist.certspotter.org/monitor.json>, which includes
 | 
			
		||||
    the union of active logs recognized by Chrome and Apple.
 | 
			
		||||
    the union of active logs recognized by Chrome and Apple.  certspotter periodically
 | 
			
		||||
    reloads the log list in case it has changed.
 | 
			
		||||
 | 
			
		||||
-no_save
 | 
			
		||||
 | 
			
		||||
**-no\_save**
 | 
			
		||||
:   Do not save a copy of matching certificates.
 | 
			
		||||
 | 
			
		||||
**-num\_workers** _int_
 | 
			
		||||
:   Number of concurrent matchers. Default 2.
 | 
			
		||||
-script *COMMAND*
 | 
			
		||||
 | 
			
		||||
**-script** _string_
 | 
			
		||||
:   Script to execute when a matching certificate is found. See
 | 
			
		||||
    **certspotter-script**(8) for information about the interface to scripts.
 | 
			
		||||
:   Command to execute when a matching certificate is found. See
 | 
			
		||||
    certspotter-script(8) for information about the interface to scripts.
 | 
			
		||||
 | 
			
		||||
-start_at_end
 | 
			
		||||
 | 
			
		||||
**-start\_at\_end**
 | 
			
		||||
:   Start monitoring logs from the end rather than the beginning.
 | 
			
		||||
 | 
			
		||||
    **WARNING**: monitoring from the beginning guarantees detection of all
 | 
			
		||||
    certificates, but requires downloading hundreds of millions of
 | 
			
		||||
    certificates, which takes days.
 | 
			
		||||
 | 
			
		||||
**-state\_dir** _string_
 | 
			
		||||
:   Directory for storing state. Defaults to `~/.certspotter`.
 | 
			
		||||
-state_dir *PATH*
 | 
			
		||||
 | 
			
		||||
:   Directory for storing state. Defaults to `$CERTSPOTTER_STATE_DIR`, which is
 | 
			
		||||
    "~/.certspotter" by default.
 | 
			
		||||
 | 
			
		||||
-stdout
 | 
			
		||||
 | 
			
		||||
:   Write matching certificates to stdout.
 | 
			
		||||
 | 
			
		||||
-verbose
 | 
			
		||||
 | 
			
		||||
**-verbose**
 | 
			
		||||
:   Be verbose.
 | 
			
		||||
 | 
			
		||||
**-version**
 | 
			
		||||
-version
 | 
			
		||||
 | 
			
		||||
:   Print version and exit.
 | 
			
		||||
 | 
			
		||||
**-watchlist** _string_
 | 
			
		||||
:   File containing identifiers to watch. Use `-` for stdin.
 | 
			
		||||
    Defaults to `~/.certspotter/watchlist`.
 | 
			
		||||
-watchlist *PATH*
 | 
			
		||||
 | 
			
		||||
# NOTES
 | 
			
		||||
:   File containing DNS names to monitor, one per line.  To monitor an entire
 | 
			
		||||
    domain namespace (including the domain itself and all sub-domains) prefix
 | 
			
		||||
    the domain name with a dot (e.g. ".example.com").  To monitor a single DNS
 | 
			
		||||
    name only, do not prefix the name with a dot.
 | 
			
		||||
    
 | 
			
		||||
## Method of operation
 | 
			
		||||
    Defaults to `$CERTSPOTTER_CONFIG_DIR/watchlist`, which is
 | 
			
		||||
    "~/.certspotter/watchlist" by default.
 | 
			
		||||
    Specify `-` to read the watch list from stdin.
 | 
			
		||||
    
 | 
			
		||||
Every time you run Cert Spotter, it scans all browser-recognized
 | 
			
		||||
Certificate Transparency logs for certificates matching domains on
 | 
			
		||||
your watch list. When Cert Spotter detects a matching certificate, it
 | 
			
		||||
writes a report to standard out.
 | 
			
		||||
    certspotter reads the watch list only when starting up, so you must restart
 | 
			
		||||
    certspotter if you change it.
 | 
			
		||||
 | 
			
		||||
Cert Spotter also saves a copy of matching certificates in
 | 
			
		||||
`~/.certspotter/certs` (unless you specify the **-no\_save** option).
 | 
			
		||||
# OPERATION
 | 
			
		||||
 | 
			
		||||
When Cert Spotter has previously monitored a log, it scans the log
 | 
			
		||||
from the previous position, to avoid downloading the same log entry
 | 
			
		||||
more than once. (To override this behavior and scan all logs from the
 | 
			
		||||
beginning, specify the **-all\_time** option.)
 | 
			
		||||
certspotter continuously monitors all browser-recognized Certificate
 | 
			
		||||
Transparency logs looking for certificates which are valid for any domain
 | 
			
		||||
on your watch list. When certspotter detects a matching certificate, it
 | 
			
		||||
emails you (if `-email` is specified), executes a script (if `-script`
 | 
			
		||||
is specified), and/or writes a report to standard out (if `-stdout`
 | 
			
		||||
is specified).
 | 
			
		||||
 | 
			
		||||
When Cert Spotter has not previously monitored a log, it can either start
 | 
			
		||||
certspotter also saves a copy of matching certificates in
 | 
			
		||||
`$CERTSPOTTER_STATE_DIR/certs` ("~/.certspotter/certs" by default)
 | 
			
		||||
unless you specify the `-no_save` option.
 | 
			
		||||
 | 
			
		||||
When certspotter has not previously monitored a log, it can either start
 | 
			
		||||
monitoring the log from the beginning, or seek to the end of the log and
 | 
			
		||||
start monitoring from there. Monitoring from the beginning guarantees
 | 
			
		||||
detection of all certificates, but requires downloading hundreds of
 | 
			
		||||
millions of certificates, which takes days. The default behavior is to
 | 
			
		||||
monitor from the beginning. To start monitoring new logs from the end,
 | 
			
		||||
specify the **-start\_at\_end** option.
 | 
			
		||||
specify the `-start_at_end` option.
 | 
			
		||||
 | 
			
		||||
You can add and remove domains on your watchlist at any time. However,
 | 
			
		||||
the certspotter command only notifies you of certificates that were
 | 
			
		||||
logged since adding a domain to the watchlist, unless you specify the
 | 
			
		||||
**-all\_time** option, which requires scanning the entirety of every log
 | 
			
		||||
and takes many days to complete with a fast Internet connection.
 | 
			
		||||
To examine preexisting certificates, it's better to use the Cert
 | 
			
		||||
Spotter service <https://sslmate.com/certspotter>, the Cert Spotter
 | 
			
		||||
API <https://sslmate.com/certspotter/api>, or a CT search engine such
 | 
			
		||||
as <https://crt.sh>.
 | 
			
		||||
 | 
			
		||||
## Coverage
 | 
			
		||||
 | 
			
		||||
Any certificate that is logged to a Certificate Transparency log trusted by
 | 
			
		||||
Chromium will be detected by Cert Spotter. All certificates issued after April
 | 
			
		||||
30, 2018 must be logged to such a log to be trusted by Chromium.
 | 
			
		||||
 | 
			
		||||
Generally, certificate authorities will automatically submit certificates
 | 
			
		||||
to logs so that they will work in Chromium.  In addition, certificates
 | 
			
		||||
that are discovered during Internet-wide scans are submitted to Certificate
 | 
			
		||||
Transparency logs.
 | 
			
		||||
 | 
			
		||||
## Bygone certificates
 | 
			
		||||
 | 
			
		||||
Cert Spotter can also notify users of bygone SSL certificates, which are SSL
 | 
			
		||||
certificates that outlived their prior domain owner's registration into the
 | 
			
		||||
next owners registration. To detect these certificates add a **valid\_at**
 | 
			
		||||
argument to each domain in the watchlist followed by the date the domain was
 | 
			
		||||
registered in the following format YYYY-MM-DD. For example:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
example.com valid_at:2014-05-02
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Security considerations
 | 
			
		||||
 | 
			
		||||
Cert Spotter assumes an adversarial model in which an attacker produces a
 | 
			
		||||
certificate that is accepted by at least some clients but goes undetected
 | 
			
		||||
because of an encoding error that prevents CT monitors from understanding it.
 | 
			
		||||
To defend against this attack, Cert Spotter uses a special certificate parser
 | 
			
		||||
that keeps the certificate unparsed except for the identifiers.  If one of the
 | 
			
		||||
identifiers matches a domain on your watchlist, you will be notified, even if
 | 
			
		||||
other parts of the certificate are unparsable.
 | 
			
		||||
 | 
			
		||||
Cert Spotter takes special precautions to ensure identifiers are parsed
 | 
			
		||||
correctly, and implements defenses against identifier-based attacks.  For
 | 
			
		||||
instance, if a DNS identifier contains a null byte, Cert Spotter interprets it
 | 
			
		||||
as two identifiers: the complete identifier, and the identifier formed by
 | 
			
		||||
truncating at the first null byte.  For example, a certificate for
 | 
			
		||||
*example.org\0.example.com* will alert the owners of both *example.org* and
 | 
			
		||||
*example.com*. This defends against null prefix attacks
 | 
			
		||||
<http://www.thoughtcrime.org/papers/null-prefix-attacks.pdf>.
 | 
			
		||||
 | 
			
		||||
SSLMate continuously monitors CT logs to make sure every certificate's
 | 
			
		||||
identifiers can be successfully parsed, and will release updates to Cert
 | 
			
		||||
Spotter as necessary to fix parsing failures.
 | 
			
		||||
 | 
			
		||||
Cert Spotter understands wildcard and redacted DNS names, and will alert you if
 | 
			
		||||
a wildcard or redacted certificate might match an identifier on your watchlist.
 | 
			
		||||
For example, a watchlist entry for *sub.example.com* would match certificates for
 | 
			
		||||
*\*.example.com* or *?.example.com*.
 | 
			
		||||
 | 
			
		||||
Cert Spotter is not just a log monitor, but also a log auditor which checks
 | 
			
		||||
that the log is obeying its append-only property. A future release of Cert
 | 
			
		||||
Spotter will support gossiping with other log monitors to ensure the log is
 | 
			
		||||
presenting a single view.
 | 
			
		||||
If certspotter has previously monitored a log, it resumes monitoring
 | 
			
		||||
the log from the previous position.  This means that if you add
 | 
			
		||||
a domain to your watch list, certspotter will not detect any certificates
 | 
			
		||||
that were logged prior to the addition.  To detect such certificates,
 | 
			
		||||
you must delete `$CERTSPOTTER_STATE_DIR/logs`, which will cause certspotter
 | 
			
		||||
to restart monitoring from the very beginning of each log (provided
 | 
			
		||||
`-start_at_end` is not specified).  This will cause certspotter to download
 | 
			
		||||
hundreds of millions of certificates, which takes days.  To find preexisting
 | 
			
		||||
certificates, it's faster to use the Cert Spotter service
 | 
			
		||||
<https://sslmate.com/certspotter>, SSLMate's Certificate Transparency Search
 | 
			
		||||
API <https://sslmate.com/ct_search_api>, or a CT search engine such as
 | 
			
		||||
<https://crt.sh>.
 | 
			
		||||
 | 
			
		||||
# EXIT STATUS
 | 
			
		||||
 | 
			
		||||
certspotter exits 0 on success, 1 on any error.
 | 
			
		||||
certspotter exits 0 when it receives `SIGTERM` or `SIGINT`,
 | 
			
		||||
and non-zero when a serious error occurs.
 | 
			
		||||
 | 
			
		||||
# ENVIRONMENT
 | 
			
		||||
 | 
			
		||||
**CERTSPOTTER\_STATE\_DIR**
 | 
			
		||||
:   Directory for storing state. Overridden by **-state\_dir**. Defaults to
 | 
			
		||||
`CERTSPOTTER_STATE_DIR`
 | 
			
		||||
 | 
			
		||||
:   Directory for storing state. Overridden by `-state_dir`. Defaults to
 | 
			
		||||
    `~/.certspotter`.
 | 
			
		||||
 | 
			
		||||
**CERTSPOTTER\_CONFIG\_DIR**
 | 
			
		||||
:   Directory from which any configuration, such as the watchlist, is read.
 | 
			
		||||
`CERTSPOTTER_CONFIG_DIR`
 | 
			
		||||
 | 
			
		||||
:   Directory from which any configuration, such as the watch list, is read.
 | 
			
		||||
    Defaults to `~/.certspotter`.
 | 
			
		||||
 | 
			
		||||
`HTTPS_PROXY`
 | 
			
		||||
 | 
			
		||||
:   URL of proxy server for making HTTPS requests.  `http://`, `https://`, and
 | 
			
		||||
    `socks5://` URLs are supported.  By default, no proxy server is used.
 | 
			
		||||
 | 
			
		||||
# SEE ALSO
 | 
			
		||||
 | 
			
		||||
**certspotter-script**(8)
 | 
			
		||||
certspotter-script(8)
 | 
			
		||||
 | 
			
		||||
# COPYRIGHT
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2016-2022 Opsmate, Inc.
 | 
			
		||||
Copyright (c) 2016-2023 Opsmate, Inc.
 | 
			
		||||
 | 
			
		||||
# BUGS
 | 
			
		||||
 | 
			
		||||
Report bugs to <https://github.com/SSLmate/certspotter>.
 | 
			
		||||
Report bugs to <https://github.com/SSLMate/certspotter>.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user