MW.*_*MW. 56 php ssl https soap soap-client
简介:
有没有办法强制PHP内置的SoapClient类通过HTTPS连接到具有无效证书的服务器?
我为什么要那样做?
我在没有DNS条目或证书的服务器上部署了一个新的应用程序.我想在设置DNS条目和修复证书之前尝试使用SoapClient连接它,最合理的方法是让客户端在测试期间忽略证书.
我不是意识到这是一个巨大的安全隐患吗?
这仅用于测试.当服务投入生产时,将会有一个有效的证书,客户端将被强制验证它.
Kai*_*aii 98
SoapClient在其参数中获取流上下文,您可以自己创建.这样您几乎可以控制传输层的每个方面:
$context = stream_context_create([
'ssl' => [
// set some SSL/TLS specific options
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$client = new SoapClient(null, [
'location' => 'https://...',
'uri' => '...',
'stream_context' => $context
]);
Run Code Online (Sandbox Code Playgroud)
文档:
tob*_*bik 12
接受的答案有效,但仅限于非WSDL模式.如果您尝试在WSDL模式下使用它(即您将WSDL文件URL作为第一个参数传递),您将面临下载WSDL文件时忽略流上下文这一事实.因此,如果WSDL文件也位于证书损坏的服务器上,它将失败,很可能抛出该消息failed to load external entity.在这里和这里看到更多.
如建议的那样,最简单的方法是手动下载WSDL文件并将本地副本传递给SoapClient.例如,您可以file_get_contents使用接受的答案中的相同流上下文来下载它.
请注意,创建SoapServer时还必须执行此操作.