【问题标题】:Wonder why trying to upload a Letsencrypt .pem certificate using cURL to Cloudflare API throws "Malformed JSON in request body" error?想知道为什么尝试使用 cURL 将 Letsencrypt .pem 证书上传到 Cloudflare API 会引发“请求正文中格式错误的 JSON”错误?
【发布时间】:2018-12-13 11:08:19
【问题描述】:

我有一个脚本试图在 Cloudflare 上替换我网站的 SSL 证书。 Certbot 每三个月从 Letsencrypt 自动更新本地服务器上的证书。现在,需要使用其 API 将由 certbot 续订的 SSL .pem 证书上传到 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}

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

Why do I get a malformed JSON in request body in this cURL call?

【问题讨论】:

    标签: api ssl cloudflare lets-encrypt certbot


    【解决方案1】:

    我在 Google 上进行了广泛的搜索。 尝试以下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 命令将回车替换为新行 \n,但 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-14
      • 2018-09-19
      • 2021-08-09
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多