Vincent Bernat, a network and Linux engineer, writes detailed posts on Linux networking, Debian packaging, and Python tooling.
HN commenters call it one of their favorite networking blogs and link its posts on IPv4 route lookup and Debian packaging.
Is HTTP 2.0 finalized and approved? If not could we push for it to support PFS by default with ECDHE, which seems to add only 15 percent overhead [1]? That seems like a small price to pay if the security of every session grows exponentially, with each one being encrypted with a new key.
HTTP 2.0/SPDY already makes TLS mandatory, no? So why not make PFS mandatory, too? I'd rather we do it now than wait for HTTP 3.0, and it might force a lot more companies to adopt it by default as they move to HTTP 2.0 (companies such as Microsoft [2]).
EDIT: Links
[1] - http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html
[2] - http://news.netcraft.com/archives/2013/06/25/ssl-intercepted-today-decrypted-tomorrow.html
Back in the HTTP/0.9 era TIME_WAIT was a big problem when running a busy [reverse] proxy. I remember using ndd to "tune" tcp_time_wait_interval on Solaris for this, as well as the anon (ephemeral) port range.
This is my go to that topic now:
https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux
"The solution is more quadruplets" is for me one those things that's blindingly obvious once pointed out.
See also the other link Cloudflare "Why we use the Linux kernel's TCP stack" link in a sibling - about half-way through they reveal they use both kernel bypass (DOS can max out iptables at ~1Mpps) and Solarflare NICs (offload options not stated), as well as Intel NICs with netmap bypass.
With regard to your latter question, [1] gives a good overview on PFS in TLS. You'll need to exchange keys using (EC)DHE, essentially.
As for subpoenaing keys: Most CAs will allow for you to generate your key pair and certificate signing request on your own hardware. You'd then submit the CSR which the CA would in turn generate a signed certificate from. The private key should never be shared with the CA.
In order to eavesdrop on communications, the NSA would then need to subpoena each targeted company's key. Wide reach is easy (go for the 5-10 biggest fish), comprehensive reach nigh impossible.
[1] http://vincent.bernat.im/en/blog/2011-ssl-perfect-forward-secrecy.html
> From the kernel point of view, there is a only one socket with a unique listen queue. This socket is associated to several file descriptors: one in systemd and one in the current process. The socket stays alive as long as there is at least one file descriptor. An incoming connection is put by the kernel in the listen queue and can be dequeued from any file descriptor with the accept() syscall. Therefore, this approach actually achieves zero-downtime deployment: no incoming connection is rejected. [0]
systemd can be sufficient for a zero-downtime deployment.
[0] https://vincent.bernat.ch/en/blog/2018-systemd-golang-socket-activation#zero-downtime-deployment
I have also restored the very first articles I wrote in the 90s when I was young <https://vincent.bernat.ch/en/blog/2026-old-web-articles>. At the time, they were not "great," but now I think they have some limited historical values. For example, one of them is about how the national phone operator was billing minutes. The information was easy to find in the past but is pretty scarce now.
I didn't use the wayback machine because it didn't archive everything I needed and because I still had the files on my hard drive, but if I didn't, I would have been happy to recover them.
Actually no, it's not a terrible process, it's a misunderstood process[#].
Modern tools (debhelper 7+) allow for simple process, though one needs to
understand how the binary packages thing works.
This is a decent overview on technical details:
http://vincent.bernat.im/en/blog/2016-pragmatic-debian-packaging.html
[#] I assume you meant the friction with the tools, not the fact that package
builder needs to chase down all the dependencies and generally prepare many
source tarballs to be included in a repository.