Dmitry Shmidt | df5a7e4 | 2014-04-02 12:59:59 -0700 | [diff] [blame^] | 1 | Hotspot 2.0 OSU server |
| 2 | ====================== |
| 3 | |
| 4 | The information in this document is based on the assumption that Ubuntu |
| 5 | 12.04 server (64-bit) distribution is used and the web server is |
| 6 | Apache2. Neither of these are requirements for the installation, but if |
| 7 | other combinations are used, the package names and configuration |
| 8 | parameters may need to be adjusted. |
| 9 | |
| 10 | NOTE: This implementation and the example configuration here is meant |
| 11 | only for testing purposes in a lab environment. This design is not |
| 12 | secure to be installed in a publicly available Internet server without |
| 13 | considerable amount of modification and review for security issues. |
| 14 | |
| 15 | NOTE: While this describes use on Ubuntu 12.04, the version of Apache2 |
| 16 | included in that distribution is not new enough to support all OSU |
| 17 | server validation steps. In other words, it may be most adapt the steps |
| 18 | described here to Ubuntu 13.10. |
| 19 | |
| 20 | |
| 21 | Build dependencies |
| 22 | ------------------ |
| 23 | |
| 24 | Ubuntu 12.04 server |
| 25 | - default installation |
| 26 | - upgraded to latest package versions |
| 27 | sudo apt-get update |
| 28 | sudo apt-get upgrade |
| 29 | |
| 30 | Packages needed for running the service: |
| 31 | sudo apt-get install sqlite3 |
| 32 | sudo apt-get install apache2 |
| 33 | sudo apt-get install php5-sqlite libapache2-mod-php5 |
| 34 | |
| 35 | Additional packages needed for building the components: |
| 36 | sudo apt-get install build-essential |
| 37 | sudo apt-get install libsqlite3-dev |
| 38 | sudo apt-get install libssl-dev |
| 39 | sudo apt-get install libxml2-dev |
| 40 | |
| 41 | |
| 42 | Installation location |
| 43 | --------------------- |
| 44 | |
| 45 | Select a location for the installation root directory. The example here |
| 46 | assumes /home/user/hs20-server to be used, but this can be changed by |
| 47 | editing couple of files as indicated below. |
| 48 | |
| 49 | sudo mkdir -p /home/user/hs20-server |
| 50 | sudo chown $USER /home/user/hs20-server |
| 51 | mkdir -p /home/user/hs20-server/spp |
| 52 | mkdir -p /home/user/hs20-server/AS |
| 53 | |
| 54 | |
| 55 | Build |
| 56 | ----- |
| 57 | |
| 58 | # hostapd as RADIUS server |
| 59 | cd hostapd |
| 60 | |
| 61 | #example build configuration |
| 62 | cat > .config <<EOF |
| 63 | CONFIG_DRIVER_NONE=y |
| 64 | CONFIG_PKCS12=y |
| 65 | CONFIG_RADIUS_SERVER=y |
| 66 | CONFIG_EAP=y |
| 67 | CONFIG_EAP_TLS=y |
| 68 | CONFIG_EAP_MSCHAPV2=y |
| 69 | CONFIG_EAP_PEAP=y |
| 70 | CONFIG_EAP_GTC=y |
| 71 | CONFIG_EAP_TTLS=y |
| 72 | CONFIG_EAP_SIM=y |
| 73 | CONFIG_EAP_AKA=y |
| 74 | CONFIG_EAP_AKA_PRIME=y |
| 75 | CONFIG_SQLITE=y |
| 76 | CONFIG_HS20=y |
| 77 | EOF |
| 78 | |
| 79 | make hostapd hlr_auc_gw |
| 80 | cp hostapd hlr_auc_gw /home/user/hs20-server/AS |
| 81 | |
| 82 | # build hs20_spp_server |
| 83 | cd ../hs20/server |
| 84 | make clean |
| 85 | make |
| 86 | cp hs20_spp_server /home/user/hs20-server/spp |
| 87 | # prepare database (web server user/group needs to have write access) |
| 88 | mkdir -p /home/user/hs20-server/AS/DB |
| 89 | sudo chgrp www-data /home/user/hs20-server/AS/DB |
| 90 | sudo chmod g+w /home/user/hs20-server/AS/DB |
| 91 | sqlite3 /home/user/hs20-server/AS/DB/eap_user.db < sql.txt |
| 92 | sudo chgrp www-data /home/user/hs20-server/AS/DB/eap_user.db |
| 93 | sudo chmod g+w /home/user/hs20-server/AS/DB/eap_user.db |
| 94 | # add example configuration (note: need to update URLs to match the system) |
| 95 | sqlite3 /home/user/hs20-server/AS/DB/eap_user.db < sql-example.txt |
| 96 | |
| 97 | # copy PHP scripts |
| 98 | # Modify config.php if different installation directory is used. |
| 99 | # Modify PHP scripts to get the desired behavior for user interaction (or use |
| 100 | # the examples as-is for initial testing). |
| 101 | cp -r www /home/user/hs20-server |
| 102 | |
| 103 | |
| 104 | # Configure subscription policies |
| 105 | mkdir -p /home/user/hs20-server/spp/policy |
| 106 | cat > /home/user/hs20-server/spp/policy/default.xml <<EOF |
| 107 | <Policy> |
| 108 | <PolicyUpdate> |
| 109 | <UpdateInterval>30</UpdateInterval> |
| 110 | <UpdateMethod>ClientInitiated</UpdateMethod> |
| 111 | <Restriction>Unrestricted</Restriction> |
| 112 | <URI>https://policy-server.osu.example.com/hs20/spp.php</URI> |
| 113 | </PolicyUpdate> |
| 114 | </Policy> |
| 115 | EOF |
| 116 | |
| 117 | |
| 118 | # Install Hotspot 2.0 SPP and OMA DM XML schema/DTD files |
| 119 | |
| 120 | # XML schema for SPP |
| 121 | # Copy the latest XML schema into /home/user/hs20-server/spp/spp.xsd |
| 122 | |
| 123 | # OMA DM Device Description Framework DTD |
| 124 | # Copy into /home/user/hs20-server/spp/dm_ddf-v1_2.dtd |
| 125 | # http://www.openmobilealliance.org/tech/DTD/dm_ddf-v1_2.dtd |
| 126 | |
| 127 | |
| 128 | # Configure RADIUS authentication service |
| 129 | # Note: Change the URL to match the setup |
| 130 | # Note: Install AAA server key/certificate and root CA in Key directory |
| 131 | |
| 132 | cat > /home/user/hs20-server/AS/as-sql.conf <<EOF |
| 133 | driver=none |
| 134 | radius_server_clients=as.radius_clients |
| 135 | eap_server=1 |
| 136 | eap_user_file=sqlite:DB/eap_user.db |
| 137 | ca_cert=Key/ca.pem |
| 138 | server_cert=Key/server.pem |
| 139 | private_key=Key/server.key |
| 140 | private_key_passwd=passphrase |
| 141 | eap_sim_db=unix:/tmp/hlr_auc_gw.sock db=eap_sim.db |
| 142 | subscr_remediation_url=https://subscription-server.osu.example.com/hs20/spp.php |
| 143 | EOF |
| 144 | |
| 145 | # Set RADIUS passphrase for the APs |
| 146 | # Note: Modify to match the setup |
| 147 | cat > /home/user/hs20-server/AS/as.radius_clients <<EOF |
| 148 | 0.0.0.0/0 radius |
| 149 | EOF |
| 150 | |
| 151 | |
| 152 | Start RADIUS authentication server |
| 153 | ---------------------------------- |
| 154 | |
| 155 | cd /home/user/hs20-server/AS |
| 156 | ./hostapd -B as-sql.conf |
| 157 | |
| 158 | |
| 159 | Configure web server |
| 160 | -------------------- |
| 161 | |
| 162 | Edit /etc/apache2/sites-available/default-ssl |
| 163 | |
| 164 | Add following block just before "SSL Engine Switch" line": |
| 165 | |
| 166 | Alias /hs20/ "/home/user/hs20-server/www/" |
| 167 | <Directory "/home/user/hs20-server/www/"> |
| 168 | Options Indexes MultiViews FollowSymLinks |
| 169 | AllowOverride None |
| 170 | Order allow,deny |
| 171 | Allow from all |
| 172 | </Directory> |
| 173 | |
| 174 | Update SSL configuration to use the OSU server certificate/key. |
| 175 | |
| 176 | Enable default-ssl site and restart Apache2: |
| 177 | sudo a2ensite default-ssl |
| 178 | sudo a2enmod ssl |
| 179 | sudo service apache2 restart |
| 180 | |
| 181 | |
| 182 | Management UI |
| 183 | ------------- |
| 184 | |
| 185 | The sample PHP scripts include a management UI for testing |
| 186 | purposes. That is available at https://<server>/hs20/users.php |
| 187 | |
| 188 | |
| 189 | AP configuration |
| 190 | ---------------- |
| 191 | |
| 192 | APs can now be configured to use the OSU server as the RADIUS |
| 193 | authentication server. In addition, the OSU Provider List ANQP element |
| 194 | should be configured to use the SPP (SOAP+XML) option and with the |
| 195 | following Server URL: |
| 196 | https://<server>/hs20/spp.php/signup?realm=example.com |