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