想知道为什么尝试使用 cURL 将 Letsencrypt .pem 证书上传到 Cloudflare API 会引发"Malformed JSON in request body"错误?



我有一个脚本,试图在Cloudflare上替换我的站点的SSL证书。Certbot每三个月从Letsencrypt自动续订本地服务器上的证书。现在,certbot续订的SSL.pem证书需要使用其API上传到Cloudflare。

PRIVATE_KEY="/etc/letsencrypt/live/autoxxx.com.au/privkey.pem"
CERTIFICATE="/etc/letsencrypt/live/aautoxxx.com.au/cert.pem"
# read from files
PRIVATE_KEY=`cat $PRIVATE_KEY`
CERTIFICATE=`cat $CERTIFICATE`
DATA='{"private_key":"'$PRIVATE_KEY'","certificate":"'$CERTIFICATE'","bundle_method":"ubiquitous"}' 
curl -i 
-X PATCH "https://api.cloudflare.com/client/v4/zones/rCWR4i3A24NZEzI4dFLYLAhU7tUBtJUSYQkh/custom_certificates/iqXVG2FV8Cgj5FXGMexIoJovtFQx5UhecVya" 
-H "X-Auth-Email: webdev@autoxxx.com.au" 
-H "X-Auth-Key: pg5Q89JI33nsgdA9iZwPky3q" 
-H "Content-Type: application/json" 
-d "$DATA" --trace-ascii /dev/stdout

但是,运行此脚本会引发以下错误

{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}

在回答以下问题时,尝试了引用建议,但仍然存在相同的错误。

为什么我在这个cURL调用的请求体中得到一个格式错误的JSON?

我广泛搜索了谷歌。尝试了以下操作https://docs.vmware.com/en/Unified-Access-Gateway/3.0/com.vmware.access-point-30-deploy-config.doc/GUID-870AF51F-AB37-4D6C-B9F5-4BFEB18F11E9.html将.pem放入一行。使用awk'NF{sub(/\r/,"(;printf"%s\n",$0;}'来实现这一点,但现在它抛出了"无效证书"响应。

下面的代码运行良好。上面的awk命令将回车替换为新行,但Cloudflare显然想要文字"\n"。

PRIVATE_KEY="/etc/letsencrypt/live/autoxxx.com.au/privkey.pem"
CERTIFICATE="/etc/letsencrypt/live/aautoxxx.com.au/cert.pem"
# read from file, put the .pem into single line and replace carriage returns with the literal "n"
PRIVATE_KEY=`awk 'NF {sub(/r/, ""); printf "%s\n",$0;}' $PRIVATE_KEY`
CERTIFICATE=`awk 'NF {sub(/r/, ""); printf "%s\n",$0;}' $CERTIFICATE`
DATA='{"private_key":"'$PRIVATE_KEY'","certificate":"'$CERTIFICATE'","bundle_method":"ubiquitous"}' 
curl -i 
-X PATCH "https://api.cloudflare.com/client/v4/zones/rCWR4i3A24NZEzI4dFLYLAhU7tUBtJUSYQkh/custom_certificates/iqXVG2FV8Cgj5FXGMexIoJovtFQx5UhecVya" 
-H "X-Auth-Email: webdev@autoxxx.com.au" 
-H "X-Auth-Key: pg5Q89JI33nsgdA9iZwPky3q" 
-H "Content-Type: application/json" 
-d "$DATA" --trace-ascii /dev/stdout

最新更新