如何在像Godaddy这样的共享主机上用PHP脚本将pfx转换为crt/pem



我需要用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文件的原始发件人处获得该密码。

相关内容

  • 没有找到相关文章

最新更新