acmeshell

create or update single certificate:

ACMEShell> domainchallenge {domain}

… Now create page http://{domain}/.well-known/acme-challenge/{token_from_challenge}

ACMEShell> domainconfirm {domain}
ACMEShell> certificateget {domain}

create or update SAN certificate for 2 or more domains:

ACMEShell> domainchallenge {domain}
ACMEShell> domainchallenge {domain1}
ACMEShell> domainchallenge {domain2}
...
ACMEShell> domainchallenge {domainN}

… Now create page http://{domain}/.well-known/acme-challenge/{token_from_challenge}
… Now create page http://{domain1}/.well-known/acme-challenge/{token_from_challenge}
… Now create page http://{domainw}/.well-known/acme-challenge/{token_from_challenge}
… Now create page http://{domainN}/.well-known/acme-challenge/{token_from_challenge}

ACMEShell> domainconfirm {domain}
ACMEShell> domainconfirm {domain1}
ACMEShell> domainconfirm {domain2}
...
ACMEShell> domainconfirm {domainN}
ACMEShell> certificateget {domain} {domain1} {domain2} ... {domainN}

script example for single certificate and nginx:

content=`echo domainchallenge "${domain}" | acmeshell | head -1`
dir="/var/www/${domain}/.well-known/acme-challenge"
file=`echo "${content}" | cut -d '.' -f1 | sed "s,^,${dir}/,"`
echo "${content}" > "${file}"
domainconfirm "${domain}" | acmeshell
certificateget "${domain}" | acmeshell
cp ~/.acmeshell/certs/${domain}.key /etc/nginx/${domain}.key.tmp
(
  cat ~/.acmeshell/certs/${domain}.crt
  cat ~/.acmeshell/certs/${domain}.im
) > /etc/nginx/${domain}.crt.tmp
mv -f /etc/nginx/${domain}.key.tmp /etc/nginx/${domain}.key
mv -f /etc/nginx/${domain}.crt.tmp /etc/nginx/${domain}.crt
sudo /etc/init.d/nginx restart