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;
+ }
}
+
}
}