mirror of
				https://github.com/linuxserver/docker-swag.git
				synced 2025-10-31 21:17:42 +09:00 
			
		
		
		
	Merge pull request #48 from linuxserver/zerossl
Add ZeroSSL support via CERTPROVIDER var
This commit is contained in:
		
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @@ -38,7 +38,7 @@ Find us at: | ||||
| [](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-swag/job/master/) | ||||
| [](https://ci-tests.linuxserver.io/linuxserver/swag/latest/index.html) | ||||
|  | ||||
| SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention. | ||||
| SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention. | ||||
|  | ||||
| [](https://linuxserver.io) | ||||
|  | ||||
| @@ -81,6 +81,7 @@ services: | ||||
|       - URL=yourdomain.url | ||||
|       - SUBDOMAINS=www, | ||||
|       - VALIDATION=http | ||||
|       - CERTPROVIDER= #optional | ||||
|       - DNSPLUGIN=cloudflare #optional | ||||
|       - PROPAGATION= #optional | ||||
|       - DUCKDNSTOKEN= #optional | ||||
| @@ -109,6 +110,7 @@ docker run -d \ | ||||
|   -e URL=yourdomain.url \ | ||||
|   -e SUBDOMAINS=www, \ | ||||
|   -e VALIDATION=http \ | ||||
|   -e CERTPROVIDER= `#optional` \ | ||||
|   -e DNSPLUGIN=cloudflare `#optional` \ | ||||
|   -e PROPAGATION= `#optional` \ | ||||
|   -e DUCKDNSTOKEN= `#optional` \ | ||||
| @@ -139,10 +141,11 @@ Container images are configured using parameters passed at runtime (such as thos | ||||
| | `-e URL=yourdomain.url` | Top url you have control over (`customdomain.com` if you own it, or `customsubdomain.ddnsprovider.com` if dynamic dns). | | ||||
| | `-e SUBDOMAINS=www,` | Subdomains you'd like the cert to cover (comma separated, no spaces) ie. `www,ftp,cloud`. For a wildcard cert, set this _exactly_ to `wildcard` (wildcard cert is available via `dns` and `duckdns` validation only) | | ||||
| | `-e VALIDATION=http` | Certbot validation method to use, options are `http`, `dns` or `duckdns` (`dns` method also requires `DNSPLUGIN` variable set) (`duckdns` method requires `DUCKDNSTOKEN` variable set, and the `SUBDOMAINS` variable must be either empty or set to `wildcard`). | | ||||
| | `-e CERTPROVIDER=` | Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt. | | ||||
| | `-e DNSPLUGIN=cloudflare` | Required if `VALIDATION` is set to `dns`. Options are `aliyun`, `cloudflare`, `cloudxns`, `cpanel`, `digitalocean`, `dnsimple`, `dnsmadeeasy`, `domeneshop`, `gandi`, `gehirn`, `google`, `inwx`, `linode`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `rfc2136`, `route53`, `sakuracloud` and `transip`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`. | | ||||
| | `-e PROPAGATION=` | Optionally override (in seconds) the default propagation time for the dns plugins. | | ||||
| | `-e DUCKDNSTOKEN=` | Required if `VALIDATION` is set to `duckdns`. Retrieve your token from https://www.duckdns.org | | ||||
| | `-e EMAIL=` | Optional e-mail address used for cert expiration notifications. | | ||||
| | `-e EMAIL=` | Optional e-mail address used for cert expiration notifications (Required for ZeroSSL). | | ||||
| | `-e ONLY_SUBDOMAINS=false` | If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true` | | ||||
| | `-e EXTRA_DOMAINS=` | Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org` | | ||||
| | `-e STAGING=false` | Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes. | | ||||
| @@ -223,7 +226,7 @@ This will *ask* Google et al not to index and list your site. Be careful with th | ||||
|   1. *(Easier)* Mount the container's config folder in other containers (ie. `-v /path-to-le-config:/le-ssl`) and in the other containers, use the cert location `/le-ssl/keys/letsencrypt/` | ||||
|   2. *(More secure)* Mount the SWAG folder `etc` that resides under `/config` in other containers (ie. `-v /path-to-le-config/etc:/le-ssl`) and in the other containers, use the cert location `/le-ssl/letsencrypt/live/<your.domain.url>/` (This is more secure because the first method shares the entire SWAG config folder with other containers, including the www files, whereas the second method only shares the ssl certs) | ||||
|   * These certs include: | ||||
|   1. `cert.pem`, `chain.pem`, `fullchain.pem` and `privkey.pem`, which are generated by Let's Encrypt and used by nginx and various other apps | ||||
|   1. `cert.pem`, `chain.pem`, `fullchain.pem` and `privkey.pem`, which are generated by Certbot and used by nginx and various other apps | ||||
|   2. `privkey.pfx`, a format supported by Microsoft and commonly used by dotnet apps such as Emby Server (no password) | ||||
|   3. `priv-fullchain-bundle.pem`, a pem cert that bundles the private key and the fullchain, used by apps like ZNC | ||||
| ### Using fail2ban | ||||
| @@ -323,7 +326,8 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64 | ||||
|  | ||||
| ## Versions | ||||
|  | ||||
| * **03.01.21:** - Add helper pages to aid troubleshooting | ||||
| * **08.01.21:** - Add support for getting certs from [ZeroSSL](https://zerossl.com/) via optional `CERTPROVIDER` env var. Update aliyun, domeneshop, inxw and transip dns plugins with the new plugin names. Hide `donoteditthisfile.conf` because users were editing it despite its name. Suppress harmless error when no proxy confs are enabled. | ||||
| * **03.01.21:** - [Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) /config/nginx/site-confs/default - Add helper pages to aid troubleshooting | ||||
| * **10.12.20:** - Add support for njalla dns validation | ||||
| * **09.12.20:** - Check for template/conf updates and notify in the log. Add support for gehirn and sakuracloud dns validation. | ||||
| * **01.11.20:** - Add support for netcup dns validation | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
| project_name: swag | ||||
| project_url: "https://linuxserver.io" | ||||
| project_logo: "https://github.com/linuxserver/docker-templates/raw/master/linuxserver.io/img/swag.gif" | ||||
| project_blurb: "SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention." | ||||
| project_blurb: "SWAG - Secure Web Application Gateway (formerly known as letsencrypt, no relation to Let's Encrypt™) sets up an Nginx webserver and reverse proxy with php support and a built-in certbot client that automates free SSL server certificate generation and renewal processes (Let's Encrypt and ZeroSSL). It also contains fail2ban for intrusion prevention." | ||||
| project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" | ||||
|  | ||||
| project_blurb_optional_extras_enabled: false | ||||
| @@ -50,10 +50,11 @@ cap_add_param_vars: | ||||
| # optional container parameters | ||||
| opt_param_usage_include_env: true | ||||
| opt_param_env_vars: | ||||
|   - { env_var: "CERTPROVIDER", env_value: "", desc: "Optionally define the cert provider. Set to `zerossl` for ZeroSSL certs (requires existing [ZeroSSL account](https://app.zerossl.com/signup) and the e-mail address entered in `EMAIL` env var). Otherwise defaults to Let's Encrypt." } | ||||
|   - { env_var: "DNSPLUGIN", env_value: "cloudflare", desc: "Required if `VALIDATION` is set to `dns`. Options are `aliyun`, `cloudflare`, `cloudxns`, `cpanel`, `digitalocean`, `dnsimple`, `dnsmadeeasy`, `domeneshop`, `gandi`, `gehirn`, `google`, `inwx`, `linode`, `luadns`, `netcup`, `njalla`, `nsone`, `ovh`, `rfc2136`, `route53`, `sakuracloud` and `transip`. Also need to enter the credentials into the corresponding ini (or json for some plugins) file under `/config/dns-conf`." } | ||||
|   - { env_var: "PROPAGATION", env_value: "", desc: "Optionally override (in seconds) the default propagation time for the dns plugins." } | ||||
|   - { env_var: "DUCKDNSTOKEN", env_value: "", desc: "Required if `VALIDATION` is set to `duckdns`. Retrieve your token from https://www.duckdns.org" } | ||||
|   - { env_var: "EMAIL", env_value: "", desc: "Optional e-mail address used for cert expiration notifications." } | ||||
|   - { env_var: "EMAIL", env_value: "", desc: "Optional e-mail address used for cert expiration notifications (Required for ZeroSSL)." } | ||||
|   - { env_var: "ONLY_SUBDOMAINS", env_value: "false", desc: "If you wish to get certs only for certain subdomains, but not the main domain (main domain may be hosted on another machine and cannot be validated), set this to `true`" } | ||||
|   - { env_var: "EXTRA_DOMAINS", env_value: "", desc: "Additional fully qualified domain names (comma separated, no spaces) ie. `extradomain.com,subdomain.anotherdomain.org,*.anotherdomain.org`" } | ||||
|   - { env_var: "STAGING", env_value: "false", desc: "Set to `true` to retrieve certs in staging mode. Rate limits will be much higher, but the resulting cert will not pass the browser's security test. Only to be used for testing purposes." } | ||||
| @@ -117,7 +118,7 @@ app_setup_block: | | ||||
|     1. *(Easier)* Mount the container's config folder in other containers (ie. `-v /path-to-le-config:/le-ssl`) and in the other containers, use the cert location `/le-ssl/keys/letsencrypt/` | ||||
|     2. *(More secure)* Mount the SWAG folder `etc` that resides under `/config` in other containers (ie. `-v /path-to-le-config/etc:/le-ssl`) and in the other containers, use the cert location `/le-ssl/letsencrypt/live/<your.domain.url>/` (This is more secure because the first method shares the entire SWAG config folder with other containers, including the www files, whereas the second method only shares the ssl certs) | ||||
|     * These certs include: | ||||
|     1. `cert.pem`, `chain.pem`, `fullchain.pem` and `privkey.pem`, which are generated by Let's Encrypt and used by nginx and various other apps | ||||
|     1. `cert.pem`, `chain.pem`, `fullchain.pem` and `privkey.pem`, which are generated by Certbot and used by nginx and various other apps | ||||
|     2. `privkey.pfx`, a format supported by Microsoft and commonly used by dotnet apps such as Emby Server (no password) | ||||
|     3. `priv-fullchain-bundle.pem`, a pem cert that bundles the private key and the fullchain, used by apps like ZNC | ||||
|   ### Using fail2ban | ||||
| @@ -150,7 +151,8 @@ app_setup_nginx_reverse_proxy_block: "" | ||||
|  | ||||
| # changelog | ||||
| changelogs: | ||||
|   - { date: "03.01.21:", desc: "Add helper pages to aid troubleshooting" } | ||||
|   - { date: "08.01.21:", desc: "Add support for getting certs from [ZeroSSL](https://zerossl.com/) via optional `CERTPROVIDER` env var. Update aliyun, domeneshop, inxw and transip dns plugins with the new plugin names. Hide `donoteditthisfile.conf` because users were editing it despite its name. Suppress harmless error when no proxy confs are enabled." } | ||||
|   - { date: "03.01.21:", desc: "[Existing users should update:](https://github.com/linuxserver/docker-swag/blob/master/README.md#updating-configs) /config/nginx/site-confs/default - Add helper pages to aid troubleshooting" } | ||||
|   - { date: "10.12.20:", desc: "Add support for njalla dns validation" } | ||||
|   - { date: "09.12.20:", desc: "Check for template/conf updates and notify in the log. Add support for gehirn and sakuracloud dns validation." } | ||||
|   - { date: "01.11.20:", desc: "Add support for netcup dns validation" } | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| . /config/donoteditthisfile.conf | ||||
| . /config/.donoteditthisfile.conf | ||||
|  | ||||
| curl https://www.duckdns.org/update?domains=${CERTBOT_DOMAIN}\&token=${ORIGDUCKDNSTOKEN}\&txt=${CERTBOT_VALIDATION} | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| #!/usr/bin/with-contenv bash | ||||
|  | ||||
| . /config/donoteditthisfile.conf | ||||
| . /config/.donoteditthisfile.conf | ||||
|  | ||||
| echo "<------------------------------------------------->" | ||||
| echo | ||||
|   | ||||
| @@ -2,5 +2,5 @@ | ||||
| # https://ram.console.aliyun.com/ | ||||
| # And ensure your RAM account has AliyunDNSFullAccess permission. | ||||
|  | ||||
| certbot_dns_aliyun:dns_aliyun_access_key = 12345678 | ||||
| certbot_dns_aliyun:dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef | ||||
| dns_aliyun_access_key = 12345678 | ||||
| dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| # Instructions: https://github.com/domeneshop/certbot-dns-domeneshop#credentials | ||||
| # Replace with your values | ||||
| certbot_dns_domeneshop:dns_domeneshop_client_token=1234567890abcdef | ||||
| certbot_dns_domeneshop:dns_domeneshop_client_secret=1234567890abcdefghijklmnopqrstuvxyz1234567890abcdefghijklmnopqrs | ||||
| dns_domeneshop_client_token=1234567890abcdef | ||||
| dns_domeneshop_client_secret=1234567890abcdefghijklmnopqrstuvxyz1234567890abcdefghijklmnopqrs | ||||
| @@ -1,6 +1,6 @@ | ||||
| # Instructions: https://github.com/oGGy990/certbot-dns-inwx | ||||
| # Replace with your values | ||||
| certbot_dns_inwx:dns_inwx_url           = https://api.domrobot.com/xmlrpc/ | ||||
| certbot_dns_inwx:dns_inwx_username      = your_username | ||||
| certbot_dns_inwx:dns_inwx_password      = your_password | ||||
| certbot_dns_inwx:dns_inwx_shared_secret = your_shared_secret optional | ||||
| dns_inwx_url           = https://api.domrobot.com/xmlrpc/ | ||||
| dns_inwx_username      = your_username | ||||
| dns_inwx_password      = your_password | ||||
| dns_inwx_shared_secret = your_shared_secret optional | ||||
|   | ||||
| @@ -2,5 +2,5 @@ | ||||
| # Convert the key to an RSA key (openssl rsa -in transip.key -out transip-rsa.key) | ||||
| # Place .key-file in the same directory as this file. Location "/config/dns-conf" is from within the container | ||||
|  | ||||
| certbot_dns_transip:dns_transip_username = <transip_username> | ||||
| certbot_dns_transip:dns_transip_key_file = /config/dns-conf/transip-rsa.key | ||||
| dns_transip_username = <transip_username> | ||||
| dns_transip_key_file = /config/dns-conf/transip-rsa.key | ||||
| @@ -10,6 +10,7 @@ SUBDOMAINS=${SUBDOMAINS}\\n\ | ||||
| EXTRA_DOMAINS=${EXTRA_DOMAINS}\\n\ | ||||
| ONLY_SUBDOMAINS=${ONLY_SUBDOMAINS}\\n\ | ||||
| VALIDATION=${VALIDATION}\\n\ | ||||
| CERTPROVIDER=${CERTPROVIDER}\\n\ | ||||
| DNSPLUGIN=${DNSPLUGIN}\\n\ | ||||
| EMAIL=${EMAIL}\\n\ | ||||
| STAGING=${STAGING}\\n" | ||||
| @@ -20,7 +21,7 @@ if [ -n "${TEST_RUN}" ]; then | ||||
| fi | ||||
|  | ||||
| # Sanitize variables | ||||
| SANED_VARS=( DNSPLUGIN EMAIL EXTRA_DOMAINS ONLY_SUBDOMAINS STAGING SUBDOMAINS URL VALIDATION ) | ||||
| SANED_VARS=( DNSPLUGIN EMAIL EXTRA_DOMAINS ONLY_SUBDOMAINS STAGING SUBDOMAINS URL VALIDATION CERTPROVIDER ) | ||||
| for i in "${SANED_VARS[@]}" | ||||
| do | ||||
|   export echo "$i"="${!i//\"/}" | ||||
| @@ -100,15 +101,18 @@ fi | ||||
| rm /etc/crontabs/* | ||||
| cp /config/crontabs/* /etc/crontabs/ | ||||
|  | ||||
| # create original config file if it doesn't exist | ||||
| if [ ! -f "/config/donoteditthisfile.conf" ]; then | ||||
|   echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\"" > /config/donoteditthisfile.conf | ||||
|   echo "Created donoteditthisfile.conf" | ||||
| # create original config file if it doesn't exist, move non-hidden legacy file to hidden | ||||
| if [ -f "/config/donoteditthisfile.conf" ]; then | ||||
|   mv /config/donoteditthisfile.conf /config/.donoteditthisfile.conf | ||||
| fi | ||||
| if [ ! -f "/config/.donoteditthisfile.conf" ]; then | ||||
|   echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" > /config/.donoteditthisfile.conf | ||||
|   echo "Created .donoteditthisfile.conf" | ||||
| fi | ||||
|  | ||||
| # load original config settings | ||||
| # shellcheck disable=SC1091 | ||||
| . /config/donoteditthisfile.conf | ||||
| . /config/.donoteditthisfile.conf | ||||
|  | ||||
| # set default validation to http | ||||
| if [ -z "$VALIDATION" ]; then | ||||
| @@ -116,11 +120,22 @@ if [ -z "$VALIDATION" ]; then | ||||
|   echo "VALIDATION parameter not set; setting it to http" | ||||
| fi | ||||
|  | ||||
| # if staging is set to true, use the staging server | ||||
| if [ "$STAGING" = "true" ]; then | ||||
| # if zerossl is selected or staging is set to true, use the relevant server | ||||
| if [ "$CERTPROVIDER" = "zerossl" ] && [ "$STAGING" = "true" ]; then | ||||
|   echo "ZeroSSL does not support staging mode, ignoring STAGING variable" | ||||
| fi | ||||
| if [ "$CERTPROVIDER" = "zerossl" ] && [ -n "$EMAIL" ]; then | ||||
|   echo "ZeroSSL is selected as the cert provider, registering cert with $EMAIL" | ||||
|   ACMESERVER="https://acme.zerossl.com/v2/DV90" | ||||
| elif [ "$CERTPROVIDER" = "zerossl" ] && [ -z "$EMAIL" ]; then | ||||
|   echo "ZeroSSL is selected as the cert provider, but the e-mail address has not been entered. Please visit https://zerossl.com, register a new account and set the account e-mail address in the EMAIL environment variable" | ||||
|   sleep infinity | ||||
| elif [ "$STAGING" = "true" ]; then | ||||
|   echo "NOTICE: Staging is active" | ||||
|   echo "Using Let's Encrypt as the cert provider" | ||||
|   ACMESERVER="https://acme-staging-v02.api.letsencrypt.org/directory" | ||||
| else | ||||
|   echo "Using Let's Encrypt as the cert provider" | ||||
|   ACMESERVER="https://acme-v02.api.letsencrypt.org/directory" | ||||
| fi | ||||
|  | ||||
| @@ -172,6 +187,12 @@ else | ||||
|   EMAILPARAM="--register-unsafely-without-email" | ||||
| fi | ||||
|  | ||||
| # update plugin names in dns conf inis | ||||
| sed -i 's|^certbot_dns_aliyun:||g' /defaults/dns-conf/aliyun.ini | ||||
| sed -i 's|^certbot_dns_domeneshop:||g' /defaults/dns-conf/domeneshop.ini | ||||
| sed -i 's|^certbot_dns_inwx:||g' /defaults/dns-conf/inwx.ini | ||||
| sed -i 's|^certbot_dns_transip:||g' /defaults/dns-conf/transip.ini | ||||
|  | ||||
| # setting the validation method to use | ||||
| if [ "$VALIDATION" = "dns" ]; then | ||||
|   if [ "$DNSPLUGIN" = "route53" ]; then | ||||
| @@ -186,10 +207,7 @@ if [ "$VALIDATION" = "dns" ]; then | ||||
|   elif [[ "$DNSPLUGIN" =~ ^(google)$ ]]; then | ||||
|     if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi | ||||
|     PREFCHAL="--dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.json ${PROPAGATIONPARAM}" | ||||
|   elif [[ "$DNSPLUGIN" =~ ^(aliyun|domeneshop|inwx|transip)$ ]]; then | ||||
|     if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--certbot-dns-${DNSPLUGIN}:dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi | ||||
|     PREFCHAL="-a certbot-dns-${DNSPLUGIN}:dns-${DNSPLUGIN} --certbot-dns-${DNSPLUGIN}:dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}" | ||||
|   elif [[ "$DNSPLUGIN" =~ ^(netcup|njalla)$ ]]; then | ||||
|   elif [[ "$DNSPLUGIN" =~ ^(aliyun|domeneshop|inwx|netcup|njalla|transip)$ ]]; then | ||||
|     if [ -n "$PROPAGATION" ];then PROPAGATIONPARAM="--dns-${DNSPLUGIN}-propagation-seconds ${PROPAGATION}"; fi | ||||
|     PREFCHAL="-a dns-${DNSPLUGIN} --dns-${DNSPLUGIN}-credentials /config/dns-conf/${DNSPLUGIN}.ini ${PROPAGATIONPARAM}" | ||||
|   else | ||||
| @@ -226,20 +244,30 @@ else | ||||
| fi | ||||
|  | ||||
| # checking for changes in cert variables, revoking certs if necessary | ||||
| if [ ! "$URL" = "$ORIGURL" ] || [ ! "$SUBDOMAINS" = "$ORIGSUBDOMAINS" ] || [ ! "$ONLY_SUBDOMAINS" = "$ORIGONLY_SUBDOMAINS" ] || [ ! "$EXTRA_DOMAINS" = "$ORIGEXTRA_DOMAINS" ] || [ ! "$VALIDATION" = "$ORIGVALIDATION" ] || [ ! "$DNSPLUGIN" = "$ORIGDNSPLUGIN" ] || [ ! "$PROPAGATION" = "$ORIGPROPAGATION" ] || [ ! "$STAGING" = "$ORIGSTAGING" ] || [ ! "$DUCKDNSTOKEN" = "$ORIGDUCKDNSTOKEN" ]; then | ||||
| if [ ! "$URL" = "$ORIGURL" ] || [ ! "$SUBDOMAINS" = "$ORIGSUBDOMAINS" ] || [ ! "$ONLY_SUBDOMAINS" = "$ORIGONLY_SUBDOMAINS" ] || [ ! "$EXTRA_DOMAINS" = "$ORIGEXTRA_DOMAINS" ] || [ ! "$VALIDATION" = "$ORIGVALIDATION" ] || [ ! "$DNSPLUGIN" = "$ORIGDNSPLUGIN" ] || [ ! "$PROPAGATION" = "$ORIGPROPAGATION" ] || [ ! "$STAGING" = "$ORIGSTAGING" ] || [ ! "$DUCKDNSTOKEN" = "$ORIGDUCKDNSTOKEN" ] || [ ! "$CERTPROVIDER" = "$ORIGCERTPROVIDER" ]; then | ||||
|   echo "Different validation parameters entered than what was used before. Revoking and deleting existing certificate, and an updated one will be created" | ||||
|   if [ "$ORIGONLY_SUBDOMAINS" = "true" ] && [ ! "$ORIGSUBDOMAINS" = "wildcard" ]; then | ||||
|     ORIGDOMAIN="$(echo "$ORIGSUBDOMAINS" | tr ',' ' ' | awk '{print $1}').${ORIGURL}" | ||||
|     [[ -f /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem ]] && certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem | ||||
|   else | ||||
|     [[ -f /config/etc/letsencrypt/live/"$ORIGURL"/fullchain.pem ]] && certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGURL"/fullchain.pem | ||||
|     ORIGDOMAIN="$ORIGURL" | ||||
|   fi | ||||
|   if [ "$ORIGCERTPROVIDER" = "zerossl" ] && [ -n "$ORIGEMAIL" ]; then | ||||
|     REV_EAB_CREDS=$(curl -s https://api.zerossl.com/acme/eab-credentials-email --data "email=$ORIGEMAIL") | ||||
|     REV_ZEROSSL_EAB_KID=$(echo "$REV_EAB_CREDS" | python3 -c "import sys, json; print(json.load(sys.stdin)['eab_kid'])") | ||||
|     REV_ZEROSSL_EAB_HMAC_KEY=$(echo "$REV_EAB_CREDS" | python3 -c "import sys, json; print(json.load(sys.stdin)['eab_hmac_key'])") | ||||
|     REV_ACMESERVER="https://acme.zerossl.com/v2/DV90 --eab-kid ${REV_ZEROSSL_EAB_KID} --eab-hmac-key ${REV_ZEROSSL_EAB_HMAC_KEY}" | ||||
|   elif [ "$ORIGSTAGING" = "true" ]; then | ||||
|     REV_ACMESERVER="https://acme-staging-v02.api.letsencrypt.org/directory" | ||||
|   else | ||||
|     REV_ACMESERVER="https://acme-v02.api.letsencrypt.org/directory" | ||||
|   fi | ||||
|   [[ -f /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem ]] && certbot revoke --non-interactive --cert-path /config/etc/letsencrypt/live/"$ORIGDOMAIN"/fullchain.pem --server $REV_ACMESERVER | ||||
|   rm -rf /config/etc/letsencrypt | ||||
|   mkdir -p /config/etc/letsencrypt | ||||
| fi | ||||
|  | ||||
| # saving new variables | ||||
| echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\"" > /config/donoteditthisfile.conf | ||||
| echo -e "ORIGURL=\"$URL\" ORIGSUBDOMAINS=\"$SUBDOMAINS\" ORIGONLY_SUBDOMAINS=\"$ONLY_SUBDOMAINS\" ORIGEXTRA_DOMAINS=\"$EXTRA_DOMAINS\" ORIGVALIDATION=\"$VALIDATION\" ORIGDNSPLUGIN=\"$DNSPLUGIN\" ORIGPROPAGATION=\"$PROPAGATION\" ORIGSTAGING=\"$STAGING\" ORIGDUCKDNSTOKEN=\"$DUCKDNSTOKEN\" ORIGCERTPROVIDER=\"$CERTPROVIDER\" ORIGEMAIL=\"$EMAIL\"" > /config/.donoteditthisfile.conf | ||||
|  | ||||
| # alter extension for error message | ||||
| if [ "$DNSPLUGIN" = "google" ]; then | ||||
| @@ -250,9 +278,16 @@ fi | ||||
|  | ||||
| # generating certs if necessary | ||||
| if [ ! -f "/config/keys/letsencrypt/fullchain.pem" ]; then | ||||
|   if [ "$CERTPROVIDER" = "zerossl" ] && [ -n "$EMAIL" ]; then | ||||
|     echo "Retrieving EAB from ZeroSSL" | ||||
|     EAB_CREDS=$(curl -s https://api.zerossl.com/acme/eab-credentials-email --data "email=$EMAIL") | ||||
|     ZEROSSL_EAB_KID=$(echo "$EAB_CREDS" | python3 -c "import sys, json; print(json.load(sys.stdin)['eab_kid'])") | ||||
|     ZEROSSL_EAB_HMAC_KEY=$(echo "$EAB_CREDS" | python3 -c "import sys, json; print(json.load(sys.stdin)['eab_hmac_key'])") | ||||
|     ZEROSSL_EAB="--eab-kid ${ZEROSSL_EAB_KID} --eab-hmac-key ${ZEROSSL_EAB_HMAC_KEY}" | ||||
|   fi | ||||
|   echo "Generating new certificate" | ||||
|  # shellcheck disable=SC2086 | ||||
|  certbot certonly --renew-by-default --server $ACMESERVER $PREFCHAL --rsa-key-size 4096 $EMAILPARAM --agree-tos $URL_REAL | ||||
|   # shellcheck disable=SC2086 | ||||
|   certbot certonly --renew-by-default --server $ACMESERVER $ZEROSSL_EAB $PREFCHAL --rsa-key-size 4096 $EMAILPARAM --agree-tos $URL_REAL | ||||
|   if [ -d /config/keys/letsencrypt ]; then | ||||
|     cd /config/keys/letsencrypt || exit | ||||
|   else | ||||
|   | ||||
| @@ -24,7 +24,7 @@ if [ -n "$nginx_confs_changed" ]; then | ||||
|     echo -e "${nginx_confs_changed}" | ||||
| fi | ||||
|  | ||||
| proxy_confs=$(ls /config/nginx/proxy-confs/*.conf) | ||||
| proxy_confs=$(ls /config/nginx/proxy-confs/*.conf 2>/dev/null) | ||||
|  | ||||
| for i in $proxy_confs; do | ||||
|     if [ -f "${i}.sample" ]; then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user