也许这是一个重复的问题,并在这个或这个问题中被问到,但是这个问题似乎很具体。
我想连接到使用ssl证书的银行互联网支付系统,但遇到此错误:
Warning: openssl_pkcs7_sign(): error getting private key in /home/zarsamco/public_html/eghtesad/ipg/enpayment.php on line 52
Run Code Online (Sandbox Code Playgroud)
这是我的代码中使用证书文件的部分(在本地wamp上):
openssl_pkcs7_sign(realpath("msg.txt"), realpath("signed.txt"), "file://D:/wamp/www/zarsam/eghtesad/certs/ZarsamHonar.pem",
array ("file://D:/wamp/www/zarsam/eghtesad/certs/ZarsamHonar.pem", "secretPass"),
array (), PKCS7_NOSIGS
);
Run Code Online (Sandbox Code Playgroud)
由于ZarsamHonar.pem的地址是绝对的,因此在本地(第8窗口)的wamp中工作正常 。但是,此代码在远程服务器(Linux)上不起作用,因为我认为这种地址方式特别适用于Windows。
我尝试了许多在网上找到的寻址方法以及相关的SO问题。
例如,我尝试下面的代码(enpayment.php页面):
$prepend = "file://";
openssl_pkcs7_sign(realpath(dirname(__FILE__)) . "../msg.txt",
realpath(dirname(__FILE__)) . "../signed.txt",
$prepend . realpath(dirname(__FILE__)) ."/certs/ZarsamHonar.pem",
array($prepend . realpath(dirname(__FILE__)) ."/certs/ZarsamHonar.pem", "secretPass"),array(), PKCS7_NOSIGS);
Run Code Online (Sandbox Code Playgroud)
但这也没有解决。
这是ZarsamHonar.pem,msg.txt和signed.txt文件的相关文件结构和位置的屏幕截图:
谁能帮我?
经过数小时的搜索,尝试使用不同的方法和指南@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
);
Run Code Online (Sandbox Code Playgroud)
在第一个参数中必须使用realpath函数,但不要用于第二个参数。
因为它尚不存在。为了寻址第三和第四参数,必须使用绝对路径以及file://前缀。
| 归档时间: |
|
| 查看次数: |
5352 次 |
| 最近记录: |