diff --git a/net/freeradius/Makefile b/net/freeradius/Makefile index 7b07c9567..56558aa9b 100644 --- a/net/freeradius/Makefile +++ b/net/freeradius/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= freeradius -PLUGIN_VERSION= 1.9.20 +PLUGIN_VERSION= 1.9.21 PLUGIN_COMMENT= RADIUS Authentication, Authorization and Accounting Server PLUGIN_DEPENDS= freeradius3 PLUGIN_MAINTAINER= m.muenz@gmail.com diff --git a/net/freeradius/pkg-descr b/net/freeradius/pkg-descr index 48342d041..5b5df9231 100644 --- a/net/freeradius/pkg-descr +++ b/net/freeradius/pkg-descr @@ -15,6 +15,10 @@ The server is fast, feature-rich, modular, and scalable. Plugin Changelog ================ +1.9.21 + +* Add Certificate, StartTLS and Server port for LDAP Connection + 1.9.20 * Remove TTLS-GTC from Default EAP Type (#2421) diff --git a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/ldap.xml b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/ldap.xml index 29cb57c69..be7d1affd 100644 --- a/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/ldap.xml +++ b/net/freeradius/src/opnsense/mvc/app/controllers/OPNsense/Freeradius/forms/ldap.xml @@ -17,6 +17,24 @@ text Set the hostname or IP address to connect to. + + ldap.serverport + + text + Set the port to connect + + + ldap.ldapcert + + dropdown + Certificate to use to connect + + + ldap.ldapstarttls + + checkbox + Start TLS + ldap.identity diff --git a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Ldap.xml b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Ldap.xml index 53b4f55b5..0ee417c47 100644 --- a/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Ldap.xml +++ b/net/freeradius/src/opnsense/mvc/app/models/OPNsense/Freeradius/Ldap.xml @@ -18,6 +18,17 @@ N + + N + + + cert + N + + + 0 + Y + N diff --git a/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php b/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php index 2ac4648a5..9b54cd6c8 100755 --- a/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php +++ b/net/freeradius/src/opnsense/scripts/Freeradius/generate_certs.php @@ -41,6 +41,9 @@ $cert_pem_content = ''; $ca_pem_filename = '/usr/local/etc/raddb/certs/ca_opn.pem'; $ca_pem_content = ''; +$ldapcert_pem_filename = '/usr/local/etc/raddb/certs/cert_ldap.pem'; +$ldapcert_pem_content = ''; + // traverse Freeradius plugin for certficiates $configObj = Config::getInstance()->object(); if (isset($configObj->OPNsense->freeradius)) { @@ -108,6 +111,34 @@ if (isset($configObj->OPNsense->freeradius)) { } } } + $cert_refid = (string)$find_cert->ldapcert; + // if eap has a certificate attached, search for its contents + if ($cert_refid != "") { + foreach ($configObj->cert as $ldapcert) { + if ($cert_refid == (string)$ldapcert->refid) { + // generate cert pem file + $pem_content = trim(str_replace("\n\n", "\n", str_replace( + "\r", + "", + base64_decode((string)$ldapcert->crt) + ))); + + $pem_content .= "\n"; + $pem_content .= trim(str_replace( + "\n\n", + "\n", + str_replace("\r", "", base64_decode((string)$ldapcert->prv)) + )); + $pem_content .= "\n"; + $ldapcert_pem_content .= $pem_content; + // generate ca pem file + if (!empty($ldapcert->caref)) { + $ldapcert = (array)$ldapcert; + $ldapcert_pem_content .= ca_chain($ldapcert); + } + } + } + } } } @@ -118,3 +149,7 @@ echo "Certificates generated $cert_pem_filename\n"; file_put_contents($ca_pem_filename, $ca_pem_content); chmod($ca_pem_filename, 0600); echo "Certificates generated $ca_pem_filename\n"; + +file_put_contents($ldapcert_pem_filename, $ldapcert_pem_content); +chmod($ldapcert_pem_filename, 0600); +echo "Certificates generated $ldapcert_pem_filename\n"; diff --git a/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/mods-enabled-ldap b/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/mods-enabled-ldap index 7836acffe..f45a9d389 100644 --- a/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/mods-enabled-ldap +++ b/net/freeradius/src/opnsense/service/templates/OPNsense/Freeradius/mods-enabled-ldap @@ -4,7 +4,9 @@ ldap { {% if helpers.exists('OPNsense.freeradius.ldap.server') and OPNsense.freeradius.ldap.server != '' %} server = '{{ OPNsense.freeradius.ldap.protocol }}://{{ OPNsense.freeradius.ldap.server }}' {% endif %} - +{% if helpers.exists('OPNsense.freeradius.ldap.serverport') and OPNsense.freeradius.ldap.serverport != '' %} + port = '{{ OPNsense.freeradius.ldap.serverport }}' +{% endif %} {% if helpers.exists('OPNsense.freeradius.ldap.identity') and OPNsense.freeradius.ldap.identity != '' %} identity = '{{ OPNsense.freeradius.ldap.identity }}' {% endif %} @@ -146,7 +148,16 @@ ldap { } tls { + {% if helpers.exists('OPNsense.freeradius.ldap.ldapstarttls') and OPNsense.freeradius.ldap.ldapstarttls == '1' %} + start_tls = yes + {% else %} + start_tls = no + {% endif %} require_cert = 'allow' + {% if helpers.exists('OPNsense.freeradius.ldap.ldapcert') and OPNsense.freeradius.ldap.ldapcert != '' %} + certificate_file = ${certdir}/cert_ldap.pem + private_key_file = ${certdir}/cert_ldap.pem + {% endif %} } pool { start = ${thread[pool].start_servers}