我必须通过命令行在 Windows-Server 2012 上使用 OpenSSL 签署 XML 文件。
不幸的是,如果我在命令中设置密码,它就不起作用了。然后我总是收到错误:“只能签名或验证一个文件”
如果我使用不带密码选项的命令行,那么它似乎可以工作,因为它会询问密码,如果输入则创建 sig 文件。
不幸的是,我想在自动脚本中使用该命令,因此我需要通过命令行传递密码。
尝试了以下几行:
没有密码选项(工作正常):
C:\OpenSSL-Win64\bin\openssl.exe dgst -sha512 -binary -out "D:\BZSt\CRS\m5_cs_bz101481661_1013801661_test00000001.xml.sig" -sign "D:\BZSt\CRS\SFTP-Keys\FinDK_elster_2048.pem" "D:\BZSt\CRS\m5_cs_bz101481661_1013801661_test00000001.xml"
使用密码选项(不起作用/注意:密码存储在 txt 文件中,因为它包含特殊字符,并且通过密码周围的双引号转义不起作用):
C:\OpenSSL-Win64\bin\openssl.exe dgst -sha512 -binary -out "D:\BZSt\CRS\m5_cs_bz101481661_1013801661_test00000001.xml.sig" -sign "D:\BZSt\CRS\SFTP-Keys\FinDK_elster_2048.pem" "D:\BZSt\CRS\m5_cs_bz101481661_1013801661_test00000001.xml" -pass file:"D:\BZSt\CRS\SFTP-Keys\BZSt-Passphrase.txt"
也许我的语法哪里错了。如能得到任何帮助我将不胜感激。
此致,
P. 鲍梅尔
答案1
检查手册页openssl-dgst(v1.0.2,但也适用于其他较新的版本)显示密码短语参数的正确参数是-passin
, 不是-pass
。
由于该参数-pass
不被识别为选项开关,并且 dgst 命令的最后一个参数指示文件名,因此假定您提供了三个文件名:您感兴趣的文件、名为的文件-pass
和名为的文件file:D:\.....
,因此您收到错误消息。