This is an old revision of the document!


BookMyName hooks for LE-Certbot

The following scripts can be used as hooks to authenticate domains hosted by BookMyName (super cheap domains) using DNS challenges with this initial command:

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/bmn-AAXXXX-auth.sh --manual-cleanup-hook /path/to/bmn-AAXXXX-cleanup.sh -d yourdomain.com -d *.yourdomain.com

BMN has a pseudo API, though it's slow as hell

bmn-ABXXXX-auth.sh
#!/bin/bash
 
BMN_USER="ABXXXX-FREE"
BMN_PASS="plikplok"
 
DOMAIN=$(expr match "$CERTBOT_DOMAIN" '.*\.\(.*\..*\)')
 
if [[ $DOMAIN == "" ]]
then
  DOMAIN=$CERTBOT_DOMAIN
fi
 
echo "All Domains for this cert: $CERTBOT_ALL_DOMAINS"
echo "Remaing Challenges for this cert: $CERTBOT_REMAINING_CHALLENGES"
echo "Challenging Domain: $DOMAIN"
 
curl -s -u $BMN_USER:$BMN_PASS "https://www.bookmyname.com/dyndns/?hostname=_acme-challenge.$DOMAIN&type=txt&ttl=300&do=add&value=\"$CERTBOT_VALIDATION\""
 
loopcount=0
while true
do
  if [[ $loopcount == 40 ]]
  then
    echo "Failed to validate :-("
    exit 1
  fi
 
  ((loopcount=loopcount+1))
  echo -n "Try number $loopcount ..."
  recordset=$(dig _acme-challenge.$DOMAIN TXT +short | tr -d "\""  | grep "$CERTBOT_VALIDATION")
  echo -n "Found '$recordset' ..."
  if [[ $recordset == $CERTBOT_VALIDATION ]]
  then
    echo "GOOD!"
    sleep 10s
    exit 0
  else
    echo "Having a nap..."
    sleep 1m
  fi
done
bmn-ABXXXX-cleanup.sh
#!/bin/bash
 
BMN_USER="ABXXXX-FREE"
BMN_PASS="plikplok"
 
DOMAIN=$(expr match "$CERTBOT_DOMAIN" '.*\.\(.*\..*\)')
 
if [[ $DOMAIN == "" ]]
then
  DOMAIN=$CERTBOT_DOMAIN
fi
 
echo Domain: $DOMAIN
curl -s -u $BMN_USER:$BMN_PASS "https://www.bookmyname.com/dyndns/?hostname=_acme-challenge.$DOMAIN&type=txt&ttl=300&do=remove&value=\"$CERTBOT_VALIDATION\""
exit 0