Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:openssl_pkcs7_sign():在Linux服务器上获取私钥时出错_Php_Ssl - Fatal编程技术网

Php 警告:openssl_pkcs7_sign():在Linux服务器上获取私钥时出错

Php 警告:openssl_pkcs7_sign():在Linux服务器上获取私钥时出错,php,ssl,Php,Ssl,也许这是一个重复的问题,并在或中提出,但这个问题似乎是具体的 我想连接到使用ssl证书的银行互联网支付系统,但遇到以下错误: Warning: openssl_pkcs7_sign(): error getting private key in /home/zarsamco/public_html/eghtesad/ipg/enpayment.php on line 52 这是我的代码中使用证书文件的部分(在wamp local上): 它在本地(窗口8)的wamp中运行良好,因为ZarsamH

也许这是一个重复的问题,并在或中提出,但这个问题似乎是具体的

我想连接到使用ssl证书的银行互联网支付系统,但遇到以下错误:

Warning: openssl_pkcs7_sign(): error getting private key in /home/zarsamco/public_html/eghtesad/ipg/enpayment.php on line 52
这是我的代码中使用证书文件的部分(在wamp local上):

它在本地(窗口8)的wamp中运行良好,因为ZarsamHonar.pem的地址是绝对的。但是,这段代码在远程服务器(Linux)上不起作用,因为我认为这种地址方式是windows特有的

我尝试了许多在网上找到的寻址方法和相关的SO问题。
例如,我尝试以下代码(enpayment.phppage):

但也没有成功

这是ZarsamHonar.pem、msg.txt和signed.txt文件的相关文件结构和位置的屏幕截图:


有人能帮我吗?

您应该明确地在这里使用相对路径(应该在本地和在线工作),在这种情况下(在
enpayment.php
中),您应该使用:

openssl_pkcs7_sign(realpath("msg.txt"), realpath("signed.txt"),
    "../certs/ZarsamHonar.pem",
    array ("../certs/ZarsamHonar.pem", "secretPass"),
    array (), PKCS7_NOSIGS
);

要确认路径已正确解析,可以通过放置
echo文件\u get\u内容(“../certs/ZarsamHonar.pem”)进行测试代码,在数小时的搜索后查看是否输出预期文件,并尝试不同的方法和指导@Sjon,当然,根据php.net我找到了解决方案

最后一个代码是:

openssl_pkcs7_sign(realpath("msg.txt"), "signed.txt",
                'file://'.realpath('/home/zarsamco/public_html/eghtesad/certs/zarsamhonar.pem'),
                array ('file://'.realpath('/home/zarsamco/public_html/eghtesad/certs/zarsamhonar.pem'), "secretPass"),
                array (), PKCS7_NOSIGS
            );  
在第一个参数中,必须使用realpath函数,但第二个参数不使用。

因为它还不存在。为了寻址第三个和第四个参数,必须使用绝对路径和文件://前缀。

Thnaks@Sjon。我使用了
echo文件获取内容(../certs/ZarsamHonar.pem)
页面上打印了ZarsamHonar.pem的内容,但对于
openssl\u pkcs7\u sign
,再次出现相同的错误。我认为.pem文件的地址必须是绝对的。但我不知道远程绝对寻址是如何实现的。试试
\uuuuu DIR\uuuuu.'/../certs/ZarsamHonar.pem'
,这行吗?我试过了,但不行。当然我发现
echo\uuuuuu DIR./../certs/ZarsamHonar.pem”
返回
D:\wamp\www\zarsam\eghtesad\ipg/。/certs/ZarsamHonar.pem
字符串,该字符串包含不能正确寻址的斜杠和反斜杠字符。可以;尝试将其传递给
openssl\u pkcs7\u sign
i cal
openssl\u pkcs7\u sign
函数体中名为
enPayment
的类中的一个方法,我在
index.php
文件中从此类创建了一个新对象。这可能是这个问题的原因吗?
openssl_pkcs7_sign(realpath("msg.txt"), realpath("signed.txt"),
    "../certs/ZarsamHonar.pem",
    array ("../certs/ZarsamHonar.pem", "secretPass"),
    array (), PKCS7_NOSIGS
);
openssl_pkcs7_sign(realpath("msg.txt"), "signed.txt",
                'file://'.realpath('/home/zarsamco/public_html/eghtesad/certs/zarsamhonar.pem'),
                array ('file://'.realpath('/home/zarsamco/public_html/eghtesad/certs/zarsamhonar.pem'), "secretPass"),
                array (), PKCS7_NOSIGS
            );