diff --git a/etc/inc/captiveportal.inc b/etc/inc/captiveportal.inc
index ba9d7e4fc4..f0653ab7fe 100644
--- a/etc/inc/captiveportal.inc
+++ b/etc/inc/captiveportal.inc
@@ -455,18 +455,14 @@ function captiveportal_init_webgui_zone($cpcfg) {
if (isset($cpcfg['httpslogin'])) {
$cert = lookup_cert($cpcfg['certref']);
- $cert_crt = base64_decode($cert['crt']);
- $cert_prv = base64_decode($cert['prv']);
- if (isset($cpcfg['caref'])) {
- $ca = lookup_ca($cpcfg['caref']);
- $ca_crt = base64_decode($ca['crt']);
- }
- else
- $ca_crt = "";
+ $crt = base64_decode($cert['crt']);
+ $key = base64_decode($cert['prv']);
+ $ca = ca_chain($cert);
+
/* generate lighttpd configuration */
$listenporthttps = $cpcfg['listenporthttps'] ? $cpcfg['listenporthttps'] : ($cpcfg['zoneid'] + 1);
system_generate_lighty_config("{$g['varetc_path']}/lighty-{$cpzone}-CaptivePortal-SSL.conf",
- $cert_crt, $cert_prv, $ca_crt, "lighty-{$cpzone}-CaptivePortal-SSL.pid", $listenporthttps, "/usr/local/captiveportal",
+ $crt, $key, $ca, "lighty-{$cpzone}-CaptivePortal-SSL.pid", $listenporthttps, "/usr/local/captiveportal",
"cert-portal.pem", "ca-portal.pem", "1", $use_fastcgi, $cpzone);
}
diff --git a/etc/inc/certs.inc b/etc/inc/certs.inc
index 862e91bf26..ed1f25c966 100644
--- a/etc/inc/certs.inc
+++ b/etc/inc/certs.inc
@@ -533,7 +533,7 @@ function is_captiveportal_cert($certref) {
if (!is_array($config['captiveportal']))
return;
foreach ($config['captiveportal'] as $portal) {
- if ($portal['enable'] && $portal['httpslogin_enable'] && ($portal['certref'] == $certref))
+ if (isset($portal['enable']) && isset($portal['httpslogin']) && ($portal['certref'] == $certref))
return true;
}
return false;
diff --git a/etc/inc/upgrade_config.inc b/etc/inc/upgrade_config.inc
index 88faba4713..700cd25745 100644
--- a/etc/inc/upgrade_config.inc
+++ b/etc/inc/upgrade_config.inc
@@ -2898,26 +2898,34 @@ function upgrade_088_to_089() {
/* create cert entry */
$cert = array();
$cert['refid'] = uniqid();
- $cert['descr'] = "Captive Portal SSL Cert - {$setting['zone']}";
+ $cert['descr'] = "Captive Portal Cert - {$setting['zone']}";
$cert['crt'] = $setting['certificate'];
$cert['prv'] = $setting['private-key'];
+
+ if (!empty($setting['cacertificate'])) {
+ /* create ca entry */
+ $ca = array();
+ $ca['refid'] = uniqid();
+ $ca['descr'] = "Captive Portal CA - {$setting['zone']}";
+ $ca['crt'] = $setting['cacertificate'];
+ $config['ca'][] = $ca;
+
+ /* add ca reference to certificate */
+ $cert['caref'] = $ca['refid'];
+
+ /* create ca reference */
+ $setting['caref'] = $ca['refid'];
+ }
+
$config['cert'][] = $cert;
/* create cert reference */
- unset($setting['certificate']);
- unset($setting['private-key']);
$setting['certref'] = $cert['refid'];
- /* create ca entry */
- $ca = array();
- $ca['refid'] = uniqid();
- $ca['descr'] = "Captive Portal SSL CA - {$setting['zone']}";
- $ca['crt'] = $setting['cacertificate'];
- $config['ca'][] = $ca;
-
- /* create ca reference */
+ unset($setting['certificate']);
+ unset($setting['private-key']);
unset($setting['cacertificate']);
- $setting['caref'] = $ca['refid'];
+
}
}
}
diff --git a/usr/local/www/services_captiveportal.php b/usr/local/www/services_captiveportal.php
index dd59e7ad25..c49ea1ad32 100755
--- a/usr/local/www/services_captiveportal.php
+++ b/usr/local/www/services_captiveportal.php
@@ -108,7 +108,6 @@ if ($a_cp[$cpzone]) {
$pconfig['httpsname'] = $a_cp[$cpzone]['httpsname'];
$pconfig['preauthurl'] = strtolower($a_cp[$cpzone]['preauthurl']);
$pconfig['certref'] = $a_cp[$cpzone]['certref'];
- $pconfig['caref'] = $a_cp[$cpzone]['caref'];
$pconfig['logoutwin_enable'] = isset($a_cp[$cpzone]['logoutwin_enable']);
$pconfig['peruserbw'] = isset($a_cp[$cpzone]['peruserbw']);
$pconfig['bwdefaultdn'] = $a_cp[$cpzone]['bwdefaultdn'];
@@ -265,7 +264,6 @@ if ($_POST) {
$newcp['bwdefaultdn'] = $_POST['bwdefaultdn'];
$newcp['bwdefaultup'] = $_POST['bwdefaultup'];
$newcp['certref'] = $_POST['certref'];
- $newcp['caref'] = $_POST['caref'];
$newcp['logoutwin_enable'] = $_POST['logoutwin_enable'] ? true : false;
$newcp['nomacfilter'] = $_POST['nomacfilter'] ? true : false;
$newcp['noconcurrentlogins'] = $_POST['noconcurrentlogins'] ? true : false;
@@ -391,7 +389,6 @@ function enable_change(enable_change) {
document.iform.radmac_format.disabled = radius_endis;
document.iform.httpsname.disabled = https_endis;
document.iform.certref.disabled = https_endis;
- document.iform.caref.disabled = https_endis;
document.iform.logoutwin_enable.disabled = endis;
document.iform.nomacfilter.disabled = endis;
document.iform.noconcurrentlogins.disabled = endis;
@@ -870,59 +867,28 @@ function enable_change(enable_change) {
-