HN user

agwa

11,599 karma

Bootstrapped founder of SSLMate, where I make SSL certificates easier and do WebPKI and Certificate Transparency stuff: https://sslmate.com

Website: https://www.agwa.name

Email: andrew@agwa.name

Posts76
Comments1,448
View on HN
www.agwa.name 2mo ago

FastCGI: 30 years old and still the better protocol for reverse proxies

agwa
424pts101
www.agwa.name 5mo ago

Why IP Address Certificates Are Dangerous and Usually Unnecessary

agwa
3pts0
www.agwa.name 8mo ago

Google suspended my company's Google cloud account for the third time

agwa
416pts192
words.filippo.io 9mo ago

A Retrospective Survey of 2024/2025 Open Source Supply Chain Compromises

agwa
13pts2
randtel.co 1y ago

The Randolph Public Telephone Operating Company

agwa
1pts0
news.ycombinator.com 1y ago

Tell HN: US companies must file a BOI report by Jan 1 to avoid fines and prison

agwa
8pts1
privacysandbox.com 2y ago

A new path for Privacy Sandbox on the web

agwa
108pts66
www.californiacitynews.org 2y ago

AB 1637 requires all cities and counties to transition to a .gov domain

agwa
41pts35
www.eff.org 2y ago

Article 45 of eIDAS 2.0 will roll back web security by 12 years

agwa
253pts125
www.agwa.name 3y ago

Last week's Let's Encrypt downtime

agwa
218pts45
www.agwa.name 3y ago

The Difference Between Root Certificate Authorities, Intermediates and Resellers

agwa
94pts38
infosec.exchange 3y ago

Spoofing vulnerability in Gmail's BIMI implementation

agwa
2pts0
sslmate.com 3y ago

Websites Are Failing with ERR_CERTIFICATE_TRANSPARENCY_REQUIRED

agwa
2pts2
www.agwa.name 3y ago

The SSL Certificate Issuer Field Is a Lie

agwa
8pts1
blog.stazot.com 3y ago

SSH Key Injection in Google Cloud Compute Engine

agwa
1pts0
www.agwa.name 3y ago

whoarethey: Determine Who Can Log in to an SSH Server

agwa
99pts42
twitter.com 4y ago

If your SSL certificate was issued in 2020 it may have stopped working in Chrome

agwa
12pts2
www.dnshelper.com 4y ago

Show HN: JavaScript widget to help your customers set up DNS records

agwa
4pts1
www.agwa.name 4y ago

Using SNI Proxying and IPv6 to Share Port 443 Between Webapps

agwa
16pts4
ian.sh 4y ago

CookieMonster: a tool for breaking stateless authentication

agwa
4pts0
ian.sh 4y ago

MarkMonitor left 60k domains for the taking

agwa
420pts99
twitter.com 6y ago

The latest version of Slack has a setting to disable the WYSIWYG editor

agwa
783pts221
www.mail-archive.com 8y ago

Mozilla to distrust PROCERT certificate authority

agwa
3pts0
security.googleblog.com 8y ago

Chrome’s Plan to Distrust Symantec Certificates

agwa
4pts0
sslmate.com 8y ago

Show HN: CAA Record Generator

agwa
11pts1
arstechnica.com 9y ago

Already on probation, Symantec issues more illegit HTTPS certificates

agwa
60pts3
www.mail-archive.com 9y ago

Incident Report – Certificates issued without proper domain validation

agwa
3pts0
www.mail-archive.com 9y ago

Update on transition of the Verizon roots and issuance of SHA1 certificates

agwa
1pts0
www.agwa.name 9y ago

How to Crash Systemd in One Command

agwa
224pts184
www.wosign.com 9y ago

WoSign Incidents Final Report [pdf]

agwa
4pts0
Stop Using JWTs 1 month ago

The cost is the vigilance required to use them safely. It's not just compute/storage costs.

Stop Using JWTs 1 month ago

Fair enough, but those optimizations are basically free. People think stateless tokens are free but they really are not.

Stop Using JWTs 1 month ago

As someone who operates a PostgreSQL database containing 27 billion SSL certificates, each 1-2kb each, with a bunch of secondary indexes that get inserted in random order, I find it pretty incredible that people see the need to optimize their session database. At what scale does the size of the session database actually matter?

Those stateless tokens may be "unforgeable", but they are replayable, and if you're not mindful of that you can have security vulnerabilities.

The blog post provides a certificate chain that validates in OpenSSL but not in Go.

The reason it doesn't validate in Go is that the Subject field in the CA certificate uses a different string encoding than the Issuer field in the leaf certificate, so the fields are not byte-for-byte equal.

Go requires the Issuer and Subject to be byte-for-byte equal. This was permitted by older specs, but RFC 5280 changed the rules to require the use of RFC 4518 (LDAP stringprep) for comparing strings. This turned a simple memcmp into a complicated algorithm that requires implementing Unicode normalization, for virtually zero benefit. That's the last thing you want in your security-critical certificate verifier, so Go quite sensibly chose to follow the older specs in this regard. The CA/Browser Forum's Baseline Requirements also mandate byte-for-byte equality, so Go's behavior won't cause publicly-trusted certificates to be incorrectly rejected.

Note that LDAP stringprep is so complicated that OpenSSL doesn't even try to implement it properly and uses an approximation instead. So you would also be able to "fool" OpenSSL into rejecting certificate chains that RFC 5280 says are valid.

The blog post says that this is an "ongoing debate" in the Go project but I don't think that's accurate. I'd be shocked if they ever changed this behavior, given that crypto/x509 targets publicly-trusted certificates and the current behavior is so much simpler.

The following go flags let you build statically-linked cgo binaries, provided that all the C libraries that you're using support static linking and don't call the NSS functions in glibc:

-tags netgo,osusergo -linkmode external -extldflags -static

I regularly compile (cross-compile, even) static Go binaries that use the cgo sqlite package. But it's certainly a lot simpler if you can avoid cgo.

That RFC is obsoleted by https://datatracker.ietf.org/doc/html/rfc9844 which removes all guidance around URIs:

This document completely obsoletes [RFC6874], which implementors of web browsers have determined is impracticable to support [LINK-LOCAL-URI], and replaces it with a generic UI requirement. Note that obsoleting [RFC6874] reverts the change that it made to the URI syntax defined by [RFC3986], so [RFC3986] is no longer updated by [RFC6874]. As far as is known, this change will have no significant impact on non-browser deployments of URIs.

The downside is that to get the size optimization, TLS servers will get moderately more complicated (they'll need to have multiple MTC certificates configured and select the right one depending on the client's state), and TLS clients will get considerably more complicated (they'll need to continuously download landmarks for each CA out-of-band from a trusted source).

I expect many non-browser TLS clients won't support the small landmark-relative certificates, because there isn't a clear party to operate the landmark distribution service (Chrome has Google, and Firefox has Mozilla, but who does curl have?). I'm also worried that support will be lacking in open source TLS servers, though that's a more tractable problem. Consequentially, I expect the large standalone certificates to be quite common outside of connections between browsers and CDNs.

You'll be able to immediately use use a "standalone certificate" while waiting for the batch to be created. The tradeoff is that the standalone certificate will have multiple huge ML-DSA signatures.

Putting security-critical logic in proxies is a violation of the End-to-End Principle, not an example of it. That doesn't mean it's a bad thing; as ragall notes, the End-to-End Principle doesn't make sense here.

You're correct that if the proxy removes all unknown headers, you're safe (with HTTP/2). But that sounds extremely inconvenient - before your application can use a new header, you have to talk to the team who runs the proxy. And popular reverse proxy software doesn't do that by default so it remains a huge footgun for the unwary. All completely avoided with FastCGI.

I'll note that while X.509 certificates are deployed widely on the Internet, they are not deployed in the manner the ITU intended. There is no global X.500 directory and Distinguished Names are just opaque identifiers that are used to help find issuers during chain building. That hardly counts as a win for the ITU in my book.

I don't doubt your experience, but I wouldn't expect it to continue. I don't think Tuna-Fish is correct that "most" of the IPv4 world is behind CGNAT, but that does appear to be the trend. You can't even assume hosting providers give their subscribers their own IPv4 addresses anymore. On the other hand, there's a chance providers like Linode will eventually wise up and start giving subscribers their own /64 - there are certainly enough IPv6 addresses available for that, unlike with IPv4.

But JWTs are usually used as bearer tokens when doing API authentication. Those are definitely secrets that need to be scanned for.

Or are you suggesting that the API requests are signed with a private key stored in an HSM, and the JWT certifies the public key? Is that common?