diff --git a/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogValidation.xml b/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogValidation.xml
index 706e5006f..77078e9e9 100644
--- a/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogValidation.xml
+++ b/security/acme-client/src/opnsense/mvc/app/controllers/OPNsense/AcmeClient/forms/dialogValidation.xml
@@ -596,6 +596,27 @@
text
+
+
+ header
+
+
+
+ validation.dns_namecheap_user
+
+ text
+
+
+ validation.dns_namecheap_api
+
+ text
+
+
+ validation.dns_namecheap_sourceip
+
+ text
+ true
+
header
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 f737a1717..91046d2d4 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
@@ -375,6 +375,7 @@
Linode API
LuaDNS.com API
Name.com API
+ Namecheap API
Namesilo.com API
NS1.com API
nsupdate (RFC 2136)
@@ -601,6 +602,15 @@
N
+
+ N
+
+
+ N
+
+
+ N
+
N
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 3f979e1bd..d1a1bd6ee 100755
--- a/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php
+++ b/security/acme-client/src/opnsense/scripts/OPNsense/AcmeClient/certhelper.php
@@ -712,6 +712,16 @@ function run_acme_validation($certObj, $valObj, $acctObj)
$proc_env['ME_Key'] = (string)$valObj->dns_me_key;
$proc_env['ME_Secret'] = (string)$valObj->dns_me_secret;
break;
+ case 'dns_namecheap':
+ $proc_env['NAMECHEAP_USERNAME'] = (string)$valObj->dns_namecheap_user;
+ $proc_env['NAMECHEAP_API_KEY'] = (string)$valObj->dns_namecheap_api;
+ if (!empty((string)$valObj->dns_namecheap_sourceip)) {
+ $proc_env['NAMECHEAP_SOURCEIP'] = (string)$valObj->dns_namecheap_sourceip;
+ } else {
+ // Use a public service to get our source IP for Namecheap API
+ $proc_env['NAMECHEAP_SOURCEIP'] = 'https://ifconfig.co/ip';
+ }
+ break;
case 'dns_namecom':
$proc_env['Namecom_Username'] = (string)$valObj->dns_namecom_user;
$proc_env['Namecom_Token'] = (string)$valObj->dns_namecom_token;