diff --git a/security/openconnect/Makefile b/security/openconnect/Makefile index 0e4ab5279..24050b843 100644 --- a/security/openconnect/Makefile +++ b/security/openconnect/Makefile @@ -1,6 +1,5 @@ PLUGIN_NAME= openconnect -PLUGIN_VERSION= 1.2 -PLUGIN_REVISION= 1 +PLUGIN_VERSION= 1.3.2 PLUGIN_COMMENT= OpenConnect Client PLUGIN_DEPENDS= openconnect PLUGIN_MAINTAINER= m.muenz@gmail.com diff --git a/security/openconnect/src/etc/rc.d/opnsense-openconnect b/security/openconnect/src/etc/rc.d/opnsense-openconnect index 51d06443d..518a83c7d 100755 --- a/security/openconnect/src/etc/rc.d/opnsense-openconnect +++ b/security/openconnect/src/etc/rc.d/opnsense-openconnect @@ -24,7 +24,6 @@ secret=/usr/local/etc/openconnect.secret [ -z "$openconnect_enable" ] && openconnect_enable="NO" -# status of openconnect openconnect_status() { if [ -n "$rc_pid" ]; then @@ -35,16 +34,17 @@ openconnect_status() fi } -# stop openconnect openconnect_stop() { - echo "stopping openconnect" - killall openconnect - ifconfig ocvpn0 destroy - return 0 + if [ -n "$rc_pid" ]; then + echo "stopping openconnect" + ifconfig ocvpn0 name tun30000 + kill -2 ${rc_pid} + else + echo "${name} is not running." + fi } -# start openconnect openconnect_start() { echo "starting openconnect" diff --git a/security/openconnect/src/opnsense/mvc/app/controllers/OPNsense/Openconnect/forms/general.xml b/security/openconnect/src/opnsense/mvc/app/controllers/OPNsense/Openconnect/forms/general.xml index 56a472801..8ce430a18 100644 --- a/security/openconnect/src/opnsense/mvc/app/controllers/OPNsense/Openconnect/forms/general.xml +++ b/security/openconnect/src/opnsense/mvc/app/controllers/OPNsense/Openconnect/forms/general.xml @@ -35,4 +35,16 @@ dropdown Select the type of hash. Possible values are SHA256 or SHA1. + + general.group + + text + When using profiles for group separation please set here. + + + general.clientcertificate + + dropdown + Select the client certificate to use. + diff --git a/security/openconnect/src/opnsense/mvc/app/models/OPNsense/Openconnect/General.xml b/security/openconnect/src/opnsense/mvc/app/models/OPNsense/Openconnect/General.xml index 141cf3d7e..02adcf576 100644 --- a/security/openconnect/src/opnsense/mvc/app/models/OPNsense/Openconnect/General.xml +++ b/security/openconnect/src/opnsense/mvc/app/models/OPNsense/Openconnect/General.xml @@ -37,5 +37,14 @@ SHA1 + + N + /^[a-zA-Z0-9]{1,64}$/ + Only a-zA-Z0-9 are allowed. + + + cert + N + diff --git a/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/generate_certs.php b/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/generate_certs.php new file mode 100755 index 000000000..c9beea33e --- /dev/null +++ b/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/generate_certs.php @@ -0,0 +1,80 @@ +#!/usr/local/bin/php +object(); +if (isset($configObj->OPNsense->openconnect)) { + foreach ($configObj->OPNsense->openconnect->children() as $find_cert) { + $cert_refid = (string)$find_cert->clientcertificate; + if ($cert_refid != "") { + foreach ($configObj->cert as $cert) { + if ($cert_refid == (string)$cert->refid) { + // generate cert pem file + $pem_content = trim(str_replace("\n\n", "\n", str_replace( + "\r", + "", + base64_decode((string)$cert->crt) + ))); + $pem_content .= "\n"; + $cert_pem_content .= $pem_content; + + $key_content .= trim(str_replace( + "\n\n", + "\n", + str_replace("\r", "", base64_decode((string)$cert->prv)) + )); + $key_content .= "\n"; + $key_pem_content .= $key_content; + } + } + } + } +} + +file_put_contents($cert_pem_filename, $cert_pem_content); +chmod($cert_pem_filename, 0600); +echo "Certificates generated $cert_pem_filename\n"; + +file_put_contents($key_pem_filename, $key_pem_content); +chmod($key_pem_filename, 0600); +echo "Keys generated $key_pem_filename\n"; diff --git a/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/setup.sh b/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/setup.sh new file mode 100755 index 000000000..9e095bf21 --- /dev/null +++ b/security/openconnect/src/opnsense/scripts/OPNsense/Openconnect/setup.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/local/opnsense/scripts/OPNsense/Openconnect/generate_certs.php diff --git a/security/openconnect/src/opnsense/service/conf/actions.d/actions_openconnect.conf b/security/openconnect/src/opnsense/service/conf/actions.d/actions_openconnect.conf index cd1596665..2d951ab77 100644 --- a/security/openconnect/src/opnsense/service/conf/actions.d/actions_openconnect.conf +++ b/security/openconnect/src/opnsense/service/conf/actions.d/actions_openconnect.conf @@ -1,23 +1,23 @@ [stop] -command:sh /usr/local/etc/rc.d/opnsense-openconnect onestop;exit 0 +command:/usr/local/etc/rc.d/opnsense-openconnect onestop; exit 0 parameters: type:script_output message:stop openconnect [start] -command:sh /usr/local/etc/rc.d/opnsense-openconnect onestart +command:/usr/local/opnsense/scripts/OPNsense/Openconnect/setup.sh; /usr/local/etc/rc.d/opnsense-openconnect onestart parameters: type:script_output message:start openconnect [restart] -command:sh /usr/local/etc/rc.d/opnsense-openconnect onestop;exit 0;sh /usr/local/etc/rc.d/opnsense-openconnect onestart +command:/usr/local/etc/rc.d/opnsense-openconnect onestop; /usr/local/opnsense/scripts/OPNsense/Openconnect/setup.sh; /usr/local/etc/rc.d/opnsense-openconnect onestart parameters: type:script_output message:restart openconnect [status] -command:sh /usr/local/etc/rc.d/opnsense-openconnect status +command:/usr/local/etc/rc.d/opnsense-openconnect status; exit 0 parameters: type:script_output message:openconnect status diff --git a/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf b/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf index b03dd087f..d7d888caa 100644 --- a/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf +++ b/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf @@ -7,8 +7,16 @@ background quiet interface=tun30000 syslog +non-inter passwd-on-stdin {% if helpers.exists('OPNsense.openconnect.general.servercert') and OPNsense.openconnect.general.servercert != '' %} servercert={{ OPNsense.openconnect.general.hash }}:{{ OPNsense.openconnect.general.servercert }} {% endif %} +{% if helpers.exists('OPNsense.openconnect.general.group') and OPNsense.openconnect.general.group != '' %} +authgroup={{ OPNsense.openconnect.general.group }} +{% endif %} +{% if helpers.exists('OPNsense.openconnect.general.clientcertificate') and OPNsense.openconnect.general.clientcertificate != '' %} +certificate=/usr/local/etc/openconnect_cert.pem +sslkey=/usr/local/etc/openconnect_key.pem +{% endif %} {% endif %}