Since you're running the server on localhost, I assume you're clicking through Chrome's self-signed cert error page? That path is not optimized, so will go through extra handshakes. Http in general is generally consumer sends a request request-> server sends a response, with the cert error case, it's consumer tries to send a request -> request is not sent, since we get an error setting up a socket -> display error to user -> user overrides the error -> we *really* send the request over an unsafe socket -> server sends response. Reusing the original socket through all that would add a bit more complexity than we care to add (And we can't just shove the bad socket back into the socket pool, until the user has chosen to ignore the cert error), so we throw away the original socket when we return the cert error.
There are a number of reasons two connections might fail (A second preconnected socket also sees the cert error, the first socket is actually a preconnect, and fails before the real request reaches the network stack, or some other fun race to the socket pool between multiple requests to the bad server).
Anyhow, the self-signed cert isn't something that Chrome is optimized for, or something that we're going to add extra complexity to improve the performance of.