Versão avaliada: Fedora 42, 44
Após a instalação do FreeRADIUS, realizar backup do diretório "certs" do serviço.
Os parâmetros abaixo são opcionais, bastando executar o comando ./bootstarp sem as alterações informadas abaixo para criar os certificados necessários para o funcionamento do FreeRADIUS. Detalhe, o prazo do certificado é de 60 dias, portanto será necessário atualizar o certificado frequentemente.
# cd /etc/raddb/
# cp -a certs certs.default <- backup do arquivo original (opcional)
# cd certs
Para personalizar o certificado com as configurações de seu ambiente, alterar os arquivos abaixo, os principais parâmetros estão em negrito.
# vi passwords.mk
PASSWORD_SERVER = 'whatever'
PASSWORD_INNER = 'whatever'
PASSWORD_CA = 'whatever'
PASSWORD_CLIENT = 'whatever'
USER_NAME = 'user@example.org'
CA_DEFAULT_DAYS = '3560'
Nota: Tive problemas na geração dos arquivos de certificado quando altero a senha dos parâmetros acima.
Acesse o arquivo CA (Certificado Autoritativo).
# cd /etc/raddb/certs
# vi ca.cnf
....
[certificate_authority]
countryName = BR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
commonName = "FreeRADIUS Certificate Authority"
....
Acesse o arquivo Server.
# vi server.cnf
....
[server]
countryName = BR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
commonName = "<hostname>.<domain>"
....
[alt_names]
DNS.1 = <hostname>.<domain>
....
Gere a nova estrutura:
# make
Criar o arquivo "Diffie-Hellman" (Avaliar se necessario pois no arquivo EAP foi comentada linha)
# openssl dhparam -check -text -5 -out /etc/raddb/certs/dh 2048 <- Valores 1024|2048|4096
Arquivo de configuração do serviço EAP
# vi /etc/raddb/mods-available/eap
....
eap {
....
timer_expire = 60
ignore_unknown_eap_types = no
max_sessions = 1000
....
tls-config tls-common {
private_key_password = 'whatever'
private_key_file = ${certdir}/server.pem
certificate_file = ${certdir}/server.pem
ca_file = ${certdir}/ca.pem
#dh_file = ${certdir}/dh
....
#disable_tlsv1_1 = yes
#disable_tlsv1 = yes
....
tls_min_version = "1.2"
tls_max_version = "1.3"
....
ecdh_curve = "prime256v1"
allow_renegotiation = no
....
cipher_list = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305"
cipher_server_preference = yes
....
cache {
enable = yes
lifetime = 24 # hours
max_entries = 255
....
Arquivo de configuração do serviço TLS
# /etc/raddb/sites-available/tls
listen {
....
tls {
....
private_key_password = whatever
....
home_server tls {
....
tls {
....
private_key_password = whatever
....
Execute o RADIUS em modo debug para avaliar o funcionamento:
# radiusd -X
Caso o comando acima retorne o funcionamento corretamente é possível iniciar o serviço com o comando abaixo:
# systemctl enable radiusd.service && systemctl restart radiusd.service
Com o comando abaixo é possível realizar o teste de funcionamento do serviço:
# radtest steve testing 127.0.0.1 1812 testing123
Sent Access-Request Id 136 from 0.0.0.0:36800 to 127.0.0.1:1812 length 75
User-Name = "steve"
User-Password = "testing"
NAS-IP-Address = 10.1.10.251
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "testing"
Received Access-Reject Id 136 from 127.0.0.1:1812 to 127.0.0.1:36800 length 38
Message-Authenticator = 0xff0ec9b72d2b2bf37ccbf44473b58e29
(0) -: Expected Access-Accept got Access-Reject
Para renovar o certificado siga os passos abaixo.
Mova o certificado velho para um local diferente.
# cd /etc/raddb/certs
# mkdir OLDCerts && mv *.pem *.key OLDCerts/
O comando abaixo auxilia na remoção dos arquivos não mais necessarios.
# make destroycerts
rm -f *~ dh *.csr *.crt *.p12 *.der *.pem *.key index.txt* \
serial* *\.0 *\.1 ca-crl.pem ca.crl
Remove os arquivos temporários/antigos para garantir que os novos .cnf sejam lidos corretamente:
# make clean
Criar o arquivo "Diffie-Hellman"
# openssl dhparam -check -text -5 -out /etc/raddb/certs/dh 2048
Execute o script bootstrap para realizar a criação do certificado com os novos parâmetros.
# systemctl restart radiusd.service
Arquivo Client, usado para disponibilizar a outros dispositivos o certificado para gerar confiança no acesso por EAP-TLS: (Opcional)
# vi client.cnf
....
[client]
countryName = BR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@local.domain
commonName = admin@local.domain
Para gerar um certificado específico baseado no client.cnf
# make client
Arquivo INNER, usando para criar tunel TLS em conjunto com EAP-TTLS: (Opcional)
# vi inner-server.cnf
....
[server]
countryName = BR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@local.domain
commonName = "FreeRADIUS Inner Server Certificate"
Arquivo de configuração do serviço INNER-EAP
# vi /etc/raddb/mods-available/inner-eap
....
tls {
private_key_password = changeit
....
Não usei
###################################### vi /etc/raddb/certs/xpextensions
[ xpserver_ext]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
crlDistributionPoints = URI:http://www.example.com/example_ca.crl
subjectAltName = @alt_names
[alt_names]
DNS.1 = hl251.local.domain
# NAIRealm from RFC 7585
otherName.0 = 1.3.6.1.5.5.7.8.8;FORMAT:UTF8,UTF8:*.local.domain
Execute o script bootstrap para realizar a criação do certificado com os novos parâmetros.
# ./bootstrap
Gere a nova estrutura CA:
# make ca
Gere a nova estrutura CA:
# make server