php tls,使用TLS在PHP中建立连接

我为特殊目的编写了一个小型SIP客户端.

基本上,它使用函数fsockopen()连接到端口5060

$fp = fsockopen("10.0.0.1", 5060, $errno, $errstr, 30);

然后基本上使用fread()和fwrite()读写SIP命令.

现在,我的SIP服务操作符希望我们的客户使用SIPS,

基本上是通过TLS的SIP.我花了几个小时寻找信息

关于如何使用PHP但不使用TLS连接到TLS的端口

成功.显然,fsockopen()在某种程度上支持TLS,但是

当我将以上内容替换为:

$fp = fsockopen("tls://10.0.0.1", 5061, $errno, $errstr, 10);

我什么都没有.我可以使用OpenSSL客户端从外壳连接到服务器:

$openssl s_client -connect 10.0.0.1:5061

而且我可以通过该连接与SIP服务器通信,而不会出现问题. OpenSSL支持在PHP中进行编译.

我的问题是我无法在PHP中与服务器建立TLS连接.我在一些论坛中注意到,在旧版本的PHP中,可以通过fsockopen()构建和使用SSL上下文,但显然不再可用,因为我收到有关太多参数的错误消息.

我还尝试将stream_context_create()与stream_context_set_option()结合使用,但没有从服务器得到任何答复:

$context = stream_context_create();

$result=stream_context_set_option($context, 'ssl', 'verify_peer', 'TRUE');

$result=stream_context_set_option($context, 'ssl', 'cafile', 'cert.cer');

$result=stream_context_set_option($context, 'ssl', 'verify_depth', '5');

$fp = stream_socket_client('tls://'.$host.':'.$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);

但我仍然无法从服务器获得任何答复或错误.在PHP中使用TLS的推荐工作方式是什么?

解决方法:

我认为您的某些选择对于验证自签名证书是错误的;以下内容足以使其正常工作:

$context = stream_context_create([

'ssl' => [

'verify_peer' => true,

'allow_self_signed' => true,

'local_cert' => 'cert.cer',

],

]);

标签:ssl,php

来源: https://codeday.me/bug/20191029/1963911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值