diff options
Diffstat (limited to 'doc/hx509.info')
-rw-r--r-- | doc/hx509.info | 617 |
1 files changed, 617 insertions, 0 deletions
diff --git a/doc/hx509.info b/doc/hx509.info new file mode 100644 index 000000000000..385b63a872ed --- /dev/null +++ b/doc/hx509.info @@ -0,0 +1,617 @@ +Detta är hx509.info, skapad av makeinfo version 4.8 från hx509.texi. + +INFO-DIR-SECTION Security +START-INFO-DIR-ENTRY +* hx509: (hx509). The X.509 distribution from KTH +END-INFO-DIR-ENTRY + + +File: hx509.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) + +Heimdal +******* + +This manual is for version 1.5 of hx509. + +* Menu: + +* Introduction:: +* What is X.509 ?:: +* Setting up a CA:: +* CMS signing and encryption:: +* Certificate matching:: +* Software PKCS 11 module:: + + --- The Detailed Node Listing --- + +Setting up a CA + +* Creating a CA certificate:: +* Issuing certificates:: +* Issuing CRLs:: +* Application requirements:: + +CMS signing and encryption + +* CMS background:: + +Certificate matching + +* Matching syntax:: + +Software PKCS 11 module + +* How to use the PKCS11 module:: + + +File: hx509.info, Node: Introduction, Next: What is X.509 ?, Prev: Top, Up: Top + +1 Introduction +************** + +The goals of a PKI infrastructure (as defined in <a +href="http://www.ietf.org/rfc/rfc3280.txt">RFC 3280</a>) is to meet +_the needs of deterministic, automated identification, authentication, +access control, and authorization_. + +The administrator should be aware of certain terminologies as explained +by the aforementioned RFC before attemping to put in place a PKI +infrastructure. Briefly, these are: + + * CA Certificate Authority + + * RA Registration Authority, i.e., an optional system to which a CA + delegates certain management functions. + + * CRL Issuer An optional system to which a CA delegates the + publication of certificate revocation lists. + + * Repository A system or collection of distributed systems that + stores certificates and CRLs and serves as a means of distributing + these certificates and CRLs to end entities + +hx509 (Heimdal x509 support) is a near complete X.509 stack that can +handle CMS messages (crypto system used in S/MIME and Kerberos PK-INIT) +and basic certificate processing tasks, path construction, path +validation, OCSP and CRL validation, PKCS10 message construction, CMS +Encrypted (shared secret encrypted), CMS SignedData (certificate +signed), and CMS EnvelopedData (certificate encrypted). + +hx509 can use PKCS11 tokens, PKCS12 files, PEM files, and/or DER encoded +files. + + +File: hx509.info, Node: What is X.509 ?, Next: Setting up a CA, Prev: Introduction, Up: Top + +2 What is X.509, PKIX, PKCS7 and CMS ? +************************************** + +X.509 was created by CCITT (later ITU) for the X.500 directory service. +Today, X.509 discussions and implementations commonly reference the +IETF's PKIX Certificate and CRL Profile of the X.509 v3 certificate +standard, as specified in RFC 3280. + +ITU continues to develop the X.509 standard together with the IETF in a +rather complicated dance. + +X.509 is a public key based security system that has associated data +stored within a so called certificate. Initially, X.509 was a strict +hierarchical system with one root. However, ever evolving requiments and +technology advancements saw the inclusion of multiple policy roots, +bridges and mesh solutions. + +x.509 can also be used as a peer to peer system, though often seen as a +common scenario. + +2.1 Type of certificates +======================== + +There are several flavors of certificate in X.509. + + * Trust anchors + + Trust anchors are strictly not certificates, but commonly stored + in a certificate format as they become easier to manage. Trust + anchors are the keys that an end entity would trust to validate + other certificates. This is done by building a path from the + certificate you want to validate to to any of the trust anchors + you have. + + * End Entity (EE) certificates + + End entity certificates are the most common types of certificates. + End entity certificates cannot issue (sign) certificate themselves + and are generally used to authenticate and authorize users and + services. + + * Certification Authority (CA) certificates + + Certificate authority certificates have the right to issue + additional certificates (be it sub-ordinate CA certificates to + build an trust anchors or end entity certificates). There is no + limit to how many certificates a CA may issue, but there might + other restrictions, like the maximum path depth. + + * Proxy certificates + + Remember the statement "End Entity certificates cannot issue + certificates"? Well that statement is not entirely true. There is + an extension called proxy certificates defined in RFC3820, that + allows certificates to be issued by end entity certificates. The + service that receives the proxy certificates must have explicitly + turned on support for proxy certificates, so their use is somewhat + limited. + + Proxy certificates can be limited by policies stored in the + certificate to what they can be used for. This allows users to + delegate the proxy certificate to services (by sending over the + certificate and private key) so the service can access services on + behalf of the user. + + One example of this would be a print service. The user wants to + print a large job in the middle of the night when the printer + isn't used that much, so the user creates a proxy certificate with + the policy that it can only be used to access files related to + this print job, creates the print job description and send both + the description and proxy certificate with key over to print + service. Later at night when the print service initializes + (without any user intervention), access to the files for the print + job is granted via the proxy certificate. As a result of (in-place) + policy limitations, the certificate cannot be used for any other + purposes. + + +2.2 Building a path +=================== + +Before validating a certificate path (or chain), the path needs to be +constructed. Given a certificate (EE, CA, Proxy, or any other type), +the path construction algorithm will try to find a path to one of the +trust anchors. + +The process starts by looking at the issuing CA of the certificate, by +Name or Key Identifier, and tries to find that certificate while at the +same time evaluting any policies in-place. + + +File: hx509.info, Node: Setting up a CA, Next: Creating a CA certificate, Prev: What is X.509 ?, Up: Top + +3 Setting up a CA +***************** + +Do not let information overload scare you off! If you are simply testing +or getting started with a PKI infrastructure, skip all this and go to +the next chapter (see: *note Creating a CA certificate::). + +Creating a CA certificate should be more the just creating a +certificate, CA's should define a policy. Again, if you are simply +testing a PKI, policies do not matter so much. However, when it comes to +trust in an organisation, it will probably matter more whom your users +and sysadmins will find it acceptable to trust. + +At the same time, try to keep things simple, it's not very hard to run a +Certificate authority and the process to get new certificates should be +simple. + +You may find it helpful to answer the following policy questions for +your organization at a later stage: + + * How do you trust your CA. + + * What is the CA responsibility. + + * Review of CA activity. + + * How much process should it be to issue certificate. + + * Who is allowed to issue certificates. + + * Who is allowed to requests certificates. + + * How to handle certificate revocation, issuing CRLs and maintain + OCSP services. + + +File: hx509.info, Node: Creating a CA certificate, Next: Issuing certificates, Prev: Setting up a CA, Up: Top + +3.1 Creating a CA certificate +============================= + +This section describes how to create a CA certificate and what to think +about. + +3.1.1 Lifetime CA certificate +----------------------------- + +You probably want to create a CA certificate with a long lifetime, 10 +years at the very minimum. This is because you don't want to push out +the certificate (as a trust anchor) to all you users again when the old +CA certificate expires. Although a trust anchor can't really expire, +not all software works in accordance with published standards. + +Keep in mind the security requirements might be different 10-20 years +into the future. For example, SHA1 is going to be withdrawn in 2010, so +make sure you have enough buffering in your choice of digest/hash +algorithms, signature algorithms and key lengths. + +3.1.2 Create a CA certificate +----------------------------- + +This command below can be used to generate a self-signed CA certificate. + + hxtool issue-certificate \ + --self-signed \ + --issue-ca \ + --generate-key=rsa \ + --subject="CN=CertificateAuthority,DC=test,DC=h5l,DC=se" \ + --lifetime=10years \ + --certificate="FILE:ca.pem" + +3.1.3 Extending the lifetime of a CA certificate +------------------------------------------------ + +You just realised that your CA certificate is going to expire soon and +that you need replace it with a new CA. The easiest way to do that is +to extend the lifetime of your existing CA certificate. + +The example below will extend the CA certificate's lifetime by 10 years. +You should compare this new certificate if it contains all the special +tweaks as the old certificate had. + + hxtool issue-certificate \ + --self-signed \ + --issue-ca \ + --lifetime="10years" \ + --template-certificate="FILE:ca.pem" \ + --template-fields="serialNumber,notBefore,subject,SPKI" \ + --ca-private-key=FILE:ca.pem \ + --certificate="FILE:new-ca.pem" + +3.1.4 Subordinate CA +-------------------- + +This example below creates a new subordinate certificate authority. + + hxtool issue-certificate \ + --ca-certificate=FILE:ca.pem \ + --issue-ca \ + --generate-key=rsa \ + --subject="CN=CertificateAuthority,DC=dev,DC=test,DC=h5l,DC=se" \ + --certificate="FILE:dev-ca.pem" + + +File: hx509.info, Node: Issuing certificates, Next: Issuing CRLs, Prev: Creating a CA certificate, Up: Top + +3.2 Issuing certificates +======================== + +First you'll create a CA certificate, after that you have to deal with +your users and servers and issue certificates to them. + + * Do all the work themself + + Generate the key for the user. This has the problme that the the CA + knows the private key of the user. For a paranoid user this might + leave feeling of disconfort. + + * Have the user do part of the work + + Receive PKCS10 certificate requests fromusers. PKCS10 is a request + for a certificate. The user may specify what DN they want as well + as provide a certificate signing request (CSR). To prove the user + have the key, the whole request is signed by the private key of + the user. + + +3.2.1 Name space management +--------------------------- + +What people might want to see. + +Re-issue certificates just because people moved within the organization. + +Expose privacy information. + +Using Sub-component name (+ notation). + +3.2.2 Certificate Revocation, CRL and OCSP +------------------------------------------ + +Certificates that a CA issues may need to be revoked at some stage. As +an example, an employee leaves the organization and does not bother +handing in his smart card (or even if the smart card is handed back - +the certificate on it must no longer be acceptable to services; the +employee has left). + +You may also want to revoke a certificate for a service which is no +longer being offered on your network. Overlooking these scenarios can +lead to security holes which will quickly become a nightmare to deal +with. + +There are two primary protocols for dealing with certificate +revokation. Namely: + + * Certificate Revocation List (CRL) + + * Online Certificate Status Protocol (OCSP) + +If however the certificate in qeustion has been destroyed, there is no +need to revoke the certificate because it can not be used by someone +else. This matter since for each certificate you add to CRL, the +download time and processing time for clients are longer. + +CRLs and OCSP responders however greatly help manage compatible services +which may authenticate and authorize users (or services) on an on-going +basis. As an example, VPN connectivity established via certificates for +connecting clients would require your VPN software to make use of a CRL +or an OCSP service to ensure revoked certificates belonging to former +clients are not allowed access to (formerly subscribed) network +services. + + +File: hx509.info, Node: Issuing CRLs, Next: Application requirements, Prev: Issuing certificates, Up: Top + +3.3 Issuing CRLs +================ + +Create an empty CRL with no certificates revoked. Default expiration +value is one year from now. + + hxtool crl-sign \ + --crl-file=crl.der \ + --signer=FILE:ca.pem + +Create a CRL with all certificates in the directory +`/path/to/revoked/dir' included in the CRL as revoked. Also make it +expire one month from now. + + hxtool crl-sign \ + --crl-file=crl.der \ + --signer=FILE:ca.pem \ + --lifetime='1 month' \ + DIR:/path/to/revoked/dir + + +File: hx509.info, Node: Application requirements, Next: CMS signing and encryption, Prev: Issuing CRLs, Up: Top + +3.4 Application requirements +============================ + +Application place different requirements on certificates. This section +tries to expand what they are and how to use hxtool to generate +certificates for those services. + +3.4.1 HTTPS - server +-------------------- + + hxtool issue-certificate \ + --subject="CN=www.test.h5l.se,DC=test,DC=h5l,DC=se" \ + --type="https-server" \ + --hostname="www.test.h5l.se" \ + --hostname="www2.test.h5l.se" \ + ... + +3.4.2 HTTPS - client +-------------------- + + hxtool issue-certificate \ + --subject="UID=testus,DC=test,DC=h5l,DC=se" \ + --type="https-client" \ + ... + +3.4.3 S/MIME - email +-------------------- + +There are two things that should be set in S/MIME certificates, one or +more email addresses and an extended eku usage (EKU), emailProtection. + +The email address format used in S/MIME certificates is defined in +RFC2822, section 3.4.1 and it should be an "addr-spec". + +There are two ways to specifify email address in certificates. The old +way is in the subject distinguished name, _this should not be used_. The +new way is using a Subject Alternative Name (SAN). + +Even though the email address is stored in certificates, they don't need +to be, email reader programs are required to accept certificates that +doesn't have either of the two methods of storing email in certificates +- in which case, the email client will try to protect the user by +printing the name of the certificate instead. + +S/MIME certificate can be used in another special way. They can be +issued with a NULL subject distinguished name plus the email in SAN, +this is a valid certificate. This is used when you wont want to share +more information then you need to. + +hx509 issue-certificate supports adding the email SAN to certificate by +using the -email option, -email also gives an implicit emailProtection +eku. If you want to create an certificate without an email address, the +option -type=email will add the emailProtection EKU. + + hxtool issue-certificate \ + --subject="UID=testus-email,DC=test,DC=h5l,DC=se" \ + --type=email \ + --email="testus@test.h5l.se" \ + ... + +An example of an certificate without and subject distinguished name with +an email address in a SAN. + + hxtool issue-certificate \ + --subject="" \ + --type=email \ + --email="testus@test.h5l.se" \ + ... + +3.4.4 PK-INIT +------------- + +A PK-INIT infrastructure allows users and services to pick up kerberos +credentials (tickets) based on their certificate. This, for example, +allows users to authenticate to their desktops using smartcards while +acquiring kerberos tickets in the process. + +As an example, an office network which offers centrally controlled +desktop logins, mail, messaging (xmpp) and openafs would give users +single sign-on facilities via smartcard based logins. Once the kerberos +ticket has been acquired, all kerberized services would immediately +become accessible based on deployed security policies. + +Let's go over the process of initializing a demo PK-INIT framework: + + hxtool issue-certificate \ + --type="pkinit-kdc" \ + --pk-init-principal="krbtgt/TEST.H5L.SE@TEST.H5L.SE" \ + --hostname=kerberos.test.h5l.se \ + --ca-certificate="FILE:ca.pem,ca.key" \ + --generate-key=rsa \ + --certificate="FILE:kdc.pem" \ + --subject="cn=kdc" + +How to create a certificate for a user. + + hxtool issue-certificate \ + --type="pkinit-client" \ + --pk-init-principal="user@TEST.H5L.SE" \ + --ca-certificate="FILE:ca.pem,ca.key" \ + --generate-key=rsa \ + --subject="cn=Test User" \ + --certificate="FILE:user.pem" + +The -type field can be specified multiple times. The same certificate +can hence house extensions for both pkinit-client as well as S/MIME. + +To use the PKCS11 module, please see the section: *note How to use the +PKCS11 module::. + +More about how to configure the KDC, see the documentation in the +Heimdal manual to set up the KDC. + +3.4.5 XMPP/Jabber +----------------- + +The jabber server certificate should have a dNSname that is the same as +the user entered into the application, not the same as the host name of +the machine. + + hxtool issue-certificate \ + --subject="CN=xmpp1.test.h5l.se,DC=test,DC=h5l,DC=se" \ + --hostname="xmpp1.test.h5l.se" \ + --hostname="test.h5l.se" \ + ... + +The certificate may also contain a jabber identifier (JID) that, if the +receiver allows it, authorises the server or client to use that JID. + +When storing a JID inside the certificate, both for server and client, +it's stored inside a UTF8String within an otherName entity inside the +subjectAltName, using the OID id-on-xmppAddr (1.3.6.1.5.5.7.8.5). + +To read more about the requirements, see RFC3920, Extensible Messaging +and Presence Protocol (XMPP): Core. + +hxtool issue-certificate have support to add jid to the certificate +using the option `--jid'. + + hxtool issue-certificate \ + --subject="CN=Love,DC=test,DC=h5l,DC=se" \ + --jid="lha@test.h5l.se" \ + ... + + +File: hx509.info, Node: CMS signing and encryption, Next: CMS background, Prev: Application requirements, Up: Top + +4 CMS signing and encryption +**************************** + +CMS is the Cryptographic Message System that among other, is used by +S/MIME (secure email) and Kerberos PK-INIT. It's an extended version of +the RSA, Inc standard PKCS7. + + +File: hx509.info, Node: CMS background, Next: Certificate matching, Prev: CMS signing and encryption, Up: Top + +4.1 CMS background +================== + + +File: hx509.info, Node: Certificate matching, Next: Matching syntax, Prev: CMS background, Up: Top + +5 Certificate matching +********************** + +To match certificates hx509 have a special query language to match +certifictes in queries and ACLs. + + +File: hx509.info, Node: Matching syntax, Next: Software PKCS 11 module, Prev: Certificate matching, Up: Top + +5.1 Matching syntax +=================== + +This is the language definitions somewhat slopply descriped: + + + expr = TRUE, + FALSE, + ! expr, + expr AND expr, + expr OR expr, + ( expr ) + compare + + compare = + word == word, + word != word, + word IN ( word [, word ...]) + word IN %{variable.subvariable} + + word = + STRING, + %{variable} + + +File: hx509.info, Node: Software PKCS 11 module, Next: How to use the PKCS11 module, Prev: Matching syntax, Up: Top + +6 Software PKCS 11 module +************************* + +PKCS11 is a standard created by RSA, Inc to support hardware and +software encryption modules. It can be used by smartcard to expose the +crypto primitives inside without exposing the crypto keys. + +Hx509 includes a software implementation of PKCS11 that runs within the +memory space of the process and thus exposes the keys to the +application. + + +File: hx509.info, Node: How to use the PKCS11 module, Prev: Software PKCS 11 module, Up: Top + +6.1 How to use the PKCS11 module +================================ + + $ cat > ~/.soft-pkcs11.rc <<EOF + mycert cert User certificate FILE:/Users/lha/Private/pkinit.pem + app-fatal true + EOF + $ kinit -C PKCS11:/usr/heimdal/lib/hx509.so lha@EXAMPLE.ORG + + + +Tag Table: +Node: Top203 +Node: Introduction797 +Node: What is X.509 ?2246 +Node: Setting up a CA6204 +Node: Creating a CA certificate7474 +Node: Issuing certificates9915 +Node: Issuing CRLs12458 +Node: Application requirements13085 +Node: CMS signing and encryption18446 +Node: CMS background18797 +Node: Certificate matching18953 +Node: Matching syntax19207 +Node: Software PKCS 11 module19764 +Node: How to use the PKCS11 module20283 + +End Tag Table |