我为特殊目的编写了一个小型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

php tls,使用TLS在PHP中建立连接相关推荐

  1. oracle中dblink怎么用,Oracle中建立了dblink怎么使用

    Oracle应用服务器OS 1.查看数据库的global_name SELECT * FROM GLOBAL_NAME; 2.查看global_name参数是true还是false show para ...

  2. paho mqtt java_MQTT之Eclipse.Paho源码(一)--建立连接

    写在前面 通过上一个章节MQTT系列---Java端实现消息发布与订阅的介绍,我们已经基本构建出一个可以简单通信的MQTT生产和消费服务,并且具备基本的发布/订阅消息功能.那么从本章开始,我们将从源代 ...

  3. 如何在嵌入式 Linux 和物联网中建立信任根

    随着物联网.5G 和嵌入式设备成为每个人日常生活的重要组成部分,安全和对IOT产品的信任已成为每个用户的核心关切.嵌入式设备没有良好的安全记录:在过去的几年中,出现了大量物联网设备的黑客攻击案例,这些 ...

  4. SSL/TLS(4): TLS连接握手过程详细分析

    SSL/TLS(1):基本概念通俗解释 SSL/TLS (2):通俗解释SSL/TLS为什么安全 SSL/TLS(3): CA证书解释 前言 在前面的文章中,我们讲述了SSL/TLS相关概念和CA证书 ...

  5. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面

    本节书摘来自异步社区<深入浅出iPhone/iPad开发(第2版)>一书中的在Xcode中建立你的界面,作者 [美]Dan Pilone , Tracey Pilone,更多章节内容可以访 ...

  6. Microbiome:在人工肠道中建立动态线性模型指导设计和分析微生物组研究

    文章目录 在人工肠道中建立动态线性模型指导设计和分析微生物组研究 导读 摘要 主要结果 图1. 技术变异掩盖了微生物动态的模型 图2. 10个最高丰度细菌科随时间变化 图3. 生物和技术变异的结构和幅 ...

  7. R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图、2D密度估计、MASS包中的kde2d函数实现2D密度估计、geom_density2d函数可视化二维密度图

    R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图.2D密度估计.MASS包中的kde2d函数实现2D密度估计.geom_density2d函数可视化二维密度图 目录

  8. 在SAP PI中建立场景

    在SAP PI中建立场景 如果需要在PI中建立场景(scenario),要从主页开始. 主页界面如下: 主页有以下四个工作区的超链接: 企业服务库(ESR) 集成目录(ID) 系统规划(SL) 配置和 ...

  9. 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: SSL Provider, error: 0 - 接收到的消息异常,或格式不正确。)...

    之前做好的asp.net部署后,发现 访问数据库时: 异常:已捕获: "已成功与服务器建立连接,但是在登录过程中发生错误. (provider: SSL Provider, error: 0 ...

最新文章

  1. LeetCode MySQL 1355. 活动参与者(any函数)
  2. 计算机系统中的总线,计算机系统中的总线控制器及其方法
  3. Intent常用使用汇总
  4. linux用户管理和群界面怎么打开,Linux命令行界面下的用户和组的管理
  5. 简述中断处理的6个步骤_基于SCDM软件的CFD前处理工作5个步骤
  6. nagios 监控出现It appears as though you do not have permission
  7. 应对互联网变局,这 8 件事必须要做。
  8. Oracle查询优化改写技巧与案例总结三
  9. 流水灯c语言代码switch,51单片机流水灯代码,四种方式,开关启动
  10. 【英语学习工具】学习英语硬背硬记太难了, 在这里解说 LeHoCat 提供免费的 视频集 工具的使用方法, 看视频学英语的工具, 制作英语教学课件的工具, 帮助自学英语(详细图文)第2版
  11. 显卡刷bios改型号_A卡修改BIOS软件/刷显卡BIOS软件
  12. idea构建post请求_IDEA-HTTP工具
  13. html视频怎么改大小,对视频大小、比例进行修改
  14. java nginx报502,Nginx 502错误排查及解决办法
  15. 主梁弹性模量计算_各排立杆传至梁上荷载标准值、设计值是那一个数据
  16. Dubbo支持自适应等待无损下线
  17. java的Swing框架简介
  18. Calendar类获取当前时间上一个月,下一个月,当月的最后一天等的处理方法
  19. vim autoformat php,vim - 如何在VI中整理HTML文件的缩进?
  20. php显示标题控制长度,wordpress控制文章标题长度的问题

热门文章

  1. 怎么禁止开机启动nvidia
  2. socketmq 设置队列大小_[译] TCP的SYN队列和Accept队列
  3. PageHelper分页插件源码及原理剖析
  4. Spring 是如何解决循环依赖的?
  5. 与context的关系_Android-Context
  6. hadoop 单机单间_Hadoop单机模式配置
  7. mysql索引结构优缺点_mysql索引优缺点及注意事项
  8. hadoop ubantu环境搭建_ubuntu hadoop学习 环境搭建
  9. mysql scrapy 重复数据_MySQL大数据量表中删除重复记录
  10. 服务器内存不认硬盘_服务器品牌有哪些?如何选择服务器?