Настройка взаимной аутентификации Apache

Я думаю, вам следует использовать wpa _supplicant вместо NetworkManager.

Есть несколько сообщений, описывающих эту ошибку, например здесь . Какой-то пост заключил его как решенный, а какой-то - как нерешенный. Мне просто не удалось понять, как настроить NetworkManager для работы с моим USB-накопителем Wi-Fi.

Я использую CentOS7 3.10.0 -514.10.2.el7.x86 _64 и TP -link TL -WDN5200 usb wifi stick с mt7610u внутри.

  1. После того, как я установил драйвер, я подключил его к своему Wi-Fi с помощью : sudo wpa_passphrase xdhtc >> /etc/wpa_supplicant.conf # type in the passphrase and hit enter sudo wpa_supplicant -B -Dwext -ira0 -c/etc/wpa_supplicant.conf # -B background sudo dhclient ra0

Вы также можете попробовать iw вместо wpa _supplicant, если ваш чип Wi-Fi поддерживает nl80211.

  1. Вы также можете убедиться, что NetworkManager не управляет этой беспроводной сетью. Я попытался позволить NetworkManager и wpa _просителю работать параллельно. Работать они будут без больших проблем, но состояние интерфейса явно не синхронизируется. Поэтому я добавляю эти строки в /etc/NetworkManager/NetworkManager.conf, чтобы настроить NM игнорировать мое соединение Wi-Fi:

    [main]
    plugins=keyfile
    [keyfile]
    unmanaged-devices=interface-name:ra0

  2. Я поместил этот скрипт под ~/.config/autostart/, чтобы Wi-Fi запускался вместе с ОС, и настроил только один ip через это беспроводное соединение.

    sudo wpa_supplicant -B -Dwext -ira0 -c/etc/wpa_supplicant.conf
    sudo dhclient ra0
    sudo ip r add xx.xx.xx.xx via 192.168.2.1 dev ra0
    sudo ip r del default via 192.168.2.1 dev ra0

Подскажите, пожалуйста, есть ли какой-нибудь элегантный способ решить эту проблему.

2
12.01.2020, 12:37
1 ответ

Вы можете ознакомиться с любым из нескольких онлайн-руководств по этой теме.

В основном вы обычно активируете TLS, а затем добавляете правило авторизации, для которого потребуется сертификат клиента:

SSLVerifyClient require

Это приведет к сбою доступа, и браузер попросит клиента выбрать один из доступных сертификатов, которые должны быть уже установлены в клиентской операционной системе или браузере . Как только выбранный сертификат будет загружен в клиент, он будет автоматически отправлен на сервер.

Теперь добавление также SSLOptions +StdEnvVarsукажет Apache извлечь информацию из сертификата, что позволит вам различать пользователей.

Теперь у вас есть эта ценная информация в среде, и вы можете использовать ее для дальнейшей аутентификации либо в приложении, либо в Apache.

Переменные окружения, которые вам нужны, вероятно, SSL_CLIENT_S_<something>. SSL_CLIENT_S_DN_CN— общее имя в сертификате клиента. Затем вы можете ограничить параметры клиентов, как хотите:

SSLRequireSSL
SSLOptions  +StdEnvVars +ExportCertData +OptRenegotiate +FakeBasicAuth
SSLVerifyClient   require
SSLRequire %{SSL_CLIENT_I_DN_CN} eq "Issuer DN's Common Name"
       and %{SSL_CLIENT_S_DN_O}  eq "Subject DN's Organisation"
       and %{SSL_CLIENT_S_DN_CN} eq "Leonardo Serni"

Обратите внимание, что, как правильно указал @UlrichSchwarz, вы должны принудительно использовать центр сертификации . В противном случае любой мог бы сам -подписать сертификат, подтверждающий что угодно , и вам было бы все равно.

Таким образом, вам следует создать собственный ЦС и использовать этот для создания подписанных сертификатов, которые затем будут распространяться среди ваших клиентов.

UPDATE:I переменные относятся к (I )ssuer, а S относятся к (S )субъекту, что то есть тот, кто выполняет аутентификацию (, то есть ваш клиент ). Вы можете найти полный список и их значение в документации по mod_ssl.

3
28.04.2021, 23:25

Теги

Похожие вопросы