Настройка подключения к WPA2 Enterprise (PEAP / MSCHAPv2) с двухуровневым сертификатом

В течение долгого времени я смог использовать NetworkManager + wpa_supplicant, настроенный в Debian 7, для подключения к безопасной беспроводной сети на работе (WPA2 Enterprise с аутентификацией PEAP + MSCHAPv2).

Недавно я хочу повысить безопасность соединения, включив сертификат сервера в настройку подключения к Network Manager. Я получил два ключа PEM от сетевого администратора:

  • radius1.pem – сертификат RADIUS
  • globalsign_intermediary.pem – промежуточный сертификат

Сертификат RADIUS зависит от подлинности посредника за его подлинность; и промежуточный сертификат зависит от конечного корневого центра сертификации от GlobalSign.

Вот моя цель : я хочу, чтобы мой ноутбук проверял подлинность точки доступа Wi-Fi, когда я подключаюсь к сети Wi-Fi. Как установить эти сертификаты в настройках соединения ( /etc/NetworkManager/system-connections/THE-AP-NAME файл /etc/NetworkManager/system-connections/THE-AP-NAME ), чтобы я мог выполнить эту задачу? Конкретно: какой файл следует указывать где (например, какой конфигурационный файл) и какие дополнительные шаги необходимы для проверки сертификатов сервера? Я спрашиваю об этом здесь, так как все, что я нашел в другом месте, это проверка с 1-ступенчатым сертификатом, в которой сертификат, вероятно, зависит от хорошо установленного корневого СА, а не от промежуточного центра сертификации, как в моем случае.

В настоящее время это содержимое файла настроек подключения (XXXX и YYYY обозначены скрытой информацией):

 [ipv6] method=ignore [connection] id=XXXXXXXXX uuid=XXXXXXXXX type=802-11-wireless timestamp=1436377448 [802-11-wireless-security] key-mgmt=wpa-eap [802-11-wireless] ssid=XXXXXXXXX mode=infrastructure seen-bssids=XXXXXXXXX security=802-11-wireless-security [802-1x] eap=peap; identity=XXXXXXXXX password=YYYYYYYYY ca-cert=/etc/NetworkManager/certs/work/globalsign_intermediary.pem phase2-auth=mschapv2 [ipv4] method=auto и [ipv6] method=ignore [connection] id=XXXXXXXXX uuid=XXXXXXXXX type=802-11-wireless timestamp=1436377448 [802-11-wireless-security] key-mgmt=wpa-eap [802-11-wireless] ssid=XXXXXXXXX mode=infrastructure seen-bssids=XXXXXXXXX security=802-11-wireless-security [802-1x] eap=peap; identity=XXXXXXXXX password=YYYYYYYYY ca-cert=/etc/NetworkManager/certs/work/globalsign_intermediary.pem phase2-auth=mschapv2 [ipv4] method=auto 

Как вы видите, я использовал файл сертификата-посредника. Но это было неправильно. Также не было права использовать только файл сертификата RADIUS. В любом случае, я получил следующую ошибку в syslog :

 Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-STARTED EAP authentication started Jul 8 12:02:37 wirawan1 kernel: [3880972.051159] wlan0: Limiting TX power to 20 (20 - 0) dBm as advertised by xx:xx:xx:xx:xx Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25 Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: tls_connection_ca_cert - Failed to load root certificates error:00000000:lib(0):func(0):reason(0) Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: TLS: Certificate verification failed, error 20 (unable to get local issuer certificate) depth 1 for '/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-TLS-CERT-ERROR reason=1 depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' err='unable to get local issuer certificate' Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: SSL: SSL3 alert: write (local SSL3 detected an error):fatal:unknown CA Jul 8 12:02:37 wirawan1 wpa_supplicant[3638]: OpenSSL: openssl_handshake - SSL_connect error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed Jul 8 12:02:38 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-FAILURE EAP authentication failed Jul 8 12:02:40 wirawan1 wpa_supplicant[3638]: wlan0: Authentication with xx:xx:xx:xx:xx timed out. 

По-видимому, цепочка доверия не может быть установлена.

Аппаратное обеспечение (lspci):

 03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection 

Он использует драйвер iwlwifi + iwldvm. Версия ядра 3.12.9-1~bpo70+1 (2014-02-07) , из пакета debian backport linux-image-3.12-0.bpo.1-amd64 .

Я не новичок в Linux, но на самом деле не знаю, как бороться с безопасностью x509 и / или SSL / TLS в Linux, поэтому, пожалуйста, ответьте пошаговую инструкцию. Гуглинг вокруг, чтобы найти ответ на эту проблему, оставил меня расстроенным. Документация просителя WPA очень тонка при обсуждении сертификатов использования в сочетании с WPA2 Enterprise. И NetworkManager имеет еще более плохую документацию.

Спасибо, Wirawan

Я закончил разговор с ИТ-подразделением организации и легко решил проблему. Моя ошибка состоит из нескольких ошибок:

  • включая неправильный сертификат
  • не включая правый корневой сертификат
  • не заказывая сертификаты в правильном порядке

Файл «CA certificate» должен быть одним текстовым файлом (формат PEM), содержащим список сертификатов, скованный в порядке доверия (наименее доверенный, самый надежный в прошлом). Сертификат RADIUS не обязательно должен быть включен (и не должен быть). Сертификат RADIUS также имеет самый короткий срок службы. Мы должны включать сертификаты upstream до корневого сертификата, чтобы этот подход работал. В моем случае порядок доверия подобен (от наименьшего до самого доверенного):

 RADIUS cert -> intermediary cert -> root cert 

Предупреждение: Ваш случай может быть совсем другим. ИТ-специалист сказал мне, что мой корневой сертификат «GlobalSign Root R1», который имеет следующий серийный номер:

 04:00:00:00:00:01:15:4b:5a:c3:94 

Я бы не смог найти это без его помощи. Я загрузил корневой сертификат с сайта GlobalSign (см. Ниже), а затем преобразовал двоичный сертификат в формат PEM:

 $ openssl x509 -inform der -in Root-R1.crt -out Root-R1.pem 

затем приручил сертификаты как root

 # cat globalsign_intermediary.pem Root-R1.pem > /etc/NetworkManager/certs/work/all-certs.pem 

и включил полный путь all-certs.pem в настройке подключения NetworkManager (через графический интерфейс или редактирование текстового файла, который я указал в вопросе). Теперь перезапустите NetworkManager – в моем поле debian это означает:

 # service networkmanager restart 

После перезапуска я смог проверить подлинность AP как указано в syslog:

 Jul 8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25 Jul 8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-METHOD EAP vendor 0 method 25 (PEAP) selected Jul 8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=2 subject='/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA' Jul 8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=1 subject='/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2' Jul 8 16:03:32 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-PEER-CERT depth=0 subject='/C=US/XXXXXX (details removed)' Jul 8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-MSCHAPV2: Authentication succeeded Jul 8 16:03:33 wirawan1 wpa_supplicant[3638]: EAP-TLV: TLV Result - Success - EAP-TLV/Phase2 Completed Jul 8 16:03:33 wirawan1 wpa_supplicant[3638]: wlan0: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully 

Вот так. Надеюсь, этот ответ может помочь кому-то еще. Мне потребовалось много пота, чтобы понять это.

Wirawan

Больше подробностей

Для заинтересованных, промежуточный сертификат имеет следующий предмет:

 subject= /C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - G2 

Этот «организационный» CA должен использовать ключ R1, как показано ниже:

 https://support.globalsign.com/customer/portal/articles/1426602-globalsign-root-certificates