1 | @c $Id$
|
---|
2 |
|
---|
3 |
|
---|
4 | @node Windows compatibility, Programming with Kerberos, Kerberos 4 issues, Top
|
---|
5 | @comment node-name, next, previous, up
|
---|
6 | @chapter Windows compatibility
|
---|
7 |
|
---|
8 | Microsoft Windows, starting from version 2000 (formerly known as Windows NT 5), implements Kerberos 5. Their implementation, however, has some quirks,
|
---|
9 | peculiarities, and bugs. This chapter is a short summary of the compatibility
|
---|
10 | issues between Heimdal and various Windows versions.
|
---|
11 |
|
---|
12 | The big problem with the Kerberos implementation in Windows
|
---|
13 | is that the available documentation is more focused on getting
|
---|
14 | things to work rather than how they work, and not that useful in figuring
|
---|
15 | out how things really work. It's of course subject to change all the time and
|
---|
16 | mostly consists of our not so inspired guesses. Hopefully it's still
|
---|
17 | somewhat useful.
|
---|
18 |
|
---|
19 | @menu
|
---|
20 | * Configuring Windows to use a Heimdal KDC::
|
---|
21 | * Inter-Realm keys (trust) between Windows and a Heimdal KDC::
|
---|
22 | * Create account mappings::
|
---|
23 | * Encryption types::
|
---|
24 | * Authorisation data::
|
---|
25 | * Quirks of Windows 2000 KDC::
|
---|
26 | * Useful links when reading about the Windows::
|
---|
27 | @end menu
|
---|
28 |
|
---|
29 | @node Configuring Windows to use a Heimdal KDC, Inter-Realm keys (trust) between Windows and a Heimdal KDC, Windows compatibility, Windows compatibility
|
---|
30 | @comment node-name, next, precious, up
|
---|
31 | @section Configuring Windows to use a Heimdal KDC
|
---|
32 |
|
---|
33 | You need the command line program called @command{ksetup.exe}. This program comes with the Windows Support Tools, available from either the installation CD-ROM (@file{SUPPORT/TOOLS/SUPPORT.CAB}), or from Microsoft web site. Starting from Windows 2008, it is already installed. This program is used to configure the Kerberos settings on a Workstation.
|
---|
34 |
|
---|
35 | @command{Ksetup} store the domain information under the registry key:
|
---|
36 | @code{HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\Kerberos\Domains}.
|
---|
37 |
|
---|
38 | Use the @command{kadmin} program in Heimdal to create a host principal in the
|
---|
39 | Kerberos realm.
|
---|
40 |
|
---|
41 | @example
|
---|
42 | unix% kadmin
|
---|
43 | kadmin> ank --password=password host/datan.example.com
|
---|
44 | @end example
|
---|
45 |
|
---|
46 | The name @samp{datan.example.com} should be replaced with DNS name of
|
---|
47 | the workstation.
|
---|
48 |
|
---|
49 | You must configure the workstation as a member of a workgroup, as opposed
|
---|
50 | to a member in an NT domain, and specify the KDC server of the realm
|
---|
51 | as follows:
|
---|
52 | @example
|
---|
53 | C:> ksetup /setdomain EXAMPLE.COM
|
---|
54 | C:> ksetup /addkdc EXAMPLE.COM kdc.example.com
|
---|
55 | @end example
|
---|
56 |
|
---|
57 | Set the machine password, i.e.@: create the local keytab:
|
---|
58 | @example
|
---|
59 | C:> ksetup /SetComputerPassword password
|
---|
60 | @end example
|
---|
61 |
|
---|
62 | The password used in @kbd{ksetup /setmachpassword} must be the same
|
---|
63 | as the password used in the @kbd{kadmin ank} command.
|
---|
64 |
|
---|
65 | The workstation must now be rebooted.
|
---|
66 |
|
---|
67 | A mapping between local NT users and Kerberos principals must be specified.
|
---|
68 | You have two choices. First:
|
---|
69 |
|
---|
70 | @example
|
---|
71 | C:> ksetup /mapuser user@@MY.REALM nt_user
|
---|
72 | @end example
|
---|
73 |
|
---|
74 | This will map a user to a specific principal; this allows you to have
|
---|
75 | other usernames in the realm than in your NT user database. (Don't ask
|
---|
76 | me why on earth you would want that@enddots{})
|
---|
77 |
|
---|
78 | You can also say:
|
---|
79 | @example
|
---|
80 | C:> ksetup /mapuser * *
|
---|
81 | @end example
|
---|
82 | The Windows machine will now map any user to the corresponding principal,
|
---|
83 | for example @samp{nisse} to the principal @samp{nisse@@MY.REALM}.
|
---|
84 | (This is most likely what you want.)
|
---|
85 |
|
---|
86 | @node Inter-Realm keys (trust) between Windows and a Heimdal KDC, Create account mappings, Configuring Windows to use a Heimdal KDC, Windows compatibility
|
---|
87 | @comment node-name, next, precious, up
|
---|
88 | @section Inter-Realm keys (trust) between Windows and a Heimdal KDC
|
---|
89 |
|
---|
90 | See also the Step-by-Step guide from Microsoft, referenced below.
|
---|
91 |
|
---|
92 | Install Windows, and create a new controller (Active Directory
|
---|
93 | Server) for the domain.
|
---|
94 |
|
---|
95 | By default the trust will be non-transitive. This means that only users
|
---|
96 | directly from the trusted domain may authenticate. This can be changed
|
---|
97 | to transitive by using the @command{netdom.exe} tool. @command{netdom.exe}
|
---|
98 | can also be used to add the trust between two realms.
|
---|
99 |
|
---|
100 | You need to tell Windows on what hosts to find the KDCs for the
|
---|
101 | non-Windows realm with @command{ksetup}, see @xref{Configuring Windows
|
---|
102 | to use a Heimdal KDC}.
|
---|
103 |
|
---|
104 | This needs to be done on all computers that want enable cross-realm
|
---|
105 | login with @code{Mapped Names}. @c XXX probably shouldn't be @code
|
---|
106 |
|
---|
107 | Then you need to add the inter-realm keys on the Windows KDC@. Start the
|
---|
108 | Domain Tree Management tool (found in Programs, Administrative tools,
|
---|
109 | Active Directory Domains and Trusts).
|
---|
110 |
|
---|
111 | Right click on Properties of your domain, select the Trust tab. Press
|
---|
112 | Add on the appropriate trust windows and enter domain name and
|
---|
113 | password. When prompted if this is a non-Windows Kerberos realm, press
|
---|
114 | OK.
|
---|
115 |
|
---|
116 | Do not forget to add trusts in both directions (if that's what you want).
|
---|
117 |
|
---|
118 | If you want to use @command{netdom.exe} instead of the Domain Tree
|
---|
119 | Management tool, you do it like this:
|
---|
120 |
|
---|
121 | @example
|
---|
122 | netdom trust NT.REALM.EXAMPLE.COM /Domain:EXAMPLE.COM /add /realm /passwordt:TrustPassword
|
---|
123 | @end example
|
---|
124 |
|
---|
125 | You also need to add the inter-realm keys to the Heimdal KDC. But take
|
---|
126 | care to the encryption types and salting used for those keys. There should be
|
---|
127 | no encryption type stronger than the one configured on Windows side for this
|
---|
128 | relationship, itself limited to the ones supported by this specific version of
|
---|
129 | Windows, nor any Kerberos 4 salted hashes, as Windows does not seem to
|
---|
130 | understand them. Otherwise, the trust will not works.
|
---|
131 |
|
---|
132 | Here are the version-specific needed information:
|
---|
133 | @enumerate
|
---|
134 | @item Windows 2000: maximum encryption type is DES
|
---|
135 | @item Windows 2003: maximum encryption type is DES
|
---|
136 | @item Windows 2003RC2: maximum encryption type is RC4, relationship defaults to DES
|
---|
137 | @item Windows 2008: maximum encryption type is AES, relationship defaults to RC4
|
---|
138 | @end enumerate
|
---|
139 |
|
---|
140 | For Windows 2003RC2, to change the trust encryption type, you have to use the
|
---|
141 | @command{ktpass}, from the Windows 2003 Resource kit *service pack2*, available
|
---|
142 | from Microsoft web site.
|
---|
143 |
|
---|
144 | @example
|
---|
145 | C:> ktpass /MITRealmName UNIX.EXAMPLE.COM /TrustEncryp RC4
|
---|
146 | @end example
|
---|
147 |
|
---|
148 | For Windows 2008, the same operation can be done with the @command{ksetup}, installed by default.
|
---|
149 |
|
---|
150 | @example
|
---|
151 | C:> ksetup /SetEncTypeAttre EXAMPLE.COM AES256-SHA1
|
---|
152 | @end example
|
---|
153 |
|
---|
154 | Once the relationship is correctly configured, you can add the required
|
---|
155 | inter-realm keys, using heimdal default encryption types:
|
---|
156 |
|
---|
157 | @example
|
---|
158 | kadmin add krbtgt/NT.REALM.EXAMPLE.COM@@EXAMPLE.COM
|
---|
159 | kadmin add krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM
|
---|
160 | @end example
|
---|
161 |
|
---|
162 | Use the same passwords for both keys.
|
---|
163 |
|
---|
164 | And if needed, to remove unsupported encryptions, such as the following ones for a Windows 2003RC2 server.
|
---|
165 |
|
---|
166 | @example
|
---|
167 | kadmin del_enctype krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM aes256-cts-hmac-sha1-96
|
---|
168 | kadmin del_enctype krbtgt/REALM.EXAMPLE.COM@@NT.EXAMPLE.COM des3-cbc-sha1
|
---|
169 | kadmin del_enctype krbtgt/NT.EXAMPLE.COM@@EXAMPLE.COM aes256-cts-hmac-sha1-96
|
---|
170 | kadmin del_enctype krbtgt/NT.EXAMPLE.COM@@EXAMPLE.COM des3-cbc-sha1
|
---|
171 | @end example
|
---|
172 |
|
---|
173 | Do not forget to reboot before trying the new realm-trust (after
|
---|
174 | running @command{ksetup}). It looks like it might work, but packets are
|
---|
175 | never sent to the non-Windows KDC.
|
---|
176 |
|
---|
177 | @node Create account mappings, Encryption types, Inter-Realm keys (trust) between Windows and a Heimdal KDC, Windows compatibility
|
---|
178 | @comment node-name, next, precious, up
|
---|
179 | @section Create account mappings
|
---|
180 |
|
---|
181 | Start the @code{Active Directory Users and Computers} tool. Select the
|
---|
182 | View menu, that is in the left corner just below the real menu (or press
|
---|
183 | Alt-V), and select Advanced Features. Right click on the user that you
|
---|
184 | are going to do a name mapping for and choose Name mapping.
|
---|
185 |
|
---|
186 | Click on the Kerberos Names tab and add a new principal from the
|
---|
187 | non-Windows domain.
|
---|
188 |
|
---|
189 | @c XXX check entry name then I have network again
|
---|
190 | This adds @samp{authorizationNames} entry to the users LDAP entry to
|
---|
191 | the Active Directory LDAP catalog. When you create users by script you
|
---|
192 | can add this entry instead.
|
---|
193 |
|
---|
194 | @node Encryption types, Authorisation data, Create account mappings, Windows compatibility
|
---|
195 | @comment node-name, next, previous, up
|
---|
196 | @section Encryption types
|
---|
197 |
|
---|
198 | Windows 2000 supports both the standard DES encryptions (@samp{des-cbc-crc} and
|
---|
199 | @samp{des-cbc-md5}) and its own proprietary encryption that is based on MD4 and
|
---|
200 | RC4 that is documented in and is supposed to be described in
|
---|
201 | @file{draft-brezak-win2k-krb-rc4-hmac-03.txt}. New users will get both
|
---|
202 | MD4 and DES keys. Users that are converted from a NT4 database, will
|
---|
203 | only have MD4 passwords and will need a password change to get a DES
|
---|
204 | key.
|
---|
205 |
|
---|
206 | @node Authorisation data, Quirks of Windows 2000 KDC, Encryption types, Windows compatibility
|
---|
207 | @comment node-name, next, previous, up
|
---|
208 | @section Authorisation data
|
---|
209 |
|
---|
210 | The Windows 2000 KDC also adds extra authorisation data in tickets.
|
---|
211 | It is at this point unclear what triggers it to do this. The format of
|
---|
212 | this data is only available under a ``secret'' license from Microsoft,
|
---|
213 | which prohibits you implementing it.
|
---|
214 |
|
---|
215 | A simple way of getting hold of the data to be able to understand it
|
---|
216 | better is described here.
|
---|
217 |
|
---|
218 | @enumerate
|
---|
219 | @item Find the client example on using the SSPI in the SDK documentation.
|
---|
220 | @item Change ``AuthSamp'' in the source code to lowercase.
|
---|
221 | @item Build the program.
|
---|
222 | @item Add the ``authsamp'' principal with a known password to the
|
---|
223 | database. Make sure it has a DES key.
|
---|
224 | @item Run @kbd{ktutil add} to add the key for that principal to a
|
---|
225 | keytab.
|
---|
226 | @item Run @kbd{appl/test/nt_gss_server -p 2000 -s authsamp
|
---|
227 | @kbd{--dump-auth}=@var{file}} where @var{file} is an appropriate file.
|
---|
228 | @item It should authenticate and dump for you the authorisation data in
|
---|
229 | the file.
|
---|
230 | @item The tool @kbd{lib/asn1/asn1_print} is somewhat useful for
|
---|
231 | analysing the data.
|
---|
232 | @end enumerate
|
---|
233 |
|
---|
234 | @node Quirks of Windows 2000 KDC, Useful links when reading about the Windows, Authorisation data, Windows compatibility
|
---|
235 | @comment node-name, next, previous, up
|
---|
236 | @section Quirks of Windows 2000 KDC
|
---|
237 |
|
---|
238 | There are some issues with salts and Windows 2000. Using an empty salt---which is the only one that Kerberos 4 supported, and is therefore known
|
---|
239 | as a Kerberos 4 compatible salt---does not work, as far as we can tell
|
---|
240 | from out experiments and users' reports. Therefore, you have to make
|
---|
241 | sure you keep around keys with all the different types of salts that are
|
---|
242 | required. Microsoft have fixed this issue post Windows 2003.
|
---|
243 |
|
---|
244 | Microsoft seems also to have forgotten to implement the checksum
|
---|
245 | algorithms @samp{rsa-md4-des} and @samp{rsa-md5-des}. This can make Name
|
---|
246 | mapping (@pxref{Create account mappings}) fail if a @samp{des-cbc-md5} key
|
---|
247 | is used. To make the KDC return only @samp{des-cbc-crc} you must delete
|
---|
248 | the @samp{des-cbc-md5} key from the kdc using the @kbd{kadmin
|
---|
249 | del_enctype} command.
|
---|
250 |
|
---|
251 | @example
|
---|
252 | kadmin del_enctype lha des-cbc-md5
|
---|
253 | @end example
|
---|
254 |
|
---|
255 | You should also add the following entries to the @file{krb5.conf} file:
|
---|
256 |
|
---|
257 | @example
|
---|
258 | [libdefaults]
|
---|
259 | default_etypes = des-cbc-crc
|
---|
260 | default_etypes_des = des-cbc-crc
|
---|
261 | @end example
|
---|
262 |
|
---|
263 | These configuration options will make sure that no checksums of the
|
---|
264 | unsupported types are generated.
|
---|
265 |
|
---|
266 | @node Useful links when reading about the Windows, , Quirks of Windows 2000 KDC, Windows compatibility
|
---|
267 | @comment node-name, next, previous, up
|
---|
268 | @section Useful links when reading about the Windows
|
---|
269 |
|
---|
270 | See also our paper presented at the 2001 Usenix Annual Technical
|
---|
271 | Conference, available in the proceedings or at
|
---|
272 | @uref{http://www.usenix.org/publications/library/proceedings/usenix01/freenix01/westerlund.html}.
|
---|
273 |
|
---|
274 | There are lots of texts about Kerberos on Microsoft's web site, here is a
|
---|
275 | short list of the interesting documents that we have managed to find.
|
---|
276 |
|
---|
277 | @itemize @bullet
|
---|
278 |
|
---|
279 | @item Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability:
|
---|
280 | @uref{http://www.microsoft.com/technet/prodtechnol/windows2000serv/howto/kerbstep.mspx}.
|
---|
281 | Kerberos GSS-API (in Windows-eze SSPI), Windows as a client in a
|
---|
282 | non-Windows KDC realm, adding unix clients to a Windows 2000 KDC, and
|
---|
283 | adding cross-realm trust (@pxref{Inter-Realm keys (trust) between Windows
|
---|
284 | and a Heimdal KDC}).
|
---|
285 |
|
---|
286 | @item Windows 2000 Kerberos Authentication:
|
---|
287 | @uref{www.microsoft.com/technet/prodtechnol/windows2000serv/deploy/confeat/kerberos.mspx}.
|
---|
288 | White paper that describes how Kerberos is used in Windows 2000.
|
---|
289 |
|
---|
290 | @item Overview of Kerberos:
|
---|
291 | @uref{http://support.microsoft.com/support/kb/articles/Q248/7/58.ASP}.
|
---|
292 | Links to useful other links.
|
---|
293 |
|
---|
294 | @c @item Klist for Windows:
|
---|
295 | @c @uref{http://msdn.microsoft.com/library/periodic/period00/security0500.htm}.
|
---|
296 | @c Describes where to get a klist for Windows 2000.
|
---|
297 |
|
---|
298 | @item Event logging for Kerberos:
|
---|
299 | @uref{http://support.microsoft.com/support/kb/articles/Q262/1/77.ASP}.
|
---|
300 | Basically it say that you can add a registry key
|
---|
301 | @code{HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters\LogLevel}
|
---|
302 | with value DWORD equal to 1, and then you'll get logging in the Event
|
---|
303 | Logger.
|
---|
304 |
|
---|
305 | @c @item Access to the Active Directory through LDAP:
|
---|
306 | @c @uref{http://msdn.microsoft.com/library/techart/kerberossamp.htm}
|
---|
307 |
|
---|
308 | @end itemize
|
---|
309 |
|
---|
310 | Other useful programs include these:
|
---|
311 |
|
---|
312 | @itemize @bullet
|
---|
313 | @item pwdump2
|
---|
314 | @uref{http://www.bindview.com/Support/RAZOR/Utilities/Windows/pwdump2_readme.cfm}@end itemize
|
---|