I have made some progress locating the problem which I would like to share here.

When I am using openssl with the extensions file exactly as recommended to create the client certificate and refer to the file in /etc/krb5.conf, kinit works flawlessly with Public Key Algorithm id-ecPublicKey / secp384r1. I can even use ECC for the CA certificate without problems.

The problem is that we are using Yubikeys with the PIV function as smartcards. Yubikey supports ECC with secp384r1.

But when I create a new key pair with ECC, sign the public key with openssl with the same extension file, and try to use it, I get the following situation

 * When I do a kinit, connection is opened to the KDC and it sends the
   message "pre-authentication required" back.
 * After I enter the yubikey PIN, there is no more communication with
   the KDC - so the problem is on the client as Greg has already proposed
 * kinit reports that the certificate from the yubikey has been read
   and that the CN is OK (I am using pkinit_cert_match...).
 * But then, I am getting the following message from opensc:

P:296321; T:0x140609979246400 17:33:26.054 [opensc-pkcs11] pkcs11-object.c:697:C_SignInit: C_SignInit() = CKR_KEY_HANDLE_INVALID

So there is some problem with opensc-pkcs11. Interestingly I am using the same Yubikey successfully with pam-pkcs11 to authenticate without problems.

I have some hope that I am seeing a configuration issue, even though it is weird that this would depend on the public key algorithm.


On 11/17/23 06:53, Greg Hudson wrote:
On 11/15/23 23:22, Goetz Golla wrote:
* Does MIT Kerberos support PKINIT with Elliptic Curves as described
in RFC 5349 ?

A P-384 EC client certificate works in my tests, with either krb5-1.17 or the current code, as long as the KDC is also running MIT krb5.

Ken is correct that there is a hardcoded reference to RSA in the source:

        p7si->digest_enc_alg->algorithm =
            OBJ_nid2obj(NID_sha256WithRSAEncryption);

and this probably means the CMS signature has a piece of incorrect metadata when an EC certificate is used.  But this field is not used when generating the signature contents and is ignored by OpenSSL when verifying the signature (when the KDC is running MIT krb5).

* Could it be that for ECC client certificates the KDC certificate
also needs the be ECC ?

In my tests the KDC certificate was an RSA cert, so no.

Of course, my experience doesn't match yours.  From your trace, I believe that the failure occurs in the client code, not on the KDC, so inspecting the KDC logs would not help.  But the trace log does not contain any detailed information about the failure.

You can sometimes improve the diagnostics for PKINIT failures by removing the long-term keys associated with the principal, so that authentication does not fall back to encrypted timestamp:

  kadmin purgekeys -all user

If that doesn't help, it may be necessary to build the code with debugging symbols and and step through it to find out where it is failing.
________________________________________________
Kerberos mailing list           Kerberos@mit.edu
https://mailman.mit.edu/mailman/listinfo/kerberos

Reply via email to