1\input texinfo @c -*- texinfo -*-
2@c %**start of header
3@c $Id: hx509.texi 22071 2007-11-14 20:04:50Z lha $
4@setfilename hx509.info
5@settitle HX509
6@iftex
7@afourpaper
8@end iftex
9@c some sensible characters, please?
10@tex
11\input latin1.tex
12@end tex
13@setchapternewpage on
14@syncodeindex pg cp
15@c %**end of header
16
17@set UPDATED $Date: 2007-11-14 12:04:50 -0800 (Ons, 14 Nov 2007) $
18@set VERSION 1.0
19@set EDITION 1.0
20
21@ifinfo
22@dircategory Security
23@direntry
24* hx509: (hx509).           The X.509 distribution from KTH
25@end direntry
26@end ifinfo
27
28@c title page
29@titlepage
30@title HX509
31@subtitle X.509 distribution from KTH
32@subtitle Edition @value{EDITION}, for version @value{VERSION}
33@subtitle 2007
34@author Love H�rnquist �strand
35@author last updated @value{UPDATED}
36
37@def@copynext{@vskip 20pt plus 1fil@penalty-1000}
38@def@copyrightstart{}
39@def@copyrightend{}
40@page
41@copyrightstart
42Copyright (c) 1994-2007 Kungliga Tekniska H�gskolan
43(Royal Institute of Technology, Stockholm, Sweden).
44All rights reserved.
45
46Redistribution and use in source and binary forms, with or without
47modification, are permitted provided that the following conditions
48are met:
49
501. Redistributions of source code must retain the above copyright
51   notice, this list of conditions and the following disclaimer.
52
532. Redistributions in binary form must reproduce the above copyright
54   notice, this list of conditions and the following disclaimer in the
55   documentation and/or other materials provided with the distribution.
56
573. Neither the name of the Institute nor the names of its contributors
58   may be used to endorse or promote products derived from this software
59   without specific prior written permission.
60
61THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
62ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
63IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
64ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
65FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
66DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
67OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
68HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
69LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
70OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
71SUCH DAMAGE.
72
73@copynext
74
75Copyright (C) 1990 by the Massachusetts Institute of Technology
76
77Export of this software from the United States of America may
78require a specific license from the United States Government.
79It is the responsibility of any person or organization contemplating
80export to obtain such a license before exporting.
81
82WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
83distribute this software and its documentation for any purpose and
84without fee is hereby granted, provided that the above copyright
85notice appear in all copies and that both that copyright notice and
86this permission notice appear in supporting documentation, and that
87the name of M.I.T. not be used in advertising or publicity pertaining
88to distribution of the software without specific, written prior
89permission.  M.I.T. makes no representations about the suitability of
90this software for any purpose.  It is provided "as is" without express
91or implied warranty.
92
93@copynext
94
95Copyright (c) 1988, 1990, 1993
96     The Regents of the University of California.  All rights reserved.
97
98Redistribution and use in source and binary forms, with or without
99modification, are permitted provided that the following conditions
100are met:
101
1021. Redistributions of source code must retain the above copyright
103   notice, this list of conditions and the following disclaimer.
104
1052. Redistributions in binary form must reproduce the above copyright
106   notice, this list of conditions and the following disclaimer in the
107   documentation and/or other materials provided with the distribution.
108
1093. Neither the name of the University nor the names of its contributors
110   may be used to endorse or promote products derived from this software
111   without specific prior written permission.
112
113THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
114ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
115IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
116ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
117FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
118DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
119OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
120HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
121LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
122OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
123SUCH DAMAGE.
124
125@copynext
126
127Copyright 1992 Simmule Turner and Rich Salz.  All rights reserved.
128
129This software is not subject to any license of the American Telephone
130and Telegraph Company or of the Regents of the University of California.
131
132Permission is granted to anyone to use this software for any purpose on
133any computer system, and to alter it and redistribute it freely, subject
134to the following restrictions:
135
1361. The authors are not responsible for the consequences of use of this
137   software, no matter how awful, even if they arise from flaws in it.
138
1392. The origin of this software must not be misrepresented, either by
140   explicit claim or by omission.  Since few users ever read sources,
141   credits must appear in the documentation.
142
1433. Altered versions must be plainly marked as such, and must not be
144   misrepresented as being the original software.  Since few users
145   ever read sources, credits must appear in the documentation.
146
1474. This notice may not be removed or altered.
148
149@copynext
150
151IMath is Copyright 2002-2005 Michael J. Fromberger
152You may use it subject to the following Licensing Terms:
153
154Permission is hereby granted, free of charge, to any person obtaining
155a copy of this software and associated documentation files (the
156"Software"), to deal in the Software without restriction, including
157without limitation the rights to use, copy, modify, merge, publish,
158distribute, sublicense, and/or sell copies of the Software, and to
159permit persons to whom the Software is furnished to do so, subject to
160the following conditions:
161
162The above copyright notice and this permission notice shall be
163included in all copies or substantial portions of the Software.
164
165THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
166EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
167MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
168IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
169CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
170TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
171SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
172
173@copyrightend
174@end titlepage
175
176@macro manpage{man, section}
177@cite{\man\(\section\)}
178@end macro
179
180@c Less filling! Tastes great!
181@iftex
182@parindent=0pt
183@global@parskip 6pt plus 1pt
184@global@chapheadingskip = 15pt plus 4pt minus 2pt
185@global@secheadingskip = 12pt plus 3pt minus 2pt
186@global@subsecheadingskip = 9pt plus 2pt minus 2pt
187@end iftex
188@ifinfo
189@paragraphindent 0
190@end ifinfo
191
192@ifnottex
193@node Top, Introduction, (dir), (dir)
194@top Heimdal
195@end ifnottex
196
197This manual is last updated @value{UPDATED} for version
198@value{VERSION} of hx509.
199
200@menu
201* Introduction::
202* What is X.509 ?::
203* Setting up a CA::
204* CMS signing and encryption::
205
206@detailmenu
207 --- The Detailed Node Listing ---
208
209Setting up a CA
210
211@c * Issuing certificates::
212* Creating a CA certificate::
213* Issuing certificates::
214* Issuing CRLs::
215@c * Issuing a proxy certificate::
216@c * Creating a user certificate::
217@c * Validating a certificate::
218@c * Validating a certificate path::
219* Application requirements::
220
221CMS signing and encryption
222
223* CMS background::
224
225@end detailmenu
226@end menu
227
228@node Introduction, What is X.509 ?, Top, Top
229@chapter Introduction
230
231hx509 is a somewhat complete X.509 stack that can handle CMS messages
232(crypto system used in S/MIME and Kerberos PK-INIT) and basic
233certificate processing tasks, path construction, path validation, OCSP
234and CRL validation, PKCS10 message construction, CMS Encrypted (shared
235secret encrypted), CMS SignedData (certificate signed), and CMS
236EnvelopedData (certificate encrypted).
237
238hx509 can use PKCS11 tokens, PKCS12 files, PEM files, DER encoded files.
239
240@node What is X.509 ?, Setting up a CA, Introduction, Top
241@chapter What is X.509, PKIX, PKCS7 and CMS ? 
242
243X.509 is from the beginning created by CCITT (later ITU) for the X.500
244directory service. But today when people are talking about X.509 they
245are commonly referring to IETF's PKIX Certificate and CRL Profile of the
246X.509 v3 certificate standard, as specified in RFC 3280.
247
248ITU continues to develop the X.509 standard together in a complicated
249dance with IETF.
250
251X.509 is public key based security system that have associated data
252stored within a so called certificate. From the beginning X.509 was a
253strict hierarchical system with one root. This didn't not work so over
254time X.509 got support for multiple policy roots, bridges, and mesh
255solutions. You can even use it as a peer to peer system, but this is not
256very common.
257
258@section Type of certificates
259
260There are several flavors of certificate in X.509.
261
262@itemize @bullet
263
264@item Trust anchors
265
266Trust anchors are strictly not certificate, but commonly stored in
267certificate since they are easier to handle then. Trust anchor are the
268keys that you trust to validate other certificate. This is done by
269building a path from the certificate you wan to validate to to any of
270the trust anchors you have.
271
272@item End Entity (EE) certificates
273
274End entity certificates is the most common type of certificate. End
275entity certificates can't issue certificate them-self and is used to
276authenticate and authorize user and services.
277
278@item Certification Authority (CA) certificates
279
280Certificate authority are certificates that have the right to issue
281other certificate, they may be End entity certificates or Certificate
282Authority certificates. There is no limit to how many certificates a CA
283may issue, but there might other restrictions, like the maximum path
284depth.
285
286@item Proxy certificates
287
288Remember that End Entity can't issue certificates by them own, it's not
289really true. There there is an extension called proxy certificates,
290defined in RFC3820, that allows certificates to be issued by end entity
291certificates. The service that receives the proxy certificates must have
292explicitly turned on support for proxy certificates, so their use is
293somewhat limited.
294
295Proxy certificates can be limited by policy stored in the certificate to
296what they can be used for. This allows users to delegate the proxy
297certificate to services (by sending over the certificate and private
298key) so the service can access services on behalf of the user.
299
300One example of this would be a print service. The user wants to print a
301large job in the middle of the night when the printer isn't used that
302much, so the user creates a proxy certificate with the policy that it
303can only be used to access files related to this print job, creates the
304print job description and send both the description and proxy
305certificate with key over to print service. Later at night will the
306print service, without the help of the user, access the files for the
307the print job using the proxy certificate and print the job. Because of
308the policy (limitation) in the proxy certificate, it can't be used for
309any other purposes.
310
311@end itemize
312
313@section Building a path
314
315Before validating a path the path must be constructed. Given a
316certificate (EE, CA, Proxy, or any other type), the path construction
317algorithm will try to find a path to one of the trust anchors.
318
319It start with looking at whom issued the certificate, by name or Key
320Identifier, and tries to find that certificate while at the same time
321evaluates the policy.
322
323@node Setting up a CA, Creating a CA certificate, What is X.509 ?, Top
324@chapter Setting up a CA
325
326Do not let this chapter scare you off, it's just to give you an idea how
327to complicated setting up a CA can be. If you are just playing around,
328skip all this and go to the next chapter, @pxref{Creating a CA
329certificate}.
330
331Creating a CA certificate should be more the just creating a
332certificate, there is the policy of the CA. If it's just you and your
333friend that is playing around then it probably doesn't matter what the
334policy is. But then it comes to trust in an organisation, it will
335probably matter more whom your users and sysadmins will find it
336acceptable to trust.
337
338At the same time, try to keep thing simple, it's not very hard to run a
339Certificate authority and the process to get new certificates should
340simple.
341
342Fill all this in later.
343
344How do you trust your CA.
345
346What is the CA responsibility.
347
348Review of CA activity.
349
350How much process should it be to issue certificate.
351
352Who is allowed to issue certificates.
353
354Who is allowed to requests certificates.
355
356How to handle certificate revocation, issuing CRLs and maintain OCSP
357services.
358
359@node Creating a CA certificate, Issuing certificates, Setting up a CA, Top
360@section Creating a CA certificate
361
362This section describes how to create a CA certificate and what to think
363about.
364
365@subsection Lifetime CA certificate
366
367You probably want to create a CA certificate with a long lifetime, 10
368years at the shortest. This because you don't want to push out the
369certificate (as a trust anchor) to all you users once again when the old
370one just expired. A trust anchor can't really expire, but not all
371software works that way.
372
373Keep in mind the security requirements might be different 10-20 years
374into the future. For example, SHA1 is going to be withdrawn in 2010, so
375make sure you have enough buffering in your choice of digest/hash
376algorithms, signature algorithms and key lengths.
377
378@subsection Create a CA certificate
379
380This command below will create a CA certificate in the file ca.pem.
381
382@example
383hxtool issue-certificate \
384    --self-signed \
385    --issue-ca \
386    --generate-key=rsa \
387    --subject="CN=CertificateAuthority,DC=test,DC=h5l,DC=se" \
388    --lifetime=10years \
389    --certificate="FILE:ca.pem"
390@end example
391
392@subsection Extending lifetime of a CA certificate
393
394You just realised that your CA certificate is going to expire soon and
395that you need replace it with something else, the easiest way to do that
396is to extend the lifetime of your CA certificate.
397
398The example below will extend the CA certificate 10 years into the
399future. You should compare this new certificate if it contains all the
400special tweaks as the old certificate had.
401
402@example
403hxtool issue-certificate \
404    --self-signed \
405    --issue-ca \
406    --lifetime="10years" \
407    --template-certificate="FILE:ca.pem" \
408    --template-fields="serialNumber,notBefore,subject,SPKI" \
409    --ca-private-key=FILE:ca.pem \
410    --certificate="FILE:new-ca.pem"
411@end example
412
413@subsection Subordinate CA
414
415This example create a new subordinate certificate authority.
416
417@example
418hxtool issue-certificate \
419    --ca-certificate=FILE:ca.pem \
420    --issue-ca \
421    --generate-key=rsa \
422    --subject="CN=CertificateAuthority,DC=dev,DC=test,DC=h5l,DC=se" \
423    --certificate="FILE:dev-ca.pem"
424@end example
425
426
427@node Issuing certificates, Issuing CRLs, Creating a CA certificate, Top
428@section Issuing certificates
429
430First you'll create a CA certificate, after that you have to deal with
431your users and servers and issue certificate to them.
432
433CA can generate the key for the user.
434
435Can receive PKCS10 certificate requests from the users. PKCS10 is a
436request for a certificate. The user can specified what DN the user wants
437and what public key. To prove the user have the key, the whole request
438is signed by the private key of the user.
439
440@subsection Name space management
441
442What people might want to see.
443
444Re-issue certificates just because people moved within the organization.
445
446Expose privacy information.
447
448Using Sub-component name (+ notation).
449
450@subsection Certificate Revocation, CRL and OCSP
451
452Sonetimes people loose smartcard or computers and certificates have to
453be make not valid any more, this is called revoking certificates. There
454are two main protocols for doing this Certificate Revocations Lists
455(CRL) and Online Certificate Status Protocol (OCSP).
456
457If you know that the certificate is destroyed then there is no need to
458revoke the certificate because it can not be used by someone else.
459
460The main reason you as a CA administrator have to deal with CRLs however
461will be that some software require there to be CRLs. Example of this is
462Windows, so you have to deal with this somehow.
463
464@node Issuing CRLs, Application requirements, Issuing certificates, Top
465@section Issuing CRLs
466
467Create an empty CRL with not certificates revoked. Default expiration
468value is one year from now.
469
470@example
471hxtool crl-sign \
472	--crl-file=crl.der \
473	--signer=FILE:ca.pem
474@end example
475
476Create a CRL with all certificates in the directory
477@file{/path/to/revoked/dir} included in the CRL as revoked.  Also make
478it expire one month from now.
479
480@example
481hxtool crl-sign \
482	--crl-file=crl.der \
483        --signer=FILE:ca.pem \
484	--lifetime='1 month' \
485        DIR:/path/to/revoked/dir
486@end example
487
488@node Application requirements, CMS signing and encryption, Issuing CRLs, Top
489@section Application requirements
490
491Application have different requirements on certificates. This section
492tries to expand what they are and how to use hxtool to generate
493certificates for those services.
494
495@subsection HTTPS - server
496
497@example
498hxtool issue-certificate \
499	  --subject="CN=www.test.h5l.se,DC=test,DC=h5l,DC=se" \
500	  --type="https-server" \
501          --hostname="www.test.h5l.se" \
502          --hostname="www2.test.h5l.se" \
503          ...
504@end example
505
506@subsection HTTPS - client
507
508@example
509hxtool issue-certificate \
510	  --subject="UID=testus,DC=test,DC=h5l,DC=se" \
511	  --type="https-client" \
512          ...
513@end example
514
515@subsection S/MIME - email
516
517There are two things that should be set in S/MIME certificates, one or
518more email addresses and an extended eku usage (EKU), emailProtection.
519
520The email address format used in S/MIME certificates is defined in
521RFC2822, section 3.4.1 and it should be an ``addr-spec''.
522
523There are two ways to specifify email address in certificates. The old
524ways is in the subject distinguished name, this should not be used. The
525new way is using a Subject Alternative Name (SAN).
526
527But even though email address is stored in certificates, they don't need
528to, email reader programs are required to accept certificates that
529doesn't have either of the two methods of storing email in certificates.
530In that case, they try to protect the user by printing the name of the
531certificate instead.
532
533S/MIME certificate can be used in another special way. They can be
534issued with a NULL subject distinguished name plus the email in SAN,
535this is a valid certificate. This is used when you wont want to share
536more information then you need to.
537
538hx509 issue-certificate supports adding the email SAN to certificate by
539using the --email option, --email also gives an implicit emailProtection
540eku. If you want to create an certificate without an email address, the
541option --type=email will add the emailProtection EKU.
542
543@example
544hxtool issue-certificate \
545	  --subject="UID=testus-email,DC=test,DC=h5l,DC=se" \
546	  --type=email \
547	  --email="testus@@test.h5l.se" \
548          ...
549@end example
550
551An example of an certificate without and subject distinguished name with
552an email address in a SAN.
553
554@example
555hxtool issue-certificate \
556	  --subject="" \
557	  --type=email \
558	  --email="testus@@test.h5l.se" \
559          ...
560@end example
561
562@subsection PK-INIT
563
564How to create a certificate for a KDC.
565
566@example
567hxtool issue-certificate \
568    --type="pkinit-kdc" \
569    --pk-init-principal="krbtgt/TEST.H5L.SE@@TEST.H5L.SE" \
570    --hostname kerberos.test.h5l.se \
571    --hostname pal.test.h5l.se \
572    ...
573@end example
574
575How to create a certificate for a user.
576
577@example
578hxtool issue-certificate \
579    --type="pkinit-client" \
580    --pk-init-principal="user@@TEST.H5L.SE" \
581    ...
582@end example
583
584@subsection XMPP/Jabber
585
586The jabber server certificate should have a dNSname that is the same as
587the user entered into the application, not the same as the host name of
588the machine.
589
590@example
591hxtool issue-certificate \
592	  --subject="CN=xmpp1.test.h5l.se,DC=test,DC=h5l,DC=se" \
593          --hostname="xmpp1.test.h5l.se" \
594          --hostname="test.h5l.se" \
595          ...
596@end example
597
598The certificate may also contain a jabber identifier (JID) that, if the
599receiver allows it, authorises the server or client to use that JID.
600
601When storing a JID inside the certificate, both for server and client,
602it's stored inside a UTF8String within an otherName entity inside the
603subjectAltName, using the OID id-on-xmppAddr (1.3.6.1.5.5.7.8.5).
604
605To read more about the requirements, see RFC3920, Extensible Messaging
606and Presence Protocol (XMPP): Core.
607
608hxtool issue-certificate have support to add jid to the certificate
609using the option @kbd{--jid}.
610
611@example
612hxtool issue-certificate \
613	  --subject="CN=Love,DC=test,DC=h5l,DC=se" \
614          --jid="lha@@test.h5l.se" \
615          ...
616@end example
617
618
619@node CMS signing and encryption, CMS background, Application requirements, Top
620@chapter CMS signing and encryption
621
622CMS is the Cryptographic Message System that among other, is used by
623S/MIME (secure email) and Kerberos PK-INIT. It's an extended version of
624the RSA, Inc standard PKCS7.
625
626@node CMS background, , CMS signing and encryption, Top
627@section CMS background
628
629
630@c @shortcontents
631@contents
632
633@bye
634