diff --git a/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogCertificate.xml b/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogCertificate.xml index 4e6292142..4673272f2 100644 --- a/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogCertificate.xml +++ b/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogCertificate.xml @@ -70,4 +70,32 @@ text + + certificate.aliasmode + + dropdown + + + + + header + + + + certificate.domainalias + + text + acme.sh documentation for further information.]]> + + + + header + + + + certificate.challengealias + + text + acme.sh documentation for further information.]]> + diff --git a/security/acme-client/src/opnsense/mvc/app/models/OPNsense/AcmeClient/AcmeClient.xml b/security/acme-client/src/opnsense/mvc/app/models/OPNsense/AcmeClient/AcmeClient.xml index 5733ea91d..1afa9d4f8 100644 --- a/security/acme-client/src/opnsense/mvc/app/models/OPNsense/AcmeClient/AcmeClient.xml +++ b/security/acme-client/src/opnsense/mvc/app/models/OPNsense/AcmeClient/AcmeClient.xml @@ -243,6 +243,22 @@ 60 60 + + Y + none + + Not using DNS alias mode + Automatic Mode (uses DNS lookups) + Domain alias mode + Challenge alias mode + + + + N + + + N + N diff --git a/security/acme-client/src/opnsense/mvc/app/views/OPNsense/AcmeClient/certificates.volt b/security/acme-client/src/opnsense/mvc/app/views/OPNsense/AcmeClient/certificates.volt index 0c7c34e1a..c2e206bd6 100644 --- a/security/acme-client/src/opnsense/mvc/app/views/OPNsense/AcmeClient/certificates.volt +++ b/security/acme-client/src/opnsense/mvc/app/views/OPNsense/AcmeClient/certificates.volt @@ -379,6 +379,16 @@ POSSIBILITY OF SUCH DAMAGE. }); + // Hide options that are irrelevant in this context. + $('#DialogCertificate').on('shown.bs.modal', function (e) { + $("#certificate\\.aliasmode").change(function(){ + $(".aliasmode").hide(); + $(".aliasmode_"+$(this).val()).show(); + }); + $("#certificate\\.aliasmode").change(); + }) + + /*********************************************************************** * Commands **********************************************************************/ diff --git a/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php b/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php index d8c96b5df..0524053e8 100755 --- a/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php +++ b/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php @@ -893,24 +893,49 @@ function run_acme_validation($certObj, $valObj, $acctObj) // Prepare altNames $altnames = ""; - //Find Alias for main domain + // Main domain: Use DNS alias mode for domain validation? // https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode - $name = "_acme-challenge." . ltrim((string)$certObj->name, '*.'); - if ($dst = dns_get_record($name, DNS_CNAME )) { - $altnames .= "--domain-alias " .$dst[0]['target'] . " "; + if ($val_method == 'dns01') { + switch ((string)$valObj->aliasmode) { + case 'automatic': + $name = "_acme-challenge." . ltrim((string)$certObj->name, '*.'); + if ($dst = dns_get_record($name, DNS_CNAME )) { + $altnames .= "--domain-alias " . $dst[0]['target'] . " "; + } + break; + case 'domain': + $altnames .= "--domain-alias " . (string)$certObj->domainalias . " "; + break; + case 'challenge': + $altnames .= "--challenge-alias " . (string)$certObj->challengealias . " "; + break; + } } if (!empty((string)$certObj->altNames)) { $_altnames = explode(",", (string)$certObj->altNames); foreach (explode(",", (string)$certObj->altNames) as $altname) { $altnames .= "--domain ${altname} "; - //Find Alias - // https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode - $name="_acme-challenge." . ltrim($altname, '*.'); - if ($dst = dns_get_record($name, DNS_CNAME )) { - $altnames .= "--domain-alias " .$dst[0]['target'] . " "; + // altNames: Use DNS alias mode for domain validation? + // https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode + if ($val_method == 'dns01') { + switch ((string)$valObj->aliasmode) { + case 'automatic': + $name = "_acme-challenge." . ltrim($altname, '*.'); + if ($dst = dns_get_record($name, DNS_CNAME )) { + $altnames .= "--domain-alias " . $dst[0]['target'] . " "; + } + break; + case 'domain': + $altnames .= "--domain-alias " . (string)$certObj->domainalias . " "; + break; + case 'challenge': + $altnames .= "--challenge-alias " . (string)$certObj->challengealias . " "; + break; + } } + } }