我试图将Windows批处理脚本编写到
.pem
证书.xml
- 文件进行签名
醇>
签名的名称应与.xml
- 文件的名称相同,但后缀为.sig
,例如XML: this.xml <=> signature: this.xml.sig
用于签署文件的openSSL命令是
openssl dgst -binary -sha512 -sign -out
所以要创建签名&#34; this.xml.sig&#34; xml-file&#34; this.xml&#34;通过使用证书&#34; cert.pem&#34;我必须使用以下命令
openssl dgst -binary -sha512 -sign cert.pem -out this.xml.sig this.xml
然后,您将被要求输入应该用于签署XML的证书密码。
所以我编写了以下脚本,但是当我双击.bat
- 脚本时,我遇到了以下问题:
.pem
- 文件 - 但是有一个。for
循环以使用递归搜索(在/r
之前添加.
)时,它会在子目录中找到.pem
- 文件并要求我输入密码,但在此之后关闭命令窗口并且不创建签名剧本:
@echo off
Rem placeholder for cert-file
set cert=""
for %%g in (*.pem) do (
echo "Certificate found: " %%g
set cert=%%g
Rem exit loop as we found a cert-file
goto :SignFiles
)
echo "No cert file found"
exit
:SignFiles
Rem Ask user for Cert-Password
set /p password="Please input cert-password: "
Rem debug
echo %password%
Rem sign all xml-files in directory
for %%g in (*.xml) do (
echo "Sign XML-File: " %%g
Rem sign file and pass saved password for signing
openssl dgst -binary -sha512 -out %%g.sig -sign=%cert% %%g < %password%
)
pause
exit
任何人都可以帮助我让脚本按预期运行吗?
修改
更新了将评论从::
添加到Rem
的脚本。行为保持不变。黑色命令框无需打开和关闭,无需输入密码和/或创建签名
EDIT2
删除了foor循环中的.
。现在循环正在运行但没有完全正常工作。在尝试执行openssl命令时,我得到System can not find the file
。为了调试这个,我添加了
echo %cert% > cert.txt
echo %%g > file.txt
到第二个foor循环,看到证书和xml文件的名称被正确写入cert.txt / file.txt。但仍然没有创建签名。
答案 0 :(得分:1)
for . %%g ...
应该是
for %%g ...
您的代码会产生语法错误,如果您只需单击它就可以运行批处理,从而导致窗口关闭。要查看语法错误,您需要从提示符运行批处理。
如果您通过单击批处理批处理,则不会看到您故意生成的消息,因为echo
后面的命令是exit
。可能在退出之前插入pause
命令以确保看到该消息 - 或者将消息重定向到文件...