Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dns_namecheap submits invalid CAA records to the Namecheap API #3019

Closed
ElizabethCody opened this issue Jun 30, 2020 · 15 comments
Closed

dns_namecheap submits invalid CAA records to the Namecheap API #3019

ElizabethCody opened this issue Jun 30, 2020 · 15 comments

Comments

@ElizabethCody
Copy link

The dnsapi dns_namecheap sends invalid CAA records to the Namecheap API.

Steps to reproduce

  1. Attempt to obtain a certificate using dns_namecheap on a domain that has existing CAA records.
  2. Observe the process failing.

Relevant logs

The API response signifying the invalid CAA record:

--snip--
[Tue Jun 30 16:54:23 CDT 2020] response='<?xml version="1.0" encoding="utf-8"?>
<ApiResponse Status="ERROR" xmlns="http://api.namecheap.com/xml.response">
  <Errors>
    <Error Number="2050900">CAA record with tag "issue" has incorrect value.</Error>
  </Errors>
  <Warnings />
  <RequestedCommand>namecheap.domains.dns.sethosts</RequestedCommand>
  <CommandResponse Type="namecheap.domains.dns.setHosts">
    <DomainDNSSetHostsResult Domain="cody.sh" EmailType="" IsSuccess="false">
      <Warnings />
    </DomainDNSSetHostsResult>
  </CommandResponse>
  <Server>PHX01APIEXT02</Server>
  <GMTTimeDifference>--4:00</GMTTimeDifference>
  <ExecutionTime>0.223</ExecutionTime>
</ApiResponse>'
[Tue Jun 30 16:54:23 CDT 2020] error CAA record with tag "issue" has incorrect value.
[Tue Jun 30 16:54:23 CDT 2020] CAA record with tag "issue" has incorrect value.
--snip--

Elsewhere in the logs you can see the script is using data that has undecoded HTML entities. I reckon this is what's causing the issue:

--snip--
[Tue Jun 30 16:54:22 CDT 2020] _host='<host HostId="206913321" Name="@" Type="CAA" Address="0 issue &quot;letsencrypt.org&quot;" MXPref="10" TTL="60" AssociatedAppTitle="" FriendlyName="" IsActive="true" IsDDNSEnabled="false" /'
[Tue Jun 30 16:54:22 CDT 2020] hostid='206913321'
[Tue Jun 30 16:54:22 CDT 2020] hostname='@'
[Tue Jun 30 16:54:22 CDT 2020] hosttype='CAA'
[Tue Jun 30 16:54:22 CDT 2020] hostaddress='0 issue &quot;letsencrypt.org&quot;'
[Tue Jun 30 16:54:22 CDT 2020] hostmxpref='10'
[Tue Jun 30 16:54:22 CDT 2020] hostttl='60'
--snip--
@auto-comment
Copy link

auto-comment bot commented Jun 30, 2020

If this is a bug report, please upgrade to the latest code and try again:
如果有 bug, 请先更新到最新版试试:
acme.sh --upgrade
please also provide the log with --debug 2.
同时请提供调试输出 --debug 2
see: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
Without --debug 2 log, your issue will NEVER get replied.
没有调试输出, 你的 issue 不会得到任何解答.

@ElizabethCody
Copy link
Author

Tagging @EverPresent who seems to be the point of contact on dns_namecheap issues (#2107).

@ElizabethCody
Copy link
Author

Changing

_hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2)

to

  _hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2 | recode html..ascii)

fixes the issue for me, but this is more of a hacky workaround for users than it is a permanent solution for the project since it would add a dependency on recode, which would require an additional package install on most platforms.

@ElizabethCody
Copy link
Author

Perhaps a more permanent solution would be to add some sort of HTML entity decoder into the main acme.sh script.

@maveick2880
Copy link

I can confirm I have the same issue, did @EverPresent respond to you regarding this ?

@ElizabethCody
Copy link
Author

I can confirm I have the same issue, did @EverPresent respond to you regarding this ?

I have not had any correspondence with @EverPresent or any of the project's contributors or maintainers regarding this issue.

@maveick2880
Copy link

I have attempted to apply the workaround you have posted however when I use it I get this error, /usr/local/pkg/acme/acme.sh: recode: not found & error Invalid Address

@ElizabethCody
Copy link
Author

ElizabethCody commented Jul 3, 2020

I have attempted to apply the workaround you have posted however when I use it I get this error, /usr/local/pkg/acme/acme.sh: recode: not found & error Invalid Address

You need to have recode installed.

It's available on many platforms' package repositories.

Platform Command
Debian
Ubuntu
Linux Mint
Pop!_OS
Proxmox VE
sudo apt install recode
CentOS 7
RHEL 7
Oracle Linux 7
Scientific Linux
sudo yum install recode
Fedora
CentOS Stream
CentOS 8
RHEL 8
Oracle Linux 8
Rocky Linux
sudo dnf install recode
FreeBSD
pfSense
OPNSense
sudo pkg install recode
Arch Linux sudo pacman -S recode
openSUSE sudo zypper install recode

@Neilpang
Copy link
Member

Changing

_hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2)

to

  _hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2 | recode html..ascii)

fixes the issue for me, but this is more of a hacky workaround for users than it is a permanent solution for the project since it would add a dependency on recode, which would require an additional package install on most platforms.

@MaxwellCody

Can you please show me the value of "$host" and the value of the result $_hostaddress ?
Maybe I can fix it.

@ElizabethCody
Copy link
Author

ElizabethCody commented Jul 17, 2020

@Neilpang You can see those values in the main issue.

Here they are:

_host='<host HostId="206913321" Name="@" Type="CAA" Address="0 issue &quot;letsencrypt.org&quot;" MXPref="10" TTL="60" AssociatedAppTitle="" FriendlyName="" IsActive="true" IsDDNSEnabled="false" /'
hostaddress='0 issue &quot;letsencrypt.org&quot;'

The dns-namecheap script is pulling out data with undecoded XML entities (notice the instances of &quot;), they need to be decoded because the existing DNS records need to be specified in the subsequent API request's query string.

@maveick2880
Copy link

Just updated to 0.6.8_2 looks like CAA is now working, need to test a little more but so far so good!

@bigalownz
Copy link

Changing

_hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2)

to

  _hostaddress=$(echo "$_host" | _egrep_o ' Address="[^"]*' | cut -d '"' -f 2 | recode html..ascii)

fixes the issue for me, but this is more of a hacky workaround for users than it is a permanent solution for the project since it would add a dependency on recode, which would require an additional package install on most platforms.

had the same problem and this worked for me too

@danieljkemp
Copy link

I just tested this, and the bug still exists. The hack workaround is functional.

I ended up here by way of Proxmox, which is using the dns plugins from this project.

@Neilpang
Copy link
Member

Neilpang commented Mar 4, 2021

please update to latest code and try again.

acme.sh --upgrade -b dev

akulumbeg added a commit to akulumbeg/acme.sh that referenced this issue Mar 20, 2021
* change arvan api script

* change Author name

* change name actor

* Updated --preferred-chain to issue ISRG properly

To support different openssl crl2pkcs7 help cli format

* dnsapi/pdns: also normalize json response in detecting root zone

* Chain (acmesh-official#3408)

* fix acmesh-official#3384
match the issuer to the root CA cert subject

* fix format

* fix acmesh-official#3384

* remove the alt files. acmesh-official#3384

* upgrade freebsd and solaris

* duckdns - fix "integer expression expected" errors (acmesh-official#3397)

* fix "integer expression expected" errors

* duckdns fix

* Update dns_duckdns.sh

* Update dns_duckdns.sh

* Implement smtp notify hook

Support notifications via direct SMTP server connection.
Uses Python (2.7.x or 3.4+) to communicate with SMTP server.

* Make shfmt happy

(I'm open to better ways of formatting the heredoc
that embeds the Python script.)

* Only save config if send is successful

* Add instructions for reporting bugs

* Prep for curl or Python; clean up SMTP_* variable usage

* Implement curl version of smtp notify-hook

* More than one blank line is an abomination, apparently

I will not try to use whitespace to group code visually

* Fix: Unifi deploy hook support Unifi Cloud Key (acmesh-official#3327)

* fix: unifi deploy hook also update Cloud Key nginx certs

When running on a Unifi Cloud Key device, also deploy to
/etc/ssl/private/cloudkey.{crt,key} and reload nginx. This
makes the new cert available for the Cloud Key management
app running via nginx on port 443 (as well as the port 8443
Unifi Controller app the deploy hook already supported).

Fixes acmesh-official#3326

* Improve settings documentation comments

* Improve Cloud Key pre-flight error messaging

* Fix typo

* Add support for UnifiOS (Cloud Key Gen2)

Since UnifiOS does not use the Java keystore (like a Unifi
Controller or Cloud Key Gen1 deploy), this also reworks
the settings validation and error messaging somewhat.

* PR review fixes

* Detect unsupported Cloud Key java keystore location

* Don't try to restart inactive services

(and remove extra spaces from reload command)

* Clean up error messages and internal variables

* Change to _getdeployconf/_savedeployconf

* Switch from cp to cat to preserve file permissions

* feat: add huaweicloud error handling

* fix: fix freebsd and solaris

* support openssl 3.0
fix acmesh-official#3399

* make the fix for rsa key only

* Use PROJECT_NAME and VER for X-Mailer header

Also add X-Mailer header to Python version

* Add _clearaccountconf_mutable()

* Rework read/save config to not save default values

Add and use _readaccountconf_mutable_default and
_saveaccountconf_mutable_default helpers to capture
common default value handling.

New approach also eliminates need for separate
underscore-prefixed version of each conf var.

* Implement _rfc2822_date helper

* Clean email headers and warn on unsupported address format

Just in case, make sure CR or NL don't end up in
an email header.

* Clarify _readaccountconf_mutable_default

* Add Date email header in Python implementation

* Use email.policy.default in Python 3 implementation

Improves standards compatibility and utf-8 handling
in Python 3.3-3.8. (email.policy.default becomes the
default in Python 3.9.)

* Prefer Python to curl when both available

* Change default SMTP_SECURE to "tls"

Secure by default. Also try to minimize configuration errors.
(Many ESPs/ISPs require STARTTLS, and most support it.)

* Update dns_dp.sh

没有encode中文字符会导致提交失败

* No need to include EC parameters explicitly with the private key.
(they are embedded)

* Fixes response handling and thereby allow issuing of subdomain certs

* Adds comment

* fix acmesh-official#3402

* dnsapi/ionos: Use POST instead of PATCH for adding TXT record

The API now supports a POST route for adding records. Therefore
checking for already existing records and including them in a PATCH
request is no longer necessary.

* fix acmesh-official#3433

* fix acmesh-official#3019

* fix format

* Update dns_servercow.sh to support wildcard certs

Updated dns_servercow.sh to support txt records with multiple entries. This supports wildcard certificates that require txt records with the same name and different contents.

* Update dns_servercow.sh to support wildcard certs

Updated dns_servercow.sh to support txt records with multiple entries. This supports wildcard certificates that require txt records with the same name and different contents.

* fix acmesh-official#3312

* fix format

* feat: add dns_porkbun

* fix: prevent rate limit

Co-authored-by: Vahid Fardi <[email protected]>
Co-authored-by: neil <[email protected]>
Co-authored-by: Gnought <[email protected]>
Co-authored-by: manuel <[email protected]>
Co-authored-by: jerrm <[email protected]>
Co-authored-by: medmunds <[email protected]>
Co-authored-by: Mike Edmunds <[email protected]>
Co-authored-by: Easton Man <[email protected]>
Co-authored-by: czeming <[email protected]>
Co-authored-by: Geert Hendrickx <[email protected]>
Co-authored-by: Kristian Johansson <[email protected]>
Co-authored-by: Lukas Brocke <[email protected]>
Co-authored-by: anom-human <[email protected]>
Co-authored-by: neil <[email protected]>
Co-authored-by: Quentin Dreyer <[email protected]>
akulumbeg pushed a commit to akulumbeg/acme.sh that referenced this issue Mar 21, 2021
@plotters
Copy link

plotters commented Apr 5, 2021

I can confirm that using the Dev branch it works now. Thanks @Neilpang @MaxwellCody

please update to latest code and try again.

acme.sh --upgrade -b dev

mjbnz pushed a commit to mjbnz/acme.sh that referenced this issue Apr 8, 2021
Sp1l pushed a commit to Sp1l/acme.sh that referenced this issue Aug 10, 2021
Sp1l pushed a commit to Sp1l/acme.sh that referenced this issue Aug 10, 2021
HQJaTu pushed a commit to HQJaTu/acme.sh that referenced this issue Aug 10, 2023
* change arvan api script

* change Author name

* change name actor

* Updated --preferred-chain to issue ISRG properly

To support different openssl crl2pkcs7 help cli format

* dnsapi/pdns: also normalize json response in detecting root zone

* Chain (acmesh-official#3408)

* fix acmesh-official#3384
match the issuer to the root CA cert subject

* fix format

* fix acmesh-official#3384

* remove the alt files. acmesh-official#3384

* upgrade freebsd and solaris

* duckdns - fix "integer expression expected" errors (acmesh-official#3397)

* fix "integer expression expected" errors

* duckdns fix

* Update dns_duckdns.sh

* Update dns_duckdns.sh

* Implement smtp notify hook

Support notifications via direct SMTP server connection.
Uses Python (2.7.x or 3.4+) to communicate with SMTP server.

* Make shfmt happy

(I'm open to better ways of formatting the heredoc
that embeds the Python script.)

* Only save config if send is successful

* Add instructions for reporting bugs

* Prep for curl or Python; clean up SMTP_* variable usage

* Implement curl version of smtp notify-hook

* More than one blank line is an abomination, apparently

I will not try to use whitespace to group code visually

* Fix: Unifi deploy hook support Unifi Cloud Key (acmesh-official#3327)

* fix: unifi deploy hook also update Cloud Key nginx certs

When running on a Unifi Cloud Key device, also deploy to
/etc/ssl/private/cloudkey.{crt,key} and reload nginx. This
makes the new cert available for the Cloud Key management
app running via nginx on port 443 (as well as the port 8443
Unifi Controller app the deploy hook already supported).

Fixes acmesh-official#3326

* Improve settings documentation comments

* Improve Cloud Key pre-flight error messaging

* Fix typo

* Add support for UnifiOS (Cloud Key Gen2)

Since UnifiOS does not use the Java keystore (like a Unifi
Controller or Cloud Key Gen1 deploy), this also reworks
the settings validation and error messaging somewhat.

* PR review fixes

* Detect unsupported Cloud Key java keystore location

* Don't try to restart inactive services

(and remove extra spaces from reload command)

* Clean up error messages and internal variables

* Change to _getdeployconf/_savedeployconf

* Switch from cp to cat to preserve file permissions

* feat: add huaweicloud error handling

* fix: fix freebsd and solaris

* support openssl 3.0
fix acmesh-official#3399

* make the fix for rsa key only

* Use PROJECT_NAME and VER for X-Mailer header

Also add X-Mailer header to Python version

* Add _clearaccountconf_mutable()

* Rework read/save config to not save default values

Add and use _readaccountconf_mutable_default and
_saveaccountconf_mutable_default helpers to capture
common default value handling.

New approach also eliminates need for separate
underscore-prefixed version of each conf var.

* Implement _rfc2822_date helper

* Clean email headers and warn on unsupported address format

Just in case, make sure CR or NL don't end up in
an email header.

* Clarify _readaccountconf_mutable_default

* Add Date email header in Python implementation

* Use email.policy.default in Python 3 implementation

Improves standards compatibility and utf-8 handling
in Python 3.3-3.8. (email.policy.default becomes the
default in Python 3.9.)

* Prefer Python to curl when both available

* Change default SMTP_SECURE to "tls"

Secure by default. Also try to minimize configuration errors.
(Many ESPs/ISPs require STARTTLS, and most support it.)

* Update dns_dp.sh

没有encode中文字符会导致提交失败

* No need to include EC parameters explicitly with the private key.
(they are embedded)

* Fixes response handling and thereby allow issuing of subdomain certs

* Adds comment

* fix acmesh-official#3402

* dnsapi/ionos: Use POST instead of PATCH for adding TXT record

The API now supports a POST route for adding records. Therefore
checking for already existing records and including them in a PATCH
request is no longer necessary.

* fix acmesh-official#3433

* fix acmesh-official#3019

* fix format

* Update dns_servercow.sh to support wildcard certs

Updated dns_servercow.sh to support txt records with multiple entries. This supports wildcard certificates that require txt records with the same name and different contents.

* Update dns_servercow.sh to support wildcard certs

Updated dns_servercow.sh to support txt records with multiple entries. This supports wildcard certificates that require txt records with the same name and different contents.

* fix acmesh-official#3312

* fix format

* feat: add dns_porkbun

* fix: prevent rate limit

Co-authored-by: Vahid Fardi <[email protected]>
Co-authored-by: neil <[email protected]>
Co-authored-by: Gnought <[email protected]>
Co-authored-by: manuel <[email protected]>
Co-authored-by: jerrm <[email protected]>
Co-authored-by: medmunds <[email protected]>
Co-authored-by: Mike Edmunds <[email protected]>
Co-authored-by: Easton Man <[email protected]>
Co-authored-by: czeming <[email protected]>
Co-authored-by: Geert Hendrickx <[email protected]>
Co-authored-by: Kristian Johansson <[email protected]>
Co-authored-by: Lukas Brocke <[email protected]>
Co-authored-by: anom-human <[email protected]>
Co-authored-by: neil <[email protected]>
Co-authored-by: Quentin Dreyer <[email protected]>
HQJaTu pushed a commit to HQJaTu/acme.sh that referenced this issue Aug 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants