Take advantage of the CAA DNS record to authorize CA to issue the TLS certificates.
What is DNS CAA?
CAA is one of the DNS record types which instruct CA if they should issue a certificate or not. In another word, you are letting the world know who should issue your domain SSL/TLS certificate. CAA implementation made mandatory late 2017, so it’s relatively new, and less than 5% of popular sites have implemented this.
Let’s take an example – Geekflare owns a site called “gf.dev,” which has the following CAA record.
gf.dev. 3586 IN CAA 0 issue "digicert.com; cansignhttpexchanges=yes"
gf.dev. 3586 IN CAA 0 issuewild "comodoca.com"
gf.dev. 3586 IN CAA 0 issue "comodoca.com"
gf.dev. 3586 IN CAA 0 issuewild "digicert.com; cansignhttpexchanges=yes"
gf.dev. 3586 IN CAA 0 issuewild "letsencrypt.org"
gf.dev. 3586 IN CAA 0 issue "letsencrypt.org"
By looking at the above results, I can get the certificate issued only from DigiCert, Comodo, and Let’s encrypt. If I ask Thawte or other CA to issue a cert for gf.dev, then they won’t be able to. Also, if you pay attention, you will notice some entry has issue and some issuewild. Let’s find out what they are.
issue – instruct CA to issue the cert only for that domain.
issuewild – CA can issue the wildcard certificate so that it can be used in a domain or sub-domain.
CAA record also supports iodef (Incident object description exchange format) which allow CA to send violation report to the specified email or contact details.
What happens when no CAA record found?
If a domain doesn’t have a CAA record, then anyone can generate a CSR for that domain and get the cert signed by any CA. This is a security risk.
Is it clear now?
There are a few abbreviations I’ve used above. Let’s check out what they are.
DNS – Domain name system
CA – Certificate authority
CAA – Certification authority authorization
TLS – Transport layer security
SSL – Secure socket layer
How to check the DNS CAA record?
There are multiple ways to validate the CAA record. If you don’t want to leave your terminal, then you can check using dig command.