FreeRadius для EAP-TLS

Дано: ubuntu 16.04, точка доступа Tp-link dir 655.

Задача: настроить авторизацию для wifi eap-tls.
Будем использовать freeRADIUS для авторизации по сертификату (eap-tls)
Используются самоподписанные сертификаты (openssl)

1. Установка сервера.
apt-get install freeradius
Почему проще начать с установки сервера? Что бы создавать сертификаты сразу в необходимой директории.

2. Генерирование сертификатов.

2.1. Сначала необходимо сгенерировать ключ и сертификат центра сертификации.

Перейдем в директорию сертфикатов для freeRADIUS:
cd /etc/freeradius/certs/
Сгенерируем ключ CA (имя файла с ключом — CA.key):
openssl genrsa -des3 -out CA.key
И сертификат CA (имя файла с сертификатом — CA.crt):
req -new -x509 -days 3650 -key CA.key -out CA.crt
На этапе создания сертификата самый важный момент — заполнить Common Name — уникальное имя центра сертификации.

2.1.1 Дополнить openssl.cng для избежания проблем с сертификатами на windows. В принципе, такая секция уже добавлена в скрипт генерации клиентского и серверного сертификата, но для верности стоит.

[ new_oids ]
...
serverAuth = 1.3.6.1.5.5.7.3.1
clientAuth = 1.3.6.1.5.5.7.3.2

[ usr_cert ]
...
extendedKeyUsage = serverAuth

Записи необходимо добавить в соответствующие секции конфига.

2.2 Генерация серверного и пользовательского сертификатов.

Для этого используем скрипт sign_cert (wp запрещает .sh и без расширения, так что после скачивания необходимо поменять расширение на .sh и дать права на выполнение)
Скрипт генерирует серверный и клиентский сертификат, последние умеет генерировать в формате p12.
В скрипте необходимо поправить пункты:

ROOTCA="/common_name/"
#root CA name

O=""
C=""
ST=""
L=""
OU=""
EMAIL=""

2.2.1 Генерация серверного сертификата

./sign_cert.sh server_cert radius.crt

Серверный сертификат будет создан в certificates/, полный путь, с учетом перехода до этого, это будет /etc/freeradius/certs/certificates

2.2.2 Генерация пользовательского сертификата.
./sign_cert.sh client_cert test_user

3. Настройка freeRADIUS.

3.1. clients.conf
Необходимо добавить
client 192.168.x.x {
secret = password
shortname = ap1
}

Эта секция задает пароль доступа wi-fi точки к радиус-серверу и короткое имя для индексации в логах.

3.2. radiusd.conf
Проверить наличие $INCLUDE ${confdir}/eap.conf

3.3. eap.conf

Секция eap{ }
default_eap_type = tls

Секция tls {}
tls {
private_key_password = # пароль, которым закрыт ключ серверного сертификата
private_key_file = ${certdir}/certificates/radius.key # ключ серверного сертификата
certificate_file = ${certdir}/certificates/radius.crt # серверный сертификат
CA_file = ${cadir}/CA.crt # сертификат центра сертификации
...
}

Не указанное здесь можно оставить без изменений.

И, наконец, можно запускать freeRADIUS.

Либо service freeradius start
Либо в режиме отладки freeradius -X

4. Настройка клиента Windows.
Для windows необходимо запустить консоль (mmc.exe) и добавить в нее оснастку «Сертификаты» для локального компьютера. Импортировать корневой сертификат в доверенные центры сертификации (CA.crt) и импортировать личный пользовательский сертификат в личное хранилище.
Затем необходимо настроить беспроводную сеть — «центр управления сетями и общим доступом» -> «управление беспроводными сетями» -> «Добавить»
В свойствах новой беспроводной сети необходимо выбрать тип безопасности «WPA-Enterprise», метод проверки подлинности сети — «Смарт-карта или иной сертификат». В параметрах необходимо отметить в доверенных корневых центрах сертификации импортированный корневой сертификат.

5. Настройка точки доступа.
Для TP-Link: в настройке безопасности wi-fi необходимо выбрать «WPA-Enterprise/WPA2-Enterprise»
В поле настройки доступа к радиус-серверу необходимо ввести соответствующий радиус-серверу ip и пароль, который был задан в clients.conf

Затем можно подключаться с клиента.