3 ms·
Taking this opportunity to sell my idea about how to "fix" part of the TLS cert trust process... CAs can all issue certs for any domain, right? I mean, there's
by 0xbadcafebee 4y ago
Taking this opportunity to sell my idea about how to "fix" part of the TLS cert trust process...
CAs can all issue certs for any domain, right? I mean, there's these hacks that are supposed to restrict that, but it's optional. The browser trusts any cert that a CA has signed. And in order for a CA to let you create a cert, they have hokey, problematic methods to allow you to prove that you, temporarily, at the moment, control the IP space that is pointed to by whatever DNS server a given CA trusts, and hope that BGP and DNS do not lie to the CA. So 1) BGP has to be trusted, 2) the DNS has to be trusted, 3) the CA has to be trusted, and 4) a temporary check of an IP address needs to show something to the CA that they think is valid (among other hokey validation methods, like an e-mail to some predetermined address at a domain, or an HTTP GET to the aforementioned IP).
That's a lot of stuff that we hope is all valid and not been tampered with! (In fact, these things [and more] do get tampered with, and have been exploited in the past to generate certs illicitly) So how can we make things a little more consistent and secure? Well all of this trades on the idea that the CA is trying to verify that you, the person asking for a cert, really own and control the domain name that you are asking for a cert for. That's tricky, because the registrar and the nameserver are the only entities that can authoritatively say who owns and controls the doman.
So... why don't we just confirm, cryptographically, with the registrar and the nameserver, that the requestor of the cert is who they say they are? If the registrar keeps a key that the domain owner has uploaded [or signed], and the nameserver keeps a key the nameserver owner has uploaded [or signed], and you create a CSR (including what CA should generate your cert), get it signed by both the registrar and nameserver, and send it to the CA, the CA can verify it with the registrar and the nameserver, and the cert can include the CSR signature from the registrar and nameserver. So now anyone who gets the cert can confirm 1) who was supposed to issue it, 2) that the real domain owner signed the request, 3) that the CA confirmed all this when it issued the cert, without depending on BGP or DNS or HTTP.
.....this will never happen, of course, because there are vested interests, and it would take a lot of hand-wringing and agreements and modifications to policies and new software and all kinds of stuff to make that happen. So we will continue relying on BGP, DNS, and the integrity of a couple hundred CAs, to make sure nobody ever 'exceeds their authority' and issues a cert they shouldn't have.
- deleted 4y ago[deleted]
- jiggawatts 4y agoThe marginal cost of a certificate is very close to $0.00, the same as a TXT record in a DNS server. As you've realised, the reason they cost "real money" measured in dollars is because of rent seeking[1] by a few large corporations. These guys have sufficient clout to (mostly) snuff out any upstarts. For example, their response to Let's Encrypt was to start pushing CAA records for "security". You guessed it: the security in that context is not referring to your IT security, but to their revenue security. Similarly, Microsoft Azure has CA integration... with the two biggest for-money certificate authorities. There is virtually no chance they'll ever willingly integrate with Let's Encrypt or add support for the generic ACME protocol because there is no margin on free. There's not much that can be done to fight this, but there are options. As you've said, DNS name servers and CA functions need to be combined. It's almost gibberish to have these as separate services in 2022, since practically everything uses TLS, which needs both to act in concert. In fact, DNS-based traffic management, static DNS, dynamic DNS, DHCP, IPsec management, and CA services should all be combined into a single executable. This way back-end machines could enroll in certificates at the same time that they get their IP addresses. Their IP addresses would be registered under their name, and load balancers can add their IPs to service pools. Etc... Microsoft almost did this right, with LDAP + DHCP + DNS + Enterprise PKI being mostly integrated, but not quite. Keep in mind that the era when these things "had" to be separate services was when DNS needed a dedicated bare metal machine for performance. These days the DNS zone of a large corporation fits in L2 cache and can run out of a fraction of a CPU core! [1] https://en.wikipedia.org/wiki/Rent-seeking https://en.wikipedia.org/wiki/Rent-seeking
- iancarroll 4y agoWhat does CAA have to do with Let’s Encrypt? CAA’s first RFC was published years before Let’s Encrypt began issuing certificates, and they are an author on the latest RFC version. CAA easily supports several CAs issuing for one domain.
- pabs3 4y agoThis sounds like reinventing DNSSEC TLSA records, which browser vendors refuse to support.