Add text about pk-init
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17175 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
223
doc/setup.texi
223
doc/setup.texi
@@ -28,6 +28,7 @@ doing so. It will make life easier for you and everyone else.
|
|||||||
* Setting up DNS::
|
* Setting up DNS::
|
||||||
* Using LDAP to store the database::
|
* Using LDAP to store the database::
|
||||||
* Providing Kerberos credentials to servers and programs::
|
* Providing Kerberos credentials to servers and programs::
|
||||||
|
* Setting up PK-INIT::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Configuration file, Creating the database, Setting up a realm, Setting up a realm
|
@node Configuration file, Creating the database, Setting up a realm, Setting up a realm
|
||||||
@@ -986,7 +987,7 @@ Now you can proceed as in @xref{Using LDAP to store the database}.
|
|||||||
Heimdal will pick up the Samba LDAP entries if they are in the same
|
Heimdal will pick up the Samba LDAP entries if they are in the same
|
||||||
search space as the Kerberos entries.
|
search space as the Kerberos entries.
|
||||||
|
|
||||||
@node Providing Kerberos credentials to servers and programs, , Using LDAP to store the database, Setting up a realm
|
@node Providing Kerberos credentials to servers and programs, Setting up PK-INIT, Using LDAP to store the database, Setting up a realm
|
||||||
@section Providing Kerberos credentials to servers and programs
|
@section Providing Kerberos credentials to servers and programs
|
||||||
|
|
||||||
Some services require Kerberos credentials when they start to make
|
Some services require Kerberos credentials when they start to make
|
||||||
@@ -1032,3 +1033,223 @@ service@@host$ kinit --cache=/var/run/service_krb5_cache \
|
|||||||
script-to-start-service argument1 argument2
|
script-to-start-service argument1 argument2
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
|
||||||
|
@node Setting up PK-INIT, , Providing Kerberos credentials to servers and programs, Setting up a realm
|
||||||
|
@section Setting up PK-INIT
|
||||||
|
|
||||||
|
PK-INIT is levering the existing PKI infrastructure to use
|
||||||
|
certificates to get the initial ticket, that is usually the krbtgt.
|
||||||
|
|
||||||
|
To use PK-INIT you must first have a PKI, so if you don't have one,
|
||||||
|
now its time to create it. Note that you should read the whole chapter
|
||||||
|
of the document to see the requirements on the CA sortware.
|
||||||
|
|
||||||
|
There needs to exist a mapping between the certificate and what
|
||||||
|
principals that certificate is allowed to use. There are several ways
|
||||||
|
to do this. The administrator can use a configuration file, storing
|
||||||
|
the principal in SubjectAltName in extensions of certificate, or store
|
||||||
|
the mapping in the principals entry in the kerberos database.
|
||||||
|
|
||||||
|
@section Certificates
|
||||||
|
|
||||||
|
This section document the requirements on the KDC and client
|
||||||
|
certificates and the format used in the id-pkinit-san OtherName
|
||||||
|
extention.
|
||||||
|
|
||||||
|
@subsection KDC certificate
|
||||||
|
|
||||||
|
The certificate for the KDC have serveral requirements.
|
||||||
|
|
||||||
|
First the certificate should have a Extended Key Usage (EKU)
|
||||||
|
id-pkkdcekuoid (1.3.6.1.5.2.3.5) set. Second there must be a
|
||||||
|
subjectAltName otherName using oid id-pkinit-san (1.3.6.1.5.2.2) in
|
||||||
|
the type field and and DER encoded KRB5PrincipalName that matches the
|
||||||
|
name of the TGS of the target realm.
|
||||||
|
|
||||||
|
Both of these two requirements are not required by the standard to be
|
||||||
|
checked by the client if it have external information what the
|
||||||
|
certificate the KDC is supposed to be used. So its in the interst of
|
||||||
|
minium amount of configuration on the clients they should be included.
|
||||||
|
|
||||||
|
Remember that if client would accept any certificate as the KDC's
|
||||||
|
certificate, the client could be fooled into trusting something that
|
||||||
|
isn't a KDC and thus expose the user to giving away information (like
|
||||||
|
password or other private information) that it is supposed to secret.
|
||||||
|
|
||||||
|
Also, if the extension certificate have a nameConstraints extention
|
||||||
|
with a Generalname with dNSName or iPAdress it must match the hostname
|
||||||
|
or adress of the KDC.
|
||||||
|
|
||||||
|
@subsection Client certificate
|
||||||
|
|
||||||
|
The client certificate may need to have a EKU id-pkekuoid
|
||||||
|
(1.3.6.1.5.2.3.4) depending on set on the certifiate on the KDC.
|
||||||
|
|
||||||
|
It possible to store the principal (if allowed by the KDC) in the
|
||||||
|
certificate and thus delegate responsibility to do the mapping between
|
||||||
|
certificates and principals to the CA.
|
||||||
|
|
||||||
|
@subsubsection Using KRB5PrincipalName in id-pkinit-san
|
||||||
|
|
||||||
|
OtherName extenetion in the GeneralName is used is used to do the
|
||||||
|
mapping between certifiate and principal in the certifiate or storing
|
||||||
|
the krbtgt principal in the KDC certificate.
|
||||||
|
|
||||||
|
The principal is stored in a SubjectAltName in the certificate using
|
||||||
|
OtherName. The oid in the type is id-pkinit-san.
|
||||||
|
|
||||||
|
@example
|
||||||
|
id-pkinit-san OBJECT IDENTIFIER ::= @{ iso (1) org (3) dod (6)
|
||||||
|
internet (1) security (5) kerberosv5 (2) 2 @}
|
||||||
|
@end example
|
||||||
|
|
||||||
|
In the data part of the OtherName is filled with the following DER
|
||||||
|
encoded ASN.1 structure:
|
||||||
|
|
||||||
|
@example
|
||||||
|
KRB5PrincipalName ::= SEQUENCE @{
|
||||||
|
realm [0] Realm,
|
||||||
|
principalName [1] PrincipalName
|
||||||
|
@}
|
||||||
|
@end example
|
||||||
|
|
||||||
|
where Realm and PrincipalName is defined by Kerberos ASN.1 specification.
|
||||||
|
|
||||||
|
@section Naming certificate using hx509
|
||||||
|
|
||||||
|
hx509 is the X.509 software used in Heimdal to handle
|
||||||
|
certificates. hx509 use diffrent syntaxs to specify the diffrent
|
||||||
|
format the certificate is stored and in what format they exist in.
|
||||||
|
|
||||||
|
There are several format that can be used, PEM, embeded into PKCS12
|
||||||
|
files, embeded into PKCS11 devices and raw DER encoded certificates.
|
||||||
|
Below is a list of types to use.
|
||||||
|
|
||||||
|
|
||||||
|
@table @asis
|
||||||
|
|
||||||
|
@item DIR:
|
||||||
|
|
||||||
|
@c Create a directory where all the trusted anchors are stored
|
||||||
|
@c ca-trusted-anchors and copy all certificate you are going to trust as
|
||||||
|
@c anchors into that directory. Make sure there are no other files then
|
||||||
|
@c trust anchors in that directory, if there are, it will not work. In
|
||||||
|
@c the krb5.conf, this is refear to as DIR:/dir
|
||||||
|
|
||||||
|
Syntax is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
DIR:/path/to/der/files
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@item FILE:
|
||||||
|
|
||||||
|
FILE: is used to have the lib pick up a certificate chain and a
|
||||||
|
private key.
|
||||||
|
|
||||||
|
Syntax is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
FILE:certificate-file.pem,private-key-file.key,other-cert.pem,....
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@item PKCS11:
|
||||||
|
|
||||||
|
PKCS11: is used handle smartcards via PKCS11 drivers
|
||||||
|
(soft-token,opensc,muscle) files.
|
||||||
|
|
||||||
|
Syntax is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
PKCS11:shared-object.so:slot=<num>:otherattribute=<value>
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@item PKCS12:
|
||||||
|
|
||||||
|
PKCS12: is used handle PKCS12 (.pfx/.p12) files.
|
||||||
|
|
||||||
|
Syntax is:
|
||||||
|
|
||||||
|
@example
|
||||||
|
PKCS12:/path/to/file.pfx
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@section Configuring the kerberos software
|
||||||
|
|
||||||
|
Add configuration options to krb5.conf
|
||||||
|
|
||||||
|
kinit
|
||||||
|
|
||||||
|
kdc
|
||||||
|
|
||||||
|
@section Configuring the client
|
||||||
|
|
||||||
|
@example
|
||||||
|
[appdefaults]
|
||||||
|
pkinit-anchors = DIR:/dir-to-client-trusted-ca-hashes
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@section Configuring the KDC
|
||||||
|
|
||||||
|
@example
|
||||||
|
[kdc]
|
||||||
|
enable-pkinit = yes
|
||||||
|
pki-identity = FILE:/secure/kdc.crt,/secure/kdc.key
|
||||||
|
pki-anchors = FILE:/path/to/trust-anchors.pem
|
||||||
|
pki-pool = PKCS12:/path/to/useful-intermediate-certs.pfx
|
||||||
|
pki-pool = FILE:/path/to/other-useful-intermediate-certs.pem
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@subsection Using pki-mapping file
|
||||||
|
|
||||||
|
@subsection Using Kerberos database
|
||||||
|
|
||||||
|
@section Use OpenSSL to create certificates
|
||||||
|
|
||||||
|
@subsection Using OpenSSL to create certificate with krb5PrincipalName
|
||||||
|
|
||||||
|
To make OpenSSL create certificate with krb5PrincipalName use the following
|
||||||
|
|
||||||
|
@file{openssl.cnf}.
|
||||||
|
|
||||||
|
@example
|
||||||
|
|
||||||
|
[user_certificate]
|
||||||
|
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name
|
||||||
|
|
||||||
|
[princ_name]
|
||||||
|
realm = EXP:0, GeneralString:MY.REALM
|
||||||
|
principal_name = EXP:1, SEQUENCE:principal_seq
|
||||||
|
|
||||||
|
[principal_seq]
|
||||||
|
name_type = EXP:0, INTEGER:1
|
||||||
|
name_string = EXP:1, SEQUENCE:principals
|
||||||
|
|
||||||
|
[principals]
|
||||||
|
princ1 = GeneralString:userid
|
||||||
|
|
||||||
|
@end example
|
||||||
|
|
||||||
|
Command usage
|
||||||
|
|
||||||
|
@example
|
||||||
|
openssl x509 -extensions user_certificate
|
||||||
|
@end example
|
||||||
|
|
||||||
|
|
||||||
|
@c --- ms certificate
|
||||||
|
@c
|
||||||
|
@c [ new_oids ]
|
||||||
|
@c msCertificateTemplateName = 1.3.6.1.4.1.311.20.2
|
||||||
|
@c
|
||||||
|
@c
|
||||||
|
@c [ req_smartcard ]
|
||||||
|
@c keyUsage = digitalSignature, keyEncipherment
|
||||||
|
@c extendedKeyUsage = msSmartcardLogin, clientAuth
|
||||||
|
@c msCertificateTemplateName = ASN1:BMP:SmartcardLogon
|
||||||
|
@c subjectAltName = otherName:msUPN;UTF8:lukeh@dsg.padl.com
|
||||||
|
@c #subjectAltName = email:copy
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user