Interesting about the TPM2 stuff - it has implemented a store loader for "TSS2 PRIVATE KEY" stanza.
Since PEM is new to pkcs11-provider it may not have implemented a store loader yet (i.e. not PEM_bio_read_PrivateKey ready) hence this PR uses store directly. I will check with pkcs11-provider whether they can implement a store loader. Re current MWORKER problem (before any solution in 3.1!) - [RFC] Delayed private key loading - check if we are in MWORKER mode then skip EVP_PKEY loading in master for all PKCS#11 keys Hmmm - how to identify such keys? Maybe .crt file has a first line "key-type = PKCS#11" - in child process: create a map based on SSL_CTX *pointer and just-in-time load private key when needed at at SSL_set_SSL_CTX; does the child_process have access to bind_conf/ssl_bind_conf so it can find the crt file name? Otherwise, cache the SSL_CTX* -> crt(or key) filename in master before fork() WDYT? Thanks S-P On Thu, 21 Mar 2024 at 00:15, William Lallemand <wlallem...@haproxy.com> wrote: > On Wed, Mar 20, 2024 at 06:23:03AM +0000, PR Bot wrote: > > Subject: [PR] FEATURE: load private keys from PKCS#11 pkcs11-provider > PEM files > > Dear list! > > > > Author: S-P Chan <shihping.c...@gmail.com> > > Number of patches: 1 > > > > This is an automated relay of the Github pull request: > > FEATURE: load private keys from PKCS#11 pkcs11-provider PEM files > > > > Patch title(s): > > FEATURE: load private keys from PKCS#11 pkcs11-provider PEM files > > > > Link: > > https://github.com/haproxy/haproxy/pull/2493 > > > > Edit locally: > > wget https://github.com/haproxy/haproxy/pull/2493.patch && vi > 2493.patch > > > > Apply locally: > > curl https://github.com/haproxy/haproxy/pull/2493.patch | git am - > > > > Description: > > With pkcs11-provider (https://github.com/latchset/pkcs11-provider) a > > specially formatted PEM stanza can be used > > to reference a PKCS#11 > > URI to locate the private key. > > > > This PEM stanza can be used > > inside the crt file so that there is no change to the HAProxy config > > language. > > > > This works with OpenSSL 3 and pkcs11-provider after > > https://github.com/latchset/pkcs11-provider/commit/0806c3665 which > > added support for PKCS#11 URI-in-PEM. > > > > TODO: This PR works > > without forking (i.e., not in master-worker mode) as PKCS#11 drivers > > are fragile after fork. > > To use PKCS#11 keys in master-worker mode, > > we need to defer key loading to the child process. > > > > Format of > > PEM stanza: > > ``` > > -----BEGIN PKCS#11 PROVIDER URI----- > > MIHWGhlQS0NTIzExIFByb3ZpZGVyIFVSSSB2MS4wDIG4cGtjczExOm1vZGVsPU5T > > UyUyMDM7bWFudWZhY3R1cmVyPU1vemlsbGElMjBGb3VuZGF0aW9uO3NlcmlhbD0w > > MDAwMDAwMDAwMDAwMDAwO3Rva2VuPU5TUyUyMENlcnRpZmljYXRlJTIwREI7aWQ9 > > JTczJTQ5JTU1JTFBJTMyJUFFJThDJUIwJTQ1JTQ5JTAzJURDJUE4JTA0JTg0JTlF > > JUI0JTlGJTQxJUFFO3R5cGU9cHJpdmF0ZQ== > > -----END PKCS#11 PROVIDER > > URI----- > > ``` > > > > Parsed ASN.1: > > ``` > > 0:d=0 hl=3 l= > > 214 cons: SEQUENCE > > 3:d=1 hl=2 l= 25 prim: VISIBLESTRING > > :PKCS#11 Provider URI v1.0 > > 30:d=1 hl=3 l= 184 prim: UTF8STRING > > :pkcs11:model=NSS%203;manufacturer=Mozilla%20Foundation;serial=0000000 > > 000000000;token=NSS%20Certificate%20DB;id=%73%49%55%1A%32%AE%8C%B0%45% > > 49%03%DC%A8%04%84%9E%B4%9F%41%AE;type=private > > ``` > > > > Instructions: > > This github pull request will be closed automatically; patch should be > > reviewed on the haproxy mailing list (haproxy@formilux.org). > Everyone is > > invited to comment, even the patch's author. Please keep the author > and > > list CCed in replies. Please note that in absence of any response this > > pull request will be lost. > > > > Hello, > > Thank you for your contribution, I'm surprised this is not already > working with the current code. > > We made test in the past with the TPM2 provider which also uses a URI in > the privatekey: > > https://github.com/haproxy/wiki/wiki/OpenSSL-Providers-in-HAProxy#tpm2-provider > > Do you have any specific configuration for HAProxy? > > Regards, > > -- > William Lallemand >