0

我在 php 中接收二进制数据作为证书内容,我想将其下载到浏览器。使用证书查看器打开它时,我总是收到此消息:

hex(19).pfx
Could not display 'hex(19).pfx'
Reason:   Unrecognized or unsupported data.

这个二进制数据是正确的,我立即把它放在服务器上的一个文件中,它制作了一个有效的证书。

我认为问题出在两个地方:

  • 命令的输出

    exec('ssh root@192.168.0.137 "echo '.$bindata.' | xxd -p -r | tr -d \'\n\' "',$output);

while$bindata来自在 bash 中制作证书 pfx 文件后的转换xxd -p

  • 或者它在标题中,有丢失或添加:

    header("Content-Description: File Transfer");
    header("Content-Type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    header("Content-Disposition: attachment; filename=hex.pfx");
    header('Content-Length: '.  strlen($output[0]));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    echo $output[0];
    exit();
    

    怎么了?

4

1 回答 1

0

解决方案是删除 xxd 输出的空格

在 bash 中:

res=`xxd -p $exportedkey`
echo "${res//[[:space:]]/}"

在 php 中:

$hex = hex2bin($result);
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=hex.pfx");
header('Content-Length: '.  strlen($hex));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

echo $hex;
exit(); 

希望它至少可以帮助某人

于 2013-06-23T12:49:22.623 回答