我编写了一个向服务器发送 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 @-
)