Я пытаюсь установить сервер freeradius на свой компьютер с debian 9. Мне удалось установить его с помощью apt. Мне также удалось запустить его, принять пользователя и пароль и отклонить соединение, если вы не укажете хорошего пользователя и пароль.
Но мне нужно внедрить проверку сертификатов. Я следил за официальной документацией https://wiki.freeradius.org/guide/WPA%20HOWTO
cd /etc/freeradius/3.0/certs/
make
Он сгенерировал несколько сертификатов, и я изменил /etc/freeradius/3.0/mods-enabled/eap
tls-config tls-common {
private_key_password = whatever
private_key_file = /etc/freeradius/3.0/certs/server.key
# If Private key & Certificate are located in
# the same file, then private_key_file &
# certificate_file must contain the same file
# name.
#
# If ca_file (below) is not used, then the
# certificate_file below MUST include not
# only the server certificate, but ALSO all
# of the CA certificates used to sign the
# server certificate.
certificate_file = /etc/freeradius/3.0/certs/server.pem
# Trusted Root CA list
#
# ALL of the CA's in this list will be trusted
# to issue client certificates for authentication.
#
# In general, you should use self-signed
# certificates for 802.1x (EAP) authentication.
# In that case, this CA file should contain
# *one* CA certificate.
#
ca_file = /etc/freeradius/3.0/certs/ca.pem
Затем я настроил файл пользователя и client.conf, как указано в официальной документации. Я установил ca.pem в клиент, как показано на рисунке.
Сейчас:
И я хотел бы настроить freeradius, чтобы отклонять соединение, когда клиент не представляет действительный сертификат.
Я также попытался раскомментировать в mods-enabled / eap
# require_client_cert = yes
Но тогда freeradius больше не принимает соединения.
Вот журнал, который у меня есть, когда я пытаюсь использовать этот параметр
(5) eap_ttls: Authenticate
(5) eap_ttls: Continuing EAP-TLS
(5) eap_ttls: [eaptls verify] = ok
(5) eap_ttls: Done initial handshake
(5) eap_ttls: TLS_accept: SSLv3/TLS write server done
(5) eap_ttls: <<< recv TLS 1.2 [length 0007]
(5) eap_ttls: >>> send TLS 1.2 [length 0002]
(5) eap_ttls: ERROR: TLS Alert write:fatal:handshake failure
tls: TLS_accept: Error in error
(5) eap_ttls: ERROR: Failed in __FUNCTION__ (SSL_read): error:1417C0C7:SSL routines:tls_process_client_certificate:peer did not return a certificate
(5) eap_ttls: ERROR: System call (I/O) error (-1)
(5) eap_ttls: ERROR: TLS receive handshake failed during operation
(5) eap_ttls: ERROR: [eaptls process] = fail
(5) eap: ERROR: Failed continuing EAP TTLS (21) session. EAP sub-module failed
(5) eap: Sending EAP Failure (code 4) ID 5 length 4
(5) eap: Failed in EAP select
(5) [eap] = invalid
(5) } # authenticate = invalid
(5) Failed to authenticate the user
Итак, мой вопрос: как мне заставить freeradius проверять, присутствует ли сертификат и является ли он правильным?
Пробовал несколько дней. Так что, если кто-то уже установил сервер freeradius и готов мне помочь, было бы здорово.
Спасибо
Да я нашел ждать
Я должен включить EAP-TLS
Тогда вы должны дать Сертификат CA и сертификат пользователя
Сертификат Ca используется только для защиты соединения, а не для идентификации. Дело в том, что у клиента может не быть сертификата CA, и он все равно будет работать.
Это когда сертификат пользователя приходит на помощь. Вы можете использовать его для идентификации пользователя.
В файле
mods-enabled/eap
вы можете реализовать настраиваемую проверку. Таким образом, вы можете реализовать свой собственный сценарий. И вы можете использовать
%{TLS-Client-Cert-Filename}
переменная для получения сертификата пользователя.
Затем вы передаете его своему сценарию и выполняете проверку самостоятельно. Ты можешь использовать:
openssl verify
Сделать это или что-нибудь еще. Мой сценарий:
/etc/freeradius/3.0/scripts/log.sh
Это выход 0 при успехе и выход 1 при неудаче. И таким образом разрешить или запретить доступ пользователю.
Вот мой файл конфигурации с поддержкой модов / eap для тех, кому может понадобиться
verify {
# If the OCSP checks succeed, the verify section
# is run to allow additional checks.
#
# If you want to skip verify on OCSP success,
# uncomment this configuration item, and set it
# to "yes".
#skip_if_ocsp_ok = no
# A temporary directory where the client
# certificates are stored. This directory
# MUST be owned by the UID of the server,
# and MUST not be accessible by any other
# users. When the server starts, it will do
# "chmod go-rwx" on the directory, for
# security reasons. The directory MUST
# exist when the server starts.
#
# You should also delete all of the files
# in the directory when the server starts.
tmpdir = /tmp/radiusd
# The command used to verify the client cert.
# We recommend using the OpenSSL command-line
# tool.
#
# The ${..ca_path} text is a reference to
# the ca_path variable defined above.
#
# The %{TLS-Client-Cert-Filename} is the name
# of the temporary file containing the cert
# in PEM format. This file is automatically
# deleted by the server when the command
# returns.
client = "/bin/bash /etc/freeradius/3.0/scripts/log.sh %{TLS-Client-Cert-Filename} %{Client-IP-Address}"
}
Клиентская часть важна.