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}