我编写了一个向服务器发送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; ,那么这将有效细
你能帮我调试吗?
谢谢!
答案 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 @-
)