Commit Graph

62 Commits

Author SHA1 Message Date
Nicolas Williams
4f0249cd94 hx509/kdc: Move KDC CA utility function into hx509
This is part of the program to move REST services like bx509d out of
kdc/.
2020-09-08 00:25:24 -05:00
Nicolas Williams
a7a1d798c3 hx509: keep track of authorized CSR features
This commit adds a few functions for marking KU, EKUs, and SANs as
authorized, and for getting a count of unsupported certificate
extensions requested, and a count of authorized KU/EKUs/SANs.

The intent is to make it easier to build CSR authorization and CA code
that is robust in the face of future support for certificate extensions
and SAN types not currently supported.  An application could parse a
CSR, iterate all KU/EKUs/SANs, check a subject's authorization to them,
mark them authorized where authorized, then check if there are any
remaining unauthorized extensions or unsupported extensions requested.

Ultimately, if a CSR's KU/EKUs/SANs are all authorized, then they can
all be copied to a TBS, and a certificate can be issued.
2019-12-04 21:34:37 -06:00
Nicolas Williams
fce3f16859 hx509: Add hx509_ca_tbs_get_name()
This is so we can check if a TBS gets an empty subject name, then refuse
to issue the certificate if it doesn't also have at least one SAN.
2019-11-06 19:51:21 -06:00
Nicolas Williams
8af2d79d35 hx509: Add missing CSR extension request support
This is necessary in order to add proper support for CSRs in kx509,
where the KDC can examine all requested KUs/EKUs/SANs, check
authorization, and issue a certificate with all those extensions if
authorized.

This is the convention used by OpenSSL, of encoding all the KU, EKUs,
and SANs being requested as Extensions as they would appear in the
TBSCertificate, then putting those in as a single Attribute in the CSR's
Attributes list with attribute OID {id-pkcs-9, 14}.

 - expose all hx509_request_*() functions
 - finish support in hx509_request_parse*() for KU, EKU, and SAN CSR
   attributes
 - finish support in hx509_request_to_pkcs10() for encoding all
   requested KU, EKU, and SAN extensions as a CSR extReq (extension request)
 - add hx509_request_add_*() support for:
    - id-pkinit-san and ms-upn-pkinit-san
    - XMPP (Jabber) SAN
    - registeredID (useless but trivial)
 - add hxtool request-create options for all supported SANs
 - add hxtool request-create options for KeyUsage
 - add hxtool request-create options for ExtKeyUsage
 - add hxtool request-print support for all these things
 - fix bugs in existing id-pkinit-san handling

Possible future improvements

 - add HX509_TRACE env var and support (it would be nice to be able to
   observe why some certificate is rejected, or not matched in a query)
 - add testing that CSR creating and printing round-trip for all KUs,
   EKUs, and SANs
   (probably in tests/kdc/check-pkinit.in)
 - add testing that OpenSSL can print a CSR made by hxtool and
   vice-versa
 - hxtool ca: add KU sanity checking (via hx509_ca_sign() and/or friends)
   (don't allow encrypt for signing-only algs)
   (don't allow encrypt for RSA at all, or for RSA with small e exponents)
 - hxtool request-print: warn about all unknown attributes and
   extensions
 - hxtool ca: MAYBE add support for adding requested extensions from the
   --req=CSR
   ("Maybe" because CA operators should really verify and authorize all
    requested attributes, and should acknowledge that they have, and the
    simplest way to do this is to make them add all the corresponding
    CLI arguments to the hxtool ca command, but too, that is
    error-prone, thus it's not clear yet which approach is best.
    Perhaps interactively prompt for yes/no for each attribute.)
 - add additional SAN types:
    - iPAddress                 (useless?)
    - dNSSrv                    (useful!)
    - directoryName             (useless, but trivial)
    - uniformResourceIdentifier (useful)
 - it would be nice if the ASN.1 compiler could generate print
   functions..., and/or even better, to-JSON functions
 - it would be nice if we had a known-OID db, including the names of the
   types they refer to in certificate extensions, otherName SANs and CSR
   attributes, then we could generate a CSR and certificate printer for
   all known options even when they are not supported by the rest of
   Heimdal
    - and we could also get friendly names for OIDs, and we could
      resolve their arc names
    - longer term, we could also stand to add some ASN.1 information
      object system functionality, just enough to make
      lib/hx509/asn1_print awesome by being able to automatically decode
      all heim_any and OCTET STRING content (better than its current
      --inner option)
2019-10-08 22:20:40 -05:00
Nicolas Williams
25dbe28291 hx509: SANs are critical if DN is empty 2019-10-07 21:32:00 -05:00
Nicolas Williams
049d817c66 Fix hx509_ca_tbs_free() segfault 2019-10-03 13:09:18 -05:00
Nicolas Williams
859c587dc2 Add more hxtool EKU options, and KeyUsage too
This is necessary in order to have more control over, e.g., template
certificates for kx509.  But also it's good to have this more generally.

Some batteries not included.  Specifically: no attempt is made to validate that
given KeyUsage values are compatible with the subjectPublicKey's alrogithm and
parameters.
2019-10-03 13:09:18 -05:00
Jeffrey Altman
1dd38cc3de lib/hx509: declare and apply HX509_LIB_xxx macros
libhx509 is not built according to the same export and calling conventions
on Windows as the other libraries.  This change declares and applies
HX509_LIB_FUNCTION, HX509_LIB_NORETURN_FUNCTION, HX509_LIB_CALL and
HX509_LIB_VARIABLE to lib/hx509.

As a result of this change the calling convention for exported functions
will be __stdcall instead of __cdecl.

Change-Id: Ibc3f05e8088030ef7d13798f1d9c9b190bc57797
2019-01-02 10:23:39 -06:00
Viktor Dukhovni
745eeb1252 Ensure DER form of hxtool ca random serial numbers 2015-03-05 03:57:30 -05:00
Viktor Dukhovni
b7ca6bbc7a Revert "make sure that serial number is valid DER when done ..."
A simpler fix will be the next commit.

This reverts commit 35add96d37.
2015-03-05 03:56:04 -05:00
Love Hörnquist Åstrand
35add96d37 make sure that serial number is valid DER when done (found by Viktor Dukhovni) 2015-03-05 00:26:03 -08:00
Jelmer Vernooij
70e43e9808 Fix some typos. 2014-04-25 02:42:17 +02:00
Love Hörnquist Åstrand
c69c4634ad allow setting signature algorithm 2014-02-12 09:46:02 -08:00
Love Hornquist Astrand
029de6cfa4 pass back an heim_error from hx509_cert_init 2012-10-07 06:33:13 -07:00
Roland C. Dowdeswell
cc47c8fa7b Turn on -Wextra -Wno-sign-compare -Wno-unused-paramter and fix issues.
We turn on a few extra warnings and fix the fallout that occurs
when building with --enable-developer.  Note that we get different
warnings on different machines and so this will be a work in
progress.  So far, we have built on NetBSD/amd64 5.99.64 (which
uses gcc 4.5.3) and Ubuntu 10.04.3 LTS (which uses gcc 4.4.3).

Notably, we fixed

	1.  a lot of missing structure initialisers,

	2.  unchecked return values for functions that glibc
	    marks as __attribute__((warn-unused-result)),

	3.  made minor modifications to slc and asn1_compile
	    which can generate code which generates warnings,
	    and

	4.  a few stragglers here and there.

We turned off the extended warnings for many programs in appl/ as
they are nearing the end of their useful lifetime, e.g.  rsh, rcp,
popper, ftp and telnet.

Interestingly, glibc's strncmp() macro needed to be worked around
whereas the function calls did not.

We have not yet tried this on 32 bit platforms, so there will be
a few more warnings when we do.
2012-02-20 19:45:41 +00:00
Love Hornquist Astrand
0879b9831a remove trailing whitespace 2011-05-21 11:57:31 -07:00
Love Hornquist Astrand
f5f9014c90 Warning fixes from Christos Zoulas
- shadowed variables
- signed/unsigned confusion
- const lossage
- incomplete structure initializations
- unused code
2011-04-29 20:25:05 -07:00
Love Hornquist Astrand
3e84bcb25a make setting issuerUniqueID and subjectUniqueID independant 2010-08-10 09:22:35 -07:00
Love Hornquist Astrand
56f4eb92cb Allow setting the issuerUniqueID and subjectUniqueID 2010-08-10 08:01:24 -07:00
Love Hornquist Astrand
fa4c84e6d6 make printablestring and ia5string octetstrings 2010-08-08 15:51:33 -07:00
Love Hornquist Astrand
03cb3aa56b use EVP_MD_CTX_create 2009-08-20 17:13:09 -07:00
Love Hornquist Astrand
a1f6faed25 switch to use EVP interface instead of old MDX_ style interface 2009-08-17 10:23:01 +02:00
Love Hörnquist Åstrand
becda09568 Use OID variable instead of function.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25242 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-05-28 01:19:03 +00:00
Love Hörnquist Åstrand
0da1e21fdb use right variable
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@25190 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-05-06 19:03:24 +00:00
Love Hörnquist Åstrand
ff5dab4f4a remove rcsid
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24795 ec53bebd-3082-4978-b11e-865c3cabbd6b
2009-02-22 23:28:18 +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
319e7f1d57 BasicConstraints.pathLenConstraint unsigned int.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22995 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-04-15 19:31:29 +00:00
Love Hörnquist Åstrand
c6748a850d adapt to new hx509_cert_get_SPKI
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22456 ec53bebd-3082-4978-b11e-865c3cabbd6b
2008-01-15 20:22:53 +00:00
Love Hörnquist Åstrand
3e6be6e745 doxygen.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22340 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-12-26 17:22:07 +00:00
Love Hörnquist Åstrand
2d1a4b07e6 doxygen
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@22335 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-12-17 06:57:48 +00:00
Love Hörnquist Åstrand
615e4e9fc4 Rename proxyCertInfo oid.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@21379 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-06-28 07:38:17 +00:00
Love Hörnquist Åstrand
6ab9862950 Add cRLSign to CA certs.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20904 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-06-05 01:58:45 +00:00
Love Hörnquist Åstrand
9c322b0357 Reset name before parsing it.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20885 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-06-04 21:13:14 +00:00
Love Hörnquist Åstrand
949dfd44f0 Use default AlgorithmIdentifier.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20792 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-06-02 02:31:18 +00:00
Love Hörnquist Åstrand
9bfadd6bbb (hx509_ca_tbs_add_crl_dp_uri): plug memory leak
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20769 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-06-01 11:33:48 +00:00
Love Hörnquist Åstrand
26d6112116 Add glue for adding CRL dps.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20731 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-05-31 15:32:30 +00:00
Love Hörnquist Åstrand
db080434b8 Add hx509_ca_tbs_add_san_ms_upn and refactor code.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20720 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-05-31 02:43:58 +00:00
Love Hörnquist Åstrand
659e8dd094 Add hx509_ca_tbs_set_domaincontroller.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20712 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-05-30 23:02:53 +00:00
Love Hörnquist Åstrand
9f58a01b0f (get_AuthorityKeyIdentifier): leak less memory
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20400 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-04-18 14:06:28 +00:00
Love Hörnquist Åstrand
adc1d7286e Disable CRLDistributionPoints for now, its IMPLICIT code in the asn1 parser.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20189 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-02-05 12:17:18 +00:00
Love Hörnquist Åstrand
4156103f1a Code to set CRLDistributionPoints in certificates.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20102 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-31 15:37:05 +00:00
Love Hörnquist Åstrand
5820ca3c54 switch to sha256 as default digest for signinging
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@20017 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-20 23:58:14 +00:00
Love Hörnquist Åstrand
9a40fcaf39 (hx509_ca_tbs_subject_expand): new function.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19905 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-14 22:20:17 +00:00
Love Hörnquist Åstrand
aed12a2d7c Add certificate template processing. Fix return messages from
hx509_ca_tbs_add_eku.


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19894 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-14 18:15:26 +00:00
Love Hörnquist Åstrand
e3460e2055 update (c)
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19890 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-13 12:41:11 +00:00
Love Hörnquist Åstrand
ab5ec24f71 (hx509_ca_tbs_add_eku): filter out dups
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19887 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-13 12:29:06 +00:00
Love Hörnquist Åstrand
63d4fbb416 Don't issue certs with subject DN that is NULL and have no SANs
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19876 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-12 22:46:52 +00:00
Love Hörnquist Åstrand
68f12e3ffb (hx509_ca_tbs_add_san_jid): Allow adding id-pkix-on-xmppAddr OtherName.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19861 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-12 08:44:18 +00:00
Love Hörnquist Åstrand
72a7e4b1cb Make basicConstraints critical if this is a CA.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19819 ec53bebd-3082-4978-b11e-865c3cabbd6b
2007-01-10 22:07:07 +00:00