包含 CSR 的 POST 请求在 Bash 中失败



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

程序 - Bash(英语: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

输出 - 打击

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

在上面的脚本中,如果我将行"csr":"'$csr'"替换为"csr:"----开始证书请求----XXXXXXXX----结束证书请求----">,那么这将正常工作。

你能帮我调试一下吗?

谢谢!

也许正在计算 $csr 中的字符串,例如如果放在双引号中并且生成的字符串与预期不同。 首先,尝试查看$csr是否与"$csr"相同。

若要发布文件的内容,请使用jq为你生成 JSON blob:这将自动处理任何必要的引用。通过使用-d选项的@-参数,jq的输出直接通过管道传输到curl。(@前缀字符串表示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 @-
)

最新更新