Hello and much appreciation for the iPXE effort.

Kindly notice that when iPXE is built with only a certificate authority to trust (no cert + key), and
the iPXE shell does an https://.... request of any kind, and
the SSL enabled server explicitly does not ask for a client certificate then
-- all is well.

But, if the SSL enabled server does ask for a client certificate but only in an optional way, e.g. nginx example:

ssl_verify_client optional;

Then iPXE fails trying to find a non-existent cert:
in tls.c

        /* Determine client certificate to be sent */
        tls->cert = certstore_find_key ( &private_key );
        if ( ! tls->cert ) {
DBGC ( tls, "TLS %p could not find certificate corresponding "
                       "to private key\n", tls );
                return -EPERM_CLIENT_CERT;

The correct response is not to fail the tls session when asked for an optional client cert doesn't exist, only when an required client cert doesn't exist.

I tested this, setting the server to explicitly not ask for a client cert when one didn't exist allowed normal operations. Setting it to optionally validate the client cert when one didn't exist failed on the iPXE end.


_______________________________________________
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to