我需要用PFX文件创建数字签名的PDF。我使用的是TCPDF,但TCPDF适用于PEM/CRT文件。如果我在共享主机上上传文件并尝试转换文件,它总是零KB。
这是我试过的代码。
exec('openssl pkcs12 -in cert.pfx -nocerts -out keyfile-encrypted.key');
几种可能性:
- 我认为对于数字签名,您需要PEM形式的私钥和证书。您使用了
-nocerts
选项,因此您只能获得私钥。删除该选项以将证书保留为PEM导出的一部分 - 如果您拥有的PFX文件是加密的,那么您需要以某种方式将加密密码提供给
openssl
命令来解密PFX文件。如果您从openssl
获得一个0KB的文件,则可能检测到您的请求的非交互式性质并退出 - 您需要在
openssl
命令上指定-nodes选项,以防止openssl
尝试加密生成的文件。同样,如果openssl
正在等待输入(加密密码),但检测到一个非交互式调用,那么它可能只是在没有向文件写入任何内容的情况下失败了 -
使用PHP中
exec
调用的输出和返回var参数来确定出了什么问题:exec('penssl pkcs12-in-cert.pfx-nocerts-out keyfile encrypted.key',$output,$retval);
$output
变量应包含命令的输出;$retval
变量将包含返回代码,然后您可以对照openssl的文档进行检查。
我发现这个答案比实际情况更令人困惑。我想使用pfx文件来设置Nginx反向代理。用例略有不同,但归根结底是一样的:您需要一个.crt文件和一个.key文件。这分为两部分。我是在Linux终端上完成的。
获取公共证书文件:
openssl pkcs12 -in ./cert.pfx -clcerts -nokeys -out public.crt
获取私钥文件:
openssl pkcs12 -in ./cert.pfx -nocerts -nodes -out private.key
您可能会被要求提供"导入密码",您必须从.pfx文件的原始发件人处获得该密码。