diff --git a/security/openconnect/Makefile b/security/openconnect/Makefile
index 0e4ab5279..23edba9ad 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
PLUGIN_COMMENT= OpenConnect Client
PLUGIN_DEPENDS= openconnect
PLUGIN_MAINTAINER= m.muenz@gmail.com
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 100644
index 000000000..a4800d07d
--- /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 100644
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..7768fcf1f 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
@@ -5,13 +5,13 @@ 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;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:sh /usr/local/etc/rc.d/opnsense-openconnect onestop;exit 0;/usr/local/opnsense/scripts/OPNsense/Openconnect/setup.sh;sh /usr/local/etc/rc.d/opnsense-openconnect onestart
parameters:
type:script_output
message:restart openconnect
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..cce9adaae 100644
--- a/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf
+++ b/security/openconnect/src/opnsense/service/templates/OPNsense/Openconnect/openconnect.conf
@@ -11,4 +11,11 @@ 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 %}