Added a comment about VS2008EE and updated WinPcap/OpenSSL versions
[libeap.git] / wpa_supplicant / README-Windows.txt
1 wpa_supplicant for Windows
2 ==========================
3
4 Copyright (c) 2003-2008, Jouni Malinen <j@w1.fi> and
5 contributors
6 All Rights Reserved.
7
8 This program is dual-licensed under both the GPL version 2 and BSD
9 license. Either license may be used at your option.
10
11 This product includes software developed by the OpenSSL Project
12 for use in the OpenSSL Toolkit (http://www.openssl.org/)
13
14
15 wpa_supplicant has support for being used as a WPA/WPA2/IEEE 802.1X
16 Supplicant on Windows. The current port requires that WinPcap
17 (http://winpcap.polito.it/) is installed for accessing packets and the
18 driver interface. Both release versions 3.0 and 3.1 are supported.
19
20 The current port is still somewhat experimental. It has been tested
21 mainly on Windows XP (SP2) with limited set of NDIS drivers. In
22 addition, the current version has been reported to work with Windows
23 2000.
24
25 All security modes have been verified to work (at least complete
26 authentication and successfully ping a wired host):
27 - plaintext
28 - static WEP / open system authentication
29 - static WEP / shared key authentication
30 - IEEE 802.1X with dynamic WEP keys
31 - WPA-PSK, TKIP, CCMP, TKIP+CCMP
32 - WPA-EAP, TKIP, CCMP, TKIP+CCMP
33 - WPA2-PSK, TKIP, CCMP, TKIP+CCMP
34 - WPA2-EAP, TKIP, CCMP, TKIP+CCMP
35
36
37 Binary version
38 --------------
39
40 Compiled binary version of the wpa_supplicant and additional tools is
41 available from http://w1.fi/wpa_supplicant/. These binaries can be
42 used after installing WinPcap.
43
44 wpa_gui uses Qt 4 framework and may need additional dynamic libraries
45 (DLLs). These libraries are available from
46 http://w1.fi/wpa_supplicant/qt4/wpa_gui-qt433-windows-dll.zip
47 You can copy the DLL files from this ZIP package into the same directory
48 with wpa_gui.exe to allow wpa_gui to be started.
49
50
51 Building wpa_supplicant with mingw
52 ----------------------------------
53
54 The default build setup for wpa_supplicant is to use MinGW and
55 cross-compiling from Linux to MinGW/Windows. It should also be
56 possible to build this under Windows using the MinGW tools, but that
57 is not tested nor supported and is likely to require some changes to
58 the Makefile unless cygwin is used.
59
60
61 Building wpa_supplicant with MSVC
62 ---------------------------------
63
64 wpa_supplicant can be built with Microsoft Visual C++ compiler. This
65 has been tested with Microsoft Visual C++ Toolkit 2003 and Visual
66 Studio 2005 using the included nmake.mak as a Makefile for nmake. IDE
67 can also be used by creating a project that includes the files and
68 defines mentioned in nmake.mak. Example VS2005 solution and project
69 files are included in vs2005 subdirectory. This can be used as a
70 starting point for building the programs with VS2005 IDE. Visual Studio
71 2008 Express Edition is also able to use these project files.
72
73 WinPcap development package is needed for the build and this can be
74 downloaded from http://www.winpcap.org/install/bin/WpdPack_4_0_2.zip. The
75 default nmake.mak expects this to be unpacked into C:\dev\WpdPack so
76 that Include and Lib directories are in this directory. The files can be
77 stored elsewhere as long as the WINPCAPDIR in nmake.mak is updated to
78 match with the selected directory. In case a project file in the IDE is
79 used, these Include and Lib directories need to be added to project
80 properties as additional include/library directories.
81
82 OpenSSL source package can be downloaded from
83 http://www.openssl.org/source/openssl-0.9.8i.tar.gz and built and
84 installed following instructions in INSTALL.W32. Note that if EAP-FAST
85 support will be included in the wpa_supplicant, OpenSSL needs to be
86 patched to# support it openssl-0.9.8i-tls-extensions.patch. The example
87 nmake.mak file expects OpenSSL to be installed into C:\dev\openssl, but
88 this directory can be modified by changing OPENSSLDIR variable in
89 nmake.mak.
90
91 If you do not need EAP-FAST support, you may also be able to use Win32
92 binary installation package of OpenSSL from
93 http://www.slproweb.com/products/Win32OpenSSL.html instead of building
94 the library yourself. In this case, you will need to copy Include and
95 Lib directories in suitable directory, e.g., C:\dev\openssl for the
96 default nmake.mak. Copy {Win32OpenSSLRoot}\include into
97 C:\dev\openssl\include and make C:\dev\openssl\lib subdirectory with
98 files from {Win32OpenSSLRoot}\VC (i.e., libeay*.lib and ssleay*.lib).
99 This will end up using dynamically linked OpenSSL (i.e., .dll files are
100 needed) for it. Alternative, you can copy files from
101 {Win32OpenSSLRoot}\VC\static to create a static build (no OpenSSL .dll
102 files needed).
103
104
105 Building wpa_supplicant for cygwin
106 ----------------------------------
107
108 wpa_supplicant can be built for cygwin by installing the needed
109 development packages for cygwin. This includes things like compiler,
110 make, openssl development package, etc. In addition, developer's pack
111 for WinPcap (WPdpack.zip) from
112 http://winpcap.polito.it/install/default.htm is needed.
113
114 .config file should enable only one driver interface,
115 CONFIG_DRIVER_NDIS. In addition, include directories may need to be
116 added to match the system. An example configuration is available in
117 defconfig. The library and include files for WinPcap will either need
118 to be installed in compiler/linker default directories or their
119 location will need to be adding to .config when building
120 wpa_supplicant.
121
122 Othen than this, the build should be more or less identical to Linux
123 version, i.e., just run make after having created .config file. An
124 additional tool, win_if_list.exe, can be built by running "make
125 win_if_list".
126
127
128 Building wpa_gui
129 ----------------
130
131 wpa_gui uses Qt application framework from Trolltech. It can be built
132 with the open source version of Qt4 and MinGW. Following commands can
133 be used to build the binary in the Qt 4 Command Prompt:
134
135 # go to the root directory of wpa_supplicant source code
136 cd wpa_gui-qt4
137 qmake -o Makefile wpa_gui.pro
138 make
139 # the wpa_gui.exe binary is created into 'release' subdirectory
140
141
142 Using wpa_supplicant for Windows
143 --------------------------------
144
145 wpa_supplicant, wpa_cli, and wpa_gui behave more or less identically to
146 Linux version, so instructions in README and example wpa_supplicant.conf
147 should be applicable for most parts. In addition, there is another
148 version of wpa_supplicant, wpasvc.exe, which can be used as a Windows
149 service and which reads its configuration from registry instead of
150 text file.
151
152 When using access points in "hidden SSID" mode, ap_scan=2 mode need to
153 be used (see wpa_supplicant.conf for more information).
154
155 Windows NDIS/WinPcap uses quite long interface names, so some care
156 will be needed when starting wpa_supplicant. Alternatively, the
157 adapter description can be used as the interface name which may be
158 easier since it is usually in more human-readable
159 format. win_if_list.exe can be used to find out the proper interface
160 name.
161
162 Example steps in starting up wpa_supplicant:
163
164 # win_if_list.exe
165 ifname: \Device\NPF_GenericNdisWanAdapter
166 description: Generic NdisWan adapter
167
168 ifname: \Device\NPF_{769E012B-FD17-4935-A5E3-8090C38E25D2}
169 description: Atheros Wireless Network Adapter (Microsoft's Packet Scheduler)
170
171 ifname: \Device\NPF_{732546E7-E26C-48E3-9871-7537B020A211}
172 description: Intel 8255x-based Integrated Fast Ethernet (Microsoft's Packet Scheduler)
173
174
175 Since the example configuration used Atheros WLAN card, the middle one
176 is the correct interface in this case. The interface name for -i
177 command line option is the full string following "ifname:" (the
178 "\Device\NPF_" prefix can be removed). In other words, wpa_supplicant
179 would be started with the following command:
180
181 # wpa_supplicant.exe -i'{769E012B-FD17-4935-A5E3-8090C38E25D2}' -c wpa_supplicant.conf -d
182
183 -d optional enables some more debugging (use -dd for even more, if
184 needed). It can be left out if debugging information is not needed.
185
186 With the alternative mechanism for selecting the interface, this
187 command has identical results in this case:
188
189 # wpa_supplicant.exe -iAtheros -c wpa_supplicant.conf -d
190
191
192 Simple configuration example for WPA-PSK:
193
194 #ap_scan=2
195 ctrl_interface=
196 network={
197         ssid="test"
198         key_mgmt=WPA-PSK
199         proto=WPA
200         pairwise=TKIP
201         psk="secret passphrase"
202 }
203
204 (remove '#' from the comment out ap_scan line to enable mode in which
205 wpa_supplicant tries to associate with the SSID without doing
206 scanning; this allows APs with hidden SSIDs to be used)
207
208
209 wpa_cli.exe and wpa_gui.exe can be used to interact with the
210 wpa_supplicant.exe program in the same way as with Linux. Note that
211 ctrl_interface is using UNIX domain sockets when built for cygwin, but
212 the native build for Windows uses named pipes and the contents of the
213 ctrl_interface configuration item is used to control access to the
214 interface. Anyway, this variable has to be included in the configuration
215 to enable the control interface.
216
217
218 Example SDDL string formats:
219
220 (local admins group has permission, but nobody else):
221
222 ctrl_interface=SDDL=D:(A;;GA;;;BA)
223
224 ("A" == "access allowed", "GA" == GENERIC_ALL == all permissions, and
225 "BA" == "builtin administrators" == the local admins.  The empty fields
226 are for flags and object GUIDs, none of which should be required in this
227 case.)
228
229 (local admins and the local "power users" group have permissions,
230 but nobody else):
231
232 ctrl_interface=SDDL=D:(A;;GA;;;BA)(A;;GA;;;PU)
233
234 (One ACCESS_ALLOWED ACE for GENERIC_ALL for builtin administrators, and
235 one ACCESS_ALLOWED ACE for GENERIC_ALL for power users.)
236
237 (close to wide open, but you have to be a valid user on
238 the machine):
239
240 ctrl_interface=SDDL=D:(A;;GA;;;AU)
241
242 (One ACCESS_ALLOWED ACE for GENERIC_ALL for the "authenticated users"
243 group.)
244
245 This one would allow absolutely everyone (including anonymous
246 users) -- this is *not* recommended, since named pipes can be attached
247 to from anywhere on the network (i.e. there's no "this machine only"
248 like there is with 127.0.0.1 sockets):
249
250 ctrl_interface=SDDL=D:(A;;GA;;;BU)(A;;GA;;;AN)
251
252 (BU == "builtin users", "AN" == "anonymous")
253
254 See also [1] for the format of ACEs, and [2] for the possible strings
255 that can be used for principal names.
256
257 [1]
258 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/ace_strings.asp
259 [2]
260 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/sid_strings.asp
261
262
263 Starting wpa_supplicant as a Windows service (wpasvc.exe)
264 ---------------------------------------------------------
265
266 wpa_supplicant can be started as a Windows service by using wpasvc.exe
267 program that is alternative build of wpa_supplicant.exe. Most of the
268 core functionality of wpasvc.exe is identical to wpa_supplicant.exe,
269 but it is using Windows registry for configuration information instead
270 of a text file and command line parameters. In addition, it can be
271 registered as a service that can be started automatically or manually
272 like any other Windows service.
273
274 The root of wpa_supplicant configuration in registry is
275 HKEY_LOCAL_MACHINE\SOFTWARE\wpa_supplicant. This level includes global
276 parameters and a 'interfaces' subkey with all the interface configuration
277 (adapter to confname mapping). Each such mapping is a subkey that has
278 'adapter', 'config', and 'ctrl_interface' values.
279
280 This program can be run either as a normal command line application,
281 e.g., for debugging, with 'wpasvc.exe app' or as a Windows service.
282 Service need to be registered with 'wpasvc.exe reg <full path to
283 wpasvc.exe>'. Alternatively, 'wpasvc.exe reg' can be used to register
284 the service with the current location of wpasvc.exe. After this, wpasvc
285 can be started like any other Windows service (e.g., 'net start wpasvc')
286 or it can be configured to start automatically through the Services tool
287 in administrative tasks. The service can be unregistered with
288 'wpasvc.exe unreg'.
289
290 If the service is set to start during system bootup to make the
291 network connection available before any user has logged in, there may
292 be a long (half a minute or so) delay in starting up wpa_supplicant
293 due to WinPcap needing a driver called "Network Monitor Driver" which
294 is started by default on demand.
295
296 To speed up wpa_supplicant start during system bootup, "Network
297 Monitor Driver" can be configured to be started sooner by setting its
298 startup type to System instead of the default Demand. To do this, open
299 up Device Manager, select Show Hidden Devices, expand the "Non
300 Plug-and-Play devices" branch, double click "Network Monitor Driver",
301 go to the Driver tab, and change the Demand setting to System instead.
302
303 Configuration data is in HKEY_LOCAL_MACHINE\SOFTWARE\wpa_supplicant\configs
304 key. Each configuration profile has its own key under this. In terms of text
305 files, each profile would map to a separate text file with possibly multiple
306 networks. Under each profile, there is a networks key that lists all
307 networks as a subkey. Each network has set of values in the same way as
308 network block in the configuration file. In addition, blobs subkey has
309 possible blobs as values.
310
311 HKEY_LOCAL_MACHINE\SOFTWARE\wpa_supplicant\configs\test\networks\0000
312    ssid="example"
313    key_mgmt=WPA-PSK
314
315 See win_example.reg for an example on how to setup wpasvc.exe
316 parameters in registry. It can also be imported to registry as a
317 starting point for the configuration.
318
319
320
321 License information for third party software used in this product:
322
323   OpenSSL License
324   ---------------
325
326 /* ====================================================================
327  * Copyright (c) 1998-2004 The OpenSSL Project.  All rights reserved.
328  *
329  * Redistribution and use in source and binary forms, with or without
330  * modification, are permitted provided that the following conditions
331  * are met:
332  *
333  * 1. Redistributions of source code must retain the above copyright
334  *    notice, this list of conditions and the following disclaimer. 
335  *
336  * 2. Redistributions in binary form must reproduce the above copyright
337  *    notice, this list of conditions and the following disclaimer in
338  *    the documentation and/or other materials provided with the
339  *    distribution.
340  *
341  * 3. All advertising materials mentioning features or use of this
342  *    software must display the following acknowledgment:
343  *    "This product includes software developed by the OpenSSL Project
344  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
345  *
346  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
347  *    endorse or promote products derived from this software without
348  *    prior written permission. For written permission, please contact
349  *    openssl-core@openssl.org.
350  *
351  * 5. Products derived from this software may not be called "OpenSSL"
352  *    nor may "OpenSSL" appear in their names without prior written
353  *    permission of the OpenSSL Project.
354  *
355  * 6. Redistributions of any form whatsoever must retain the following
356  *    acknowledgment:
357  *    "This product includes software developed by the OpenSSL Project
358  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
359  *
360  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
361  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
362  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
363  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
364  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
365  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
366  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
367  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
368  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
369  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
370  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
371  * OF THE POSSIBILITY OF SUCH DAMAGE.
372  * ====================================================================
373  *
374  * This product includes cryptographic software written by Eric Young
375  * (eay@cryptsoft.com).  This product includes software written by Tim
376  * Hudson (tjh@cryptsoft.com).
377  *
378  */
379
380  Original SSLeay License
381  -----------------------
382
383 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
384  * All rights reserved.
385  *
386  * This package is an SSL implementation written
387  * by Eric Young (eay@cryptsoft.com).
388  * The implementation was written so as to conform with Netscapes SSL.
389  * 
390  * This library is free for commercial and non-commercial use as long as
391  * the following conditions are aheared to.  The following conditions
392  * apply to all code found in this distribution, be it the RC4, RSA,
393  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
394  * included with this distribution is covered by the same copyright terms
395  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
396  * 
397  * Copyright remains Eric Young's, and as such any Copyright notices in
398  * the code are not to be removed.
399  * If this package is used in a product, Eric Young should be given attribution
400  * as the author of the parts of the library used.
401  * This can be in the form of a textual message at program startup or
402  * in documentation (online or textual) provided with the package.
403  * 
404  * Redistribution and use in source and binary forms, with or without
405  * modification, are permitted provided that the following conditions
406  * are met:
407  * 1. Redistributions of source code must retain the copyright
408  *    notice, this list of conditions and the following disclaimer.
409  * 2. Redistributions in binary form must reproduce the above copyright
410  *    notice, this list of conditions and the following disclaimer in the
411  *    documentation and/or other materials provided with the distribution.
412  * 3. All advertising materials mentioning features or use of this software
413  *    must display the following acknowledgement:
414  *    "This product includes cryptographic software written by
415  *     Eric Young (eay@cryptsoft.com)"
416  *    The word 'cryptographic' can be left out if the rouines from the library
417  *    being used are not cryptographic related :-).
418  * 4. If you include any Windows specific code (or a derivative thereof) from 
419  *    the apps directory (application code) you must include an acknowledgement:
420  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
421  * 
422  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
423  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
424  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
425  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
426  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
427  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
428  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
429  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
430  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
431  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
432  * SUCH DAMAGE.
433  * 
434  * The licence and distribution terms for any publically available version or
435  * derivative of this code cannot be changed.  i.e. this code cannot simply be
436  * copied and put under another distribution licence
437  * [including the GNU Public Licence.]
438  */
439
440
441
442    Qt Open Source Edition
443    ----------------------
444
445 The Qt GUI Toolkit is Copyright (C) 1994-2007 Trolltech ASA.
446 Qt Open Source Edition is licensed under GPL version 2.
447
448 Source code for the library is available at
449 http://w1.fi/wpa_supplicant/qt4/qt-win-opensource-src-4.3.3.zip