Php 警告:openssl_pkcs7_sign():在Linux服务器上获取私钥时出错
也许这是一个重复的问题,并在或中提出,但这个问题似乎是具体的 我想连接到使用ssl证书的银行互联网支付系统,但遇到以下错误: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
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”)进行测试在openssl调用前编写>代码,在数小时的搜索后查看是否输出预期文件,并尝试不同的方法和指导@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 calopenssl\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
);