Hi guys, sorry for not jumping in earlier, but I agree with what was discussed for now.
On Tue, Aug 19, 2025 at 11:44:26AM +0200, William Lallemand wrote: > > Originally I hoped to make use of p11-kit to do exactly this: > > https://github.com/p11-glue/p11-kit. However, the > > external interface for it is itself a PKCS#11 module (p11-kit-client.so > > <http://p11-kit-client.so/> which is > > blocking). However, this interfaces with the p11-kit server over a UNIX > > socket and I believe I can simply take the > > synchronous code from the client and make it asynchronous within HAProxy. > > The entry point for their client is here: > > https://github.com/p11-glue/p11-kit/blob/master/p11-kit/client.c. > > I don't suppose it's all that complex to provide support for the few > > functions required to do signing. There's a lot > > of PKCS#11 functionality that I don't think we care about at all. > > > What do you think about that for a solution before I take a crack at it? > > I didn't check everything which is provided by the PKCS#11 spec but indeed > that could be enough to do only the signing. > What's important is that we don't depend on external code on haproxy side. > Having the p11-kit server loading the .so > driver for the HSM, and exposes a UNIX socket seems perfect. So HAProxy just > have to implement the client side of > it. By the way, Chris, just like you planned to dedicate multiple threads to that part, it would make sense to support multiple connections to the deamon, at least to let it scale and to avoid head-of-line blocking etc. I think that in terms of configuration, since you have a driver mentioned in the .pem, the most natural way to configure this would be to permit to designate a list of drivers -> socket path + #conn. For example (just made up, don't take my words for that): global pkcs11-driver dummy /var/run/pkcs11-dummy.sock nbconn 10 pkcs11-driver real /var/run/pkcs11-real.sock nbconn 100 Maybe over time we'll figure that it can even be useful to support remote systems (I don't know, but I wouldn't be surprised if high-traffic users would prefer to have smaller LBs and larger crypto machines for example since it will offload the expensive asymmetric crypto operations there). Logically in terms of haproxy at run time it will not change anything to use unix or TCP sockets. But I know the devil is always in the details. That's why I'm mentionning it to help with the design without making this a prerequisite :-) > I just hope that we don't need to define specifics things for each drivers on > the client side. But yes, if an equivalent > of p11-kit-client.so in non-blocking mode within haproxy is implemented, that > would be an elegant way of achieving the > feature and it could work with multiple implementations of the protocol! Yes I think so as well! Regards, Willy

