Certbot and DNS with BIND and Windows: Difference between revisions
mNo edit summary |
|||
| Line 2: | Line 2: | ||
===Script to Run (work in progress)=== | ===Script to Run (work in progress)=== | ||
The below script, when run with ./NC.sh, will use DNS to retrieve certificates (and also update other 'Slave Servers'). That infrastructure has to be set up before hand, and includes the following; | The below script, when run with ./NC.sh (assuming that's the name of the script), will use DNS to retrieve certificates (and also update other 'Slave Servers'). That infrastructure of course has to be set up before hand, and includes the following items (generally speaking); | ||
*_acme_challenge 'sub zone' | *Configure the following; | ||
*" | **Delegate the _acme_challenge 'sub zone' in Windows (assumes Windows DNS is used as the backend "Master / Primary" DNS Server | ||
**"Slave / Secondary" in BIND (assuming BIND / NAMED is being used as a frontend server<syntaxhighlight lang="text"> | |||
zone "_acme-challenge.WhatEverDomainName.WhatEverSuffix" { | |||
check-names ignore; | |||
type master; | |||
allow-update { W.X.Y.Z/24; }; | |||
notify yes; | |||
also-notify { A.B.C.D; }; | |||
file "/var/named/masters/_acme-challenge.WhatEverDomainName.WhatEverSuffix.hosts"; | |||
}; | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
#!/bin/sh | #!/bin/sh | ||
DomainName="$1" | DomainName="$1" | ||
ScriptsPath="/etc/letsencrypt/renewal-hooks/CUSTOM" | |||
| Line 34: | Line 43: | ||
certbot certonly \ | certbot certonly \ | ||
--manual \ | --manual \ | ||
--preferred-challenges dns \ | --preferred-challenges dns \ | ||
--manual-auth-hook | --manual-auth-hook "${ScriptsPath}/ManualAuth.sh" \ | ||
--manual-cleanup-hook | --manual-cleanup-hook "${ScriptsPath}/ManualCleanUp.sh" \ | ||
--non-interactive \ | --non-interactive \ | ||
--cert-name "${DomainName}" \ | --cert-name "${DomainName}" \ | ||
| Line 89: | Line 56: | ||
--manual \ | --manual \ | ||
--preferred-challenges dns \ | --preferred-challenges dns \ | ||
--manual-auth-hook | --manual-auth-hook "${ScriptsPath}/ManualAuth.sh" \ | ||
--manual-cleanup-hook | --manual-cleanup-hook "${ScriptsPath}/ManualCleanUp.sh" \ | ||
--non-interactive \ | --non-interactive \ | ||
--cert-name "${DomainName}-WILDCARD" \ | --cert-name "${DomainName}-WILDCARD" \ | ||
-d "*.${DomainName}" | -d "*.${DomainName}" | ||
</syntaxhighlight>--manual-auth-hook (ManualAuth.sh)<syntaxhighlight lang="text"> | |||
#!/bin/sh | |||
ZoneName="_acme-challenge.${CERTBOT_DOMAIN}" | |||
MasterServer=W.X.Y.Z | |||
TTL="0" | |||
### | ### Zone Name: the 'sub-zone', which will always be "_acme-challenge", prefixed to the Domain Name | ||
### | ### TTL: Time To Live | ||
### | |||
### | ### {CERTBOT_DOMAIN}: Variable from CertBot that contains the Domain Name (Example: TerraBase.info | ||
### | ### {CERTBOT_VALIDATION} (see below): Variable from CertBot that contains the Validation Text String to be put into a TXT Record (Example: ZtvSKa-0ifZ3lov_zvXj0Adso1Y94Jh8c0xrtjwsTEQ) | ||
### | |||
### | |||
### | ### The Following Section enters the record into the BIND / NAMED Zone for Certbot Validation; | ||
### | |||
( | |||
echo "server ${MasterServer}" | |||
echo "zone ${ZoneName}" | |||
echo "update delete ${ZoneName} TXT" | |||
echo "update add ${ZoneName}. ${TTL} TXT \"${CERTBOT_VALIDATION}\"" | |||
echo "send" | |||
) | /usr/bin/nsupdate -v | |||
### The following item will sync the BIND / NAMED .hosts and JNL Files | |||
/usr/sbin/rndc -s "${MasterServer}" sync "${ZoneName}" | |||
sleep 3 | |||
### For Testing, set the following variables as they're normally provided by Certbot; | |||
### CERTBOT_DOMAIN=WhatEverDomainName.WhatEverSuffix | |||
### CERTBOT_VALIDATION="ThisIsTest1" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Line 145: | Line 131: | ||
Yup, that's right. Everything in the /etc/letsencrypt/renewal-hooks/pre/ will be run. Then anything listed in the Renewal Config File will be run. Woof! | Yup, that's right. Everything in the /etc/letsencrypt/renewal-hooks/pre/ will be run. Then anything listed in the Renewal Config File will be run. Woof! | ||
'''LESSON LEARNED''': Put hooks in a CUSTOM Directory Structure, NOT in the one provided by Let's Encrypt!<br /> | '''LESSON LEARNED''': Put hooks in a CUSTOM Directory Structure, NOT in the one provided by Let's Encrypt! | ||
<br /> | |||
=== Troubleshooting Commands === | |||
* Regarding the NAMED / BIND .jnl Files; | |||
** rndc zonestatus _acme-challenge.WhatEverDomainName | |||
*** ...if issues, then; | |||
*** rndc freeze _acme-challenge.WhatEverDomainName | |||
*** rndc sync -clean _acme-challenge.WhatEverDomainName | |||
*** rndc thaw _acme-challenge.WhatEverDomainName | |||
<br /> | |||