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