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 %}