2013-03-28 09:27:27 +01:00
|
|
|
Hotspot 2.0 OSU server
|
|
|
|
======================
|
|
|
|
|
|
|
|
The information in this document is based on the assumption that Ubuntu
|
2018-04-30 16:44:28 +02:00
|
|
|
16.04 server (64-bit) distribution is used and the web server is
|
2013-03-28 09:27:27 +01:00
|
|
|
Apache2. Neither of these are requirements for the installation, but if
|
|
|
|
other combinations are used, the package names and configuration
|
|
|
|
parameters may need to be adjusted.
|
|
|
|
|
|
|
|
NOTE: This implementation and the example configuration here is meant
|
|
|
|
only for testing purposes in a lab environment. This design is not
|
|
|
|
secure to be installed in a publicly available Internet server without
|
|
|
|
considerable amount of modification and review for security issues.
|
|
|
|
|
|
|
|
|
|
|
|
Build dependencies
|
|
|
|
------------------
|
|
|
|
|
2018-04-30 16:44:28 +02:00
|
|
|
Ubuntu 16.04 server
|
2013-03-28 09:27:27 +01:00
|
|
|
- default installation
|
|
|
|
- upgraded to latest package versions
|
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get upgrade
|
|
|
|
|
|
|
|
Packages needed for running the service:
|
|
|
|
sudo apt-get install sqlite3
|
|
|
|
sudo apt-get install apache2
|
2018-04-30 16:44:28 +02:00
|
|
|
sudo apt-get install php-sqlite3 php-xml libapache2-mod-php
|
2013-03-28 09:27:27 +01:00
|
|
|
|
|
|
|
Additional packages needed for building the components:
|
|
|
|
sudo apt-get install build-essential
|
|
|
|
sudo apt-get install libsqlite3-dev
|
|
|
|
sudo apt-get install libssl-dev
|
|
|
|
sudo apt-get install libxml2-dev
|
|
|
|
|
|
|
|
|
|
|
|
Installation location
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
Select a location for the installation root directory. The example here
|
|
|
|
assumes /home/user/hs20-server to be used, but this can be changed by
|
|
|
|
editing couple of files as indicated below.
|
|
|
|
|
|
|
|
sudo mkdir -p /home/user/hs20-server
|
|
|
|
sudo chown $USER /home/user/hs20-server
|
|
|
|
mkdir -p /home/user/hs20-server/spp
|
|
|
|
mkdir -p /home/user/hs20-server/AS
|
|
|
|
|
|
|
|
|
|
|
|
Build
|
|
|
|
-----
|
|
|
|
|
|
|
|
# hostapd as RADIUS server
|
|
|
|
cd hostapd
|
|
|
|
|
|
|
|
#example build configuration
|
|
|
|
cat > .config <<EOF
|
|
|
|
CONFIG_DRIVER_NONE=y
|
|
|
|
CONFIG_PKCS12=y
|
|
|
|
CONFIG_RADIUS_SERVER=y
|
|
|
|
CONFIG_EAP=y
|
|
|
|
CONFIG_EAP_TLS=y
|
|
|
|
CONFIG_EAP_MSCHAPV2=y
|
|
|
|
CONFIG_EAP_PEAP=y
|
|
|
|
CONFIG_EAP_GTC=y
|
|
|
|
CONFIG_EAP_TTLS=y
|
|
|
|
CONFIG_EAP_SIM=y
|
|
|
|
CONFIG_EAP_AKA=y
|
|
|
|
CONFIG_EAP_AKA_PRIME=y
|
|
|
|
CONFIG_SQLITE=y
|
|
|
|
CONFIG_HS20=y
|
|
|
|
EOF
|
|
|
|
|
|
|
|
make hostapd hlr_auc_gw
|
|
|
|
cp hostapd hlr_auc_gw /home/user/hs20-server/AS
|
|
|
|
|
|
|
|
# build hs20_spp_server
|
|
|
|
cd ../hs20/server
|
|
|
|
make clean
|
|
|
|
make
|
|
|
|
cp hs20_spp_server /home/user/hs20-server/spp
|
|
|
|
# prepare database (web server user/group needs to have write access)
|
|
|
|
mkdir -p /home/user/hs20-server/AS/DB
|
|
|
|
sudo chgrp www-data /home/user/hs20-server/AS/DB
|
|
|
|
sudo chmod g+w /home/user/hs20-server/AS/DB
|
|
|
|
sqlite3 /home/user/hs20-server/AS/DB/eap_user.db < sql.txt
|
|
|
|
sudo chgrp www-data /home/user/hs20-server/AS/DB/eap_user.db
|
|
|
|
sudo chmod g+w /home/user/hs20-server/AS/DB/eap_user.db
|
|
|
|
# add example configuration (note: need to update URLs to match the system)
|
|
|
|
sqlite3 /home/user/hs20-server/AS/DB/eap_user.db < sql-example.txt
|
|
|
|
|
|
|
|
# copy PHP scripts
|
|
|
|
# Modify config.php if different installation directory is used.
|
|
|
|
# Modify PHP scripts to get the desired behavior for user interaction (or use
|
|
|
|
# the examples as-is for initial testing).
|
|
|
|
cp -r www /home/user/hs20-server
|
|
|
|
|
2018-04-30 16:58:34 +02:00
|
|
|
# Create /home/user/hs20-server/terms-and-conditions file (HTML segment to be
|
|
|
|
# inserted within the BODY section of the page).
|
|
|
|
cat > /home/user/hs20-server/terms-and-conditions <<EOF
|
|
|
|
<P>Terms and conditions..</P>
|
|
|
|
EOF
|
|
|
|
|
2015-04-01 02:14:17 +02:00
|
|
|
# Build local keys and certs
|
|
|
|
cd ca
|
|
|
|
# Display help options.
|
|
|
|
./setup.sh -h
|
|
|
|
|
|
|
|
# Remove old keys, fill in appropriate values, and generate your keys.
|
|
|
|
# For instance:
|
|
|
|
./clean.sh
|
|
|
|
rm -fr rootCA"
|
|
|
|
old_hostname=myserver.local
|
2017-02-11 10:38:23 +01:00
|
|
|
./setup.sh -C "Hotspot 2.0 Trust Root CA - CT" \
|
|
|
|
-o $old_hostname-osu-client \
|
2015-04-01 02:14:17 +02:00
|
|
|
-O $old_hostname-oscp -p lanforge -S $old_hostname \
|
|
|
|
-V $old_hostname-osu-revoked \
|
|
|
|
-m local -u http://$old_hostname:8888/
|
2013-03-28 09:27:27 +01:00
|
|
|
|
|
|
|
# Configure subscription policies
|
|
|
|
mkdir -p /home/user/hs20-server/spp/policy
|
|
|
|
cat > /home/user/hs20-server/spp/policy/default.xml <<EOF
|
|
|
|
<Policy>
|
|
|
|
<PolicyUpdate>
|
|
|
|
<UpdateInterval>30</UpdateInterval>
|
|
|
|
<UpdateMethod>ClientInitiated</UpdateMethod>
|
|
|
|
<Restriction>Unrestricted</Restriction>
|
|
|
|
<URI>https://policy-server.osu.example.com/hs20/spp.php</URI>
|
|
|
|
</PolicyUpdate>
|
|
|
|
</Policy>
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
# Install Hotspot 2.0 SPP and OMA DM XML schema/DTD files
|
|
|
|
|
|
|
|
# XML schema for SPP
|
|
|
|
# Copy the latest XML schema into /home/user/hs20-server/spp/spp.xsd
|
|
|
|
|
|
|
|
# OMA DM Device Description Framework DTD
|
|
|
|
# Copy into /home/user/hs20-server/spp/dm_ddf-v1_2.dtd
|
|
|
|
# http://www.openmobilealliance.org/tech/DTD/dm_ddf-v1_2.dtd
|
|
|
|
|
|
|
|
|
|
|
|
# Configure RADIUS authentication service
|
|
|
|
# Note: Change the URL to match the setup
|
|
|
|
# Note: Install AAA server key/certificate and root CA in Key directory
|
|
|
|
|
|
|
|
cat > /home/user/hs20-server/AS/as-sql.conf <<EOF
|
|
|
|
driver=none
|
|
|
|
radius_server_clients=as.radius_clients
|
|
|
|
eap_server=1
|
|
|
|
eap_user_file=sqlite:DB/eap_user.db
|
|
|
|
ca_cert=Key/ca.pem
|
|
|
|
server_cert=Key/server.pem
|
|
|
|
private_key=Key/server.key
|
|
|
|
private_key_passwd=passphrase
|
|
|
|
eap_sim_db=unix:/tmp/hlr_auc_gw.sock db=eap_sim.db
|
|
|
|
subscr_remediation_url=https://subscription-server.osu.example.com/hs20/spp.php
|
|
|
|
EOF
|
|
|
|
|
|
|
|
# Set RADIUS passphrase for the APs
|
|
|
|
# Note: Modify to match the setup
|
|
|
|
cat > /home/user/hs20-server/AS/as.radius_clients <<EOF
|
|
|
|
0.0.0.0/0 radius
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
Start RADIUS authentication server
|
|
|
|
----------------------------------
|
|
|
|
|
|
|
|
cd /home/user/hs20-server/AS
|
|
|
|
./hostapd -B as-sql.conf
|
|
|
|
|
|
|
|
|
2015-04-01 02:14:17 +02:00
|
|
|
OSEN RADIUS server configuration notes
|
|
|
|
|
|
|
|
The OSEN RADIUS server config file should have the 'ocsp_stapling_response'
|
|
|
|
configuration in it. For example:
|
|
|
|
|
|
|
|
# hostapd-radius config for the radius used by the OSEN AP
|
|
|
|
interface=eth0#0
|
|
|
|
driver=none
|
|
|
|
logger_syslog=-1
|
|
|
|
logger_syslog_level=2
|
|
|
|
logger_stdout=-1
|
|
|
|
logger_stdout_level=2
|
|
|
|
ctrl_interface=/var/run/hostapd
|
|
|
|
ctrl_interface_group=0
|
|
|
|
eap_server=1
|
|
|
|
eap_user_file=/home/user/hs20-server/AS/hostapd-osen.eap_user
|
|
|
|
server_id=ben-ota-2-osen
|
|
|
|
radius_server_auth_port=1811
|
|
|
|
radius_server_clients=/home/user/hs20-server/AS/hostap.radius_clients
|
|
|
|
|
|
|
|
ca_cert=/home/user/hs20-server/ca/ca.pem
|
|
|
|
server_cert=/home/user/hs20-server/ca/server.pem
|
|
|
|
private_key=/home/user/hs20-server/ca/server.key
|
|
|
|
private_key_passwd=whatever
|
|
|
|
|
|
|
|
ocsp_stapling_response=/home/user/hs20-server/ca/ocsp-server-cache.der
|
|
|
|
|
|
|
|
The /home/user/hs20-server/AS/hostapd-osen.eap_user file should look
|
|
|
|
similar to this, and should coorelate with the osu_nai entry in
|
|
|
|
the non-OSEN VAP config file. For instance:
|
|
|
|
|
|
|
|
# cat hostapd-osen.eap_user
|
|
|
|
# For OSEN authentication (Hotspot 2.0 Release 2)
|
|
|
|
"osen@w1.fi" WFA-UNAUTH-TLS
|
|
|
|
|
|
|
|
|
|
|
|
# Run OCSP server:
|
|
|
|
cd /home/user/hs20-server/ca
|
|
|
|
./ocsp-responder.sh&
|
|
|
|
|
|
|
|
# Update cache (This should be run periodically)
|
|
|
|
./ocsp-update-cache.sh
|
|
|
|
|
|
|
|
|
2013-03-28 09:27:27 +01:00
|
|
|
Configure web server
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
Edit /etc/apache2/sites-available/default-ssl
|
|
|
|
|
|
|
|
Add following block just before "SSL Engine Switch" line":
|
|
|
|
|
|
|
|
Alias /hs20/ "/home/user/hs20-server/www/"
|
|
|
|
<Directory "/home/user/hs20-server/www/">
|
|
|
|
Options Indexes MultiViews FollowSymLinks
|
|
|
|
AllowOverride None
|
2018-04-30 16:44:28 +02:00
|
|
|
Require all granted
|
2018-12-03 23:15:04 +01:00
|
|
|
SSLOptions +StdEnvVars
|
2013-03-28 09:27:27 +01:00
|
|
|
</Directory>
|
|
|
|
|
|
|
|
Update SSL configuration to use the OSU server certificate/key.
|
2015-04-01 02:14:17 +02:00
|
|
|
They keys and certs are called 'server.key' and 'server.pem' from
|
|
|
|
ca/setup.sh.
|
2013-03-28 09:27:27 +01:00
|
|
|
|
2018-12-03 23:15:04 +01:00
|
|
|
To support subscription remediation using client certificates, set
|
|
|
|
"SSLVerifyClient optional" and configure the trust root CA(s) for the
|
|
|
|
client certificates with SSLCACertificateFile.
|
|
|
|
|
2013-03-28 09:27:27 +01:00
|
|
|
Enable default-ssl site and restart Apache2:
|
|
|
|
sudo a2ensite default-ssl
|
|
|
|
sudo a2enmod ssl
|
|
|
|
sudo service apache2 restart
|
|
|
|
|
|
|
|
|
|
|
|
Management UI
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The sample PHP scripts include a management UI for testing
|
|
|
|
purposes. That is available at https://<server>/hs20/users.php
|
|
|
|
|
|
|
|
|
|
|
|
AP configuration
|
|
|
|
----------------
|
|
|
|
|
|
|
|
APs can now be configured to use the OSU server as the RADIUS
|
|
|
|
authentication server. In addition, the OSU Provider List ANQP element
|
|
|
|
should be configured to use the SPP (SOAP+XML) option and with the
|
|
|
|
following Server URL:
|
|
|
|
https://<server>/hs20/spp.php/signup?realm=example.com
|