[krbdev.mit.edu #7596] PKINIT should allow missing DH param Q
Tom Yu via RT
rt-comment at krbdev.mit.edu
Wed Apr 3 10:13:55 EDT 2013
"Reinhard Kugler via RT" <rt-comment at krbdev.mit.edu> writes:
> I temporarily removed the check of the dh key length
> in pkinit_crypto_openssl.c
>
> /* KDC SHOULD check to see if the key parameters satisfy its policy */
> dh_prime_bits = BN_num_bits(dh->p);
> /*if (minbits && dh_prime_bits < minbits) {
> pkiDebug("client sent dh params with %d bits, we require %d\n",
> dh_prime_bits, minbits);
> goto cleanup;
> }*/
>
> pkinit succeeded and windows was able to acquire a TGT
Thanks for the additional information. Based on your previous logs,
it looks like the Windows client makes the following requests:
1. AS-REQ, no preauth -> KRB-ERROR, additional preauth needed
2. AS-REQ, PKINIT, 1024-bit DH -> KRB-ERROR, bad key params
3. AS-REQ, PKINIT, 2048-bit DH -> AS-REP
4. AS-REQ, no preauth or unknown preauth -> KRB-ERROR, additional
preauth needed
Windows is possibly failing to handle the DH parameter negotiation
correctly. Interestingly, Windows is including the PKINIT special
enctypes on request #4, but probably omitting the actual PKINIT
preauth.
Also, it seems that the compile-time constant that establishes the
default DH modulus size serves as a lower bound on the configurable DH
modulus size, so the configuration setting "pkinit_dh_min_bits = 1024"
has no effect because the compiled-time constant is 2048:
pkinit_init_kdc_profile: invalid value (1024) for
pkinit_dh_min_bits, using default value (2048) instead
This happens in pkinit_srv.c:pkinit_init_kdc_profile().
Getting more detailed trace information from the Windows client would
be useful, but I think Windows 7 might have made that more difficult
(changed trace logging to a proprietary binary format?). I will look
around to see what I can find on this topic.
More information about the krb5-bugs
mailing list