包含CSR的POST请求在Bash

时间:2017-08-24 22:00:13

标签: linux bash curl post scripting

我编写了一个向服务器发送POST请求的bash脚本。该请求包含证书签名请求,服务器对其进行签名并返回证书。 当我将CSR文本复制并粘贴到POST正文中时,POST请求成功。但是当我从变量中读取CSR时,POST请求失败。我已附上以下程序的片段。

计划 - Bash

openssl req -new -newkey rsa:2048 -nodes -out cert.csr -keyout priv.key -subj "/C=MyCountry/ST=MyState/L=MyCity/O=MyCompany/OU=MyDept/CN=MyComp"
if [ $? == 0 ]; then
  csr=$(<cert.csr)
fi
response=$(curl -o - -s -w "%{http_code}\n" -X POST \
https://xxx.xxx.com/URI-END-POINT \
-H "authorization: $token" \
-H "content-type: application/json" \
-d '{
  "digicert": {
  "csr": "'$csr'",
  "profileName": "pn123",
  "signatureHash": "sh123",
  "userPrincipalName": "pn123",
  "validationScopeId": "vsi123"
  },
"IccId": "sim123",
"MacAddress": "mac123"
}')
if [ $?==0 ]; then
  status=$(echo $response | tail -c 4)
  if [ "$status" == "$http_success" ]; then
      echo -e "Request for certificate SUCCESS"
  else
      echo -e "Request for certificate FAILED with return code $status"
  fi
else
  echo -e "Request for certificate FAILED"
fi

OUTPUT - Bash

curl: option -----END: is unknown
curl: try 'curl --help' or 'curl --manual' for more information

在上面的脚本中,如果我用替换行&#34; csr&#34;:&#34;&#39; $ csr&#39;&#34;, >&#34; csr&#34;:&#34; ----开始证书申请---- XXXXXXX ----结束证书申请----&#34; ,那么这将有效细

你能帮我调试吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

可能正在评估$ csr中的字符串,就像放入双引号并且结果字符串与预期的不同。 首先,尝试查看$ csr是否与“$ csr”相同。

答案 1 :(得分:0)

要发布文件内容,请使用jq为您生成JSON blob:这将自动处理任何必要的引用。通过使用jq选项的curl参数,@-的输出直接传递给-d。 (@ - 带前缀的字符串表示应从中读取文件curl的名称; -是标准输入的别名。)

response=$(jq -n --arg csr "$(<csr)" '{
                                     digicert: {
                                       csr: $csr,
                                       profileName: "pn123",
                                       signatureHash : "sh123",
                                       userPrincipalName: "pn123",
                                       validationScopeId: "vsi123"
                                     },
                                     IccId: "sim123",
                                     MacAddress: "mac123"
                                   }' |
            curl -o - -s -w "%{http_code}\n" -X POST \
                https://xxx.xxx.com/URI-END-POINT \
                -H "authorization: $token" \
                -H "content-type: application/json" \
                -d @-
)