Commit Graph

34 Commits

Author SHA1 Message Date
Nicolas Williams
73c424ea66 bx509d: Get KDC config out of bx509d 2020-09-08 00:25:24 -05:00
Nicolas Williams
c3e99be519 kdc: Get KDC config out of CSR authorizer API
Part of refactoring to split out bx509/bnegotiate, add a kadmin REST service,
and move all of that out of kdc/.
2020-09-08 00:25:24 -05:00
Jeffrey Altman
713aa7961a kdc: kx509.c fix build failures
bcb5ed28fb ("kdc/kx509.c: clean up
krb5_get_error_message strings used for mk_error_resp") introduced a
build failure.  'context' is not a local variable but a field in the
kx509_req_context.

Change-Id: I38a8a9b1a19c3370dfc039d6e09445425936c32b
2020-03-08 12:01:35 -04:00
Daria Phoebe Brashear
bcb5ed28fb kdc/kx509.c: clean up krb5_get_error_message strings used for mk_error_resp
mk_error_response expects the strings it builds will need to be freed but
not those passed in; krb5_get_error_message generates a string which needs to
be freed. keep track of and free those strings.
2020-03-06 11:56:03 -06:00
Daria Phoebe Brashear
bfcc7a90ed kdc kx509: avoid double free of cprinc and s in check_authz
on error from der_parse_heim_old we early exit via out, which frees
s and cprinc; we should not do so a second time unless we explicitly
NULL the pointers but there is no value in doing so.
2020-03-06 11:56:03 -06:00
Nicolas Williams
1d5062b167 kdc: Modernize kx509 logging too 2019-12-11 19:34:36 -06:00
Nicolas Williams
575c67806b Add bx509d 2019-12-04 21:34:44 -06:00
Roland C. Dowdeswell
c7d4682aed Define log levels in docs and change default to 0-3.
We define the meaning of the various log levels in the man page
for krb5_openlog(3).  If logging configured and levels are not
specified, we change the default levels to 0-3 which should exclude
debugging messages which are generally only desired in exceptional
circumstances.

We also go through the KDC and adjust the levels to be appropriate.
2019-10-21 13:43:01 +01:00
Nicolas Williams
dfada0ccad kx509: Add CSR support
This commit adds support for proof of posession to the kx509 protocol by
using PKCS#10 CSRs.

This allows conveyance of extReq CSR attributes requesting desired
Certificate Extensions.
2019-10-09 20:53:30 -05:00
Nicolas Williams
6a7e7eace6 Add kx509 client and revamp kx509 service
This commit adds support for kx509 in libkrb5, and revamps the KDC's
kx509 service (fixing bugs, adding features).

Of note is that kx509 is attempted optimistically by the client, with
the certificate and private key stored in the ccache, and optionally in
an external PEM or DER file.

NOTE: We do not optimistically use kx509 in krb5_cc_store_cred() if the
      ccache is a MEMORY ccache so we don't generate a key when
      accepting a GSS context with a delegated credential.

kx509 protocol issues to be fixed in an upcoming commit:

 - no proof of possession (this is mostly not too bad, but we'll want to
   fix it by using CSRs)
 - no algorithm agility (only plain RSA is supported)
 - very limited (no way to request any options in regards to the
   requested cert)
 - error codes are not very useful

Things we're adding in this commit:

 - libkrb5 kx509 client
 - automatic kx509 usage hooked in via krb5_cc_store_cred() of start TGT
 - per-realm templates on the KDC side
 - per-realm issuer certificates
 - send error messages on the KDC side
   (this is essential to avoid client-side timeouts on error)
 - authenticate as many error messages
 - add a protocol probe feature so we can avoid generating a
   keypair if the service is not enabled
   (once we add support for ECC algorithms we won't need this
    anymore; the issue is that RSA keygen is slow)
 - support for different types of client principals, not just username:

    - host-based service and domain-based service, each with its own
      template set per-{realm, service} or per-service

   (the idea is to support issuance of server certificates too, not
    just client/user certs)
 - more complete support for SAN types
 - tests (including that PKINIT->kx509->PKINIT works, which makes it
   possible to have "delegation" of PKIX credentials by just delegating
   Kerberos credentials)
 - document the protocol in lib/krb5/kx509.c

Future work:

 - add option for longer-ticket-lifetime service certs
 - add support for ECDSA, and some day for ed25519 and ed448
 - reuse private key when running kinit
   (this will require rethinking how we trigger optimistic kx509
    usage)
 - HDB lookup for:
    - optional revocation check (not strictly necessary)
    - adding to certificates those SANs listed in HDB
       - hostname aliases (dNSName SANs)
       - rfc822Name (email)
       - XMPP SANs
       - id-pkinit-san (a user could have aliases too)
 - support username wild-card A RRs, ala OSKT/krb5_admin
    i.e., if a host/f.q.d.n principal asks for a certificate for
    some service at some-label.f.q.d.n, then issue it
   (this is not needed at OSKT sites because OSKT already
    supports keying such service principals, which means kx509
    will issue certificates for them, however, it would be nice
    to be able to have this independent of OSKT)
   (a better way to do this would be to integrate more of OSKT
    into Heimdal proper)
 - a kx509 command, or heimtools kx509 subcommand for explicitly
   attempting use of the kx509 protocol (as opposed to implicit, as is
   done in kinit via krb5_cc_store_cred() magic right now)

Issues:

 - optimistically trying kx509 on start realm TGT store -> timeout issues!
    - newer KDCs will return errors because of this commit; older ones
      will not, which causes timouts
    - need a separate timeout setting for kx509 for optimistic case
    - need a [realm] config item and DNS SRV RR lookup for whether a
      realm is expected to support kx509 service
2019-10-08 21:26:50 -05:00
Jeffrey Altman
ec39b832ff kdc: fix kx509 service principal match
Each KDC is a kx509 server.  The service principal must be of the
form

  kca_service/<localhost.domain>@<DEFAULT_REALM>

where localhost.domain is the hostname returned by gethostname()
and <DEFAULT_REALM> is one of the realms for which the KDC has a service
principal "kca_service/<localhost.domain>".

The matching code was broken by a5e77c578e
when krb5_sname_to_principal() began to always return a referral
principal.

Since the second component is a host name update the default principal
type for service "kca_service" to be KRB5_NT_SRV_HST.

Change-Id: I6bd5f90b674ebb7220d8efafa6d339fdc21e1a07
2017-01-27 00:37:08 -05:00
Jeffrey Altman
303c62533f kdc: _kdc_do_kx509 fix use after free error
In _kdc_do_kx509() do not free 'principal' until after its last
use.  Move declaration to top of function and free it during the
common exit processing.

Introduced by 10a5976e45.

Change-Id: Iaf000eb090b0fa523f04a4864c6b17058d922995
2017-01-13 15:00:46 -05:00
Nicolas Williams
2c265a8182 Add option to require initial kca_service tickets
Default to TRUE, and allow setting it on a per-realm basis.
2013-12-05 16:00:21 -06:00
Nicolas Williams
5807540e1b Fix kx509 to include realm 2013-12-05 16:00:21 -06:00
Jeffrey Altman
ad995f9b69 kx509: Prevent double free
Patchset 750a09bca2 introduced the
potential for a double free of 'name'.

Change-Id: I23bd4ddb7d9b41cbb3948ab06245f4052b309971
2013-12-04 14:21:56 -05:00
James Lee
750a09bca2 kx509: Create certs for principals with slashes
kx509 fails to create certs for principals with slashes in them.  For
example:

    client% kinit foo/admin
    foo/admin@EXAMPLE.COM's Password:
    client% kx509
    Timed out waiting on KCA

The KCA reports: "Principal is not a user."  However, there is a use
case set out in this post:

https://thestaticvoid.com/post/2012/10/25/protecting-puppet-with-kerberos/

that would create a kx509 cert for a host principal for authenticating
against a secure HTTP service.  This commit modifies the certificate
creation code to allow principals with slashes in them.
2013-12-04 13:49:38 -05:00
Love Hornquist Astrand
1d84562886 add HDBGET: that only supports get, iteration doesnt really make sense for the HDB keytab except when dumping 2013-10-15 12:40:39 +02:00
Roland C. Dowdeswell
e8779d5d4a Add -Wshadow and deal with the warnings. 2012-02-21 11:17:55 +00:00
Love Hornquist Astrand
0879b9831a remove trailing whitespace 2011-05-21 11:57:31 -07:00
Love Hornquist Astrand
10a5976e45 Log what principal was used in the failure case 2009-12-22 07:36:01 +01:00
Love Hornquist Astrand
af61cd2eb4 Use hx509_context that build from krb5_context 2009-09-29 13:13:32 -07:00
Love Hörnquist Åstrand
8bdfc86327 Use OID variable instead of function.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25250 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-05-28 01:20:37 +00:00
Love Hörnquist Åstrand
6d379afd2a catch extra data
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25225 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-05-25 23:44:08 +00:00
Love Hörnquist Åstrand
2c12867d3e use struct
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24485 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-01-25 20:50:24 +00:00
Love Hörnquist Åstrand
973386c9ca make digest and kx509 optional
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24408 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-01-25 00:39:16 +00:00
Love Hörnquist Åstrand
b27e9cbb2e use krb5_data_alloc to allocate memory
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24085 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-12-11 04:56:35 +00:00
Love Hörnquist Åstrand
6937d41a02 remove trailing whitespace
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23815 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-09-13 09:21:03 +00:00
Love Hörnquist Åstrand
e172367898 switch to utf8 encoding of all files
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23814 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-09-13 08:53:55 +00:00
Love Hörnquist Åstrand
7fcd266fdd use krb5_set_error_message
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23316 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-06-23 04:32:32 +00:00
Love Hörnquist Åstrand
6541305988 Adapt to hx509_env changes.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22686 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-03-14 21:29:37 +00:00
Love Hörnquist Åstrand
9bb34fefc3 Use unsigned char * as argument to MD5_Update to please OpenSSL and gcc.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21607 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-07-17 07:04:52 +00:00
Love Hörnquist Åstrand
09eb1bfcb2 Don't use C99 syntax.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19992 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-20 09:06:18 +00:00
Love Hörnquist Åstrand
70056908b1 Issue certificates.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19909 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-14 23:16:14 +00:00
Love Hörnquist Åstrand
3572041050 Kx509server (external certificate genration).
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19545 ec53bebd-3082-4978-b11e-865c3cabbd6b
2006-12-28 21:03:53 +00:00