PHP CURL 和 SSL 证书(或证书链)

2023-11-29

再会!

我有 REST API,可以通过 SSL (https://) 访问。我想将正确的证书(或证书链)与我编写的 PHP 和 CURL 脚本一起发出请求。

以下是我的目标的证书方式(http://api.vkontakte.ru)在 Firefox 中看起来像:

http://speedcap.net/img/bc687485819715c65d6fe1e4ca1fdc40/1a2be.png

以下是从 Firefox 保存的“PEM 格式的证书链 X.509”的片段 (此处描述:http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/):

-----BEGIN CERTIFICATE-----
MIIFVzCCBD+gAwIBAgIHKx5Ov2FOejANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
[..skip...]
0npsf5fkvT8E13NgVY0PK6V/baMTlTgWXKQZ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
[..skip...]
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
U+4=
-----END CERTIFICATE-----

以下是 CURL 初始化的代码示例:

$this->ch = curl_init();
    curl_setopt_array($this->ch, array(

        CURLOPT_TIMEOUT => 30,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_AUTOREFERER => TRUE,
        CURLOPT_FOLLOWLOCATION => TRUE,

        CURLOPT_SSL_VERIFYPEER => TRUE,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_CAINFO => <path to my cert>,        
    )); 

我遇到了 CURL 错误 60(CURLE_SSL_CACERT)抱怨错误的证书。

我尝试过的:

  • 我已经验证我的证书文件已被使用,因为当我指定错误的路径时,它抱怨找不到证书(错误 70)

  • 我已经检查了 Facebook SDK 和他们的证书链,我的 CURL 可以使用这样的设置

  • 我尝试导出不同的链(包括或排除)链中的最后一个证书

  • Tried CURLOPT_SSL_VERIFYHOST => 1.

欢迎任何想法!


几年前,Vkontakte 从 vkontakte.ru 域移至 vk.com。他们也更改了 api 处理程序 url。 这是我的解决方案:

  1. Open https://vk.com/在火狐浏览器中
  2. 将此站点的证书链导出为 X.509
  3. 更改目标网址http://api.vkontakte.ru to https://api.vk.com/

这是我的带有curl选项的代码:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() ."/ffchainvk.crt"); //  ok

Where ffchainvk.crt是带有导出的证书链的文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP CURL 和 SSL 证书(或证书链) 的相关文章

  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 如何在原则 2 迁移中删除外键

    我想在原则 2 迁移中删除外键 但没有 dropForeignKeyConstraint 有谁知道怎么丢掉吗 public function down Schema schema table schema gt getTable table
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • PHP 在输入流中使用 fwrite 和 fread

    我正在寻找将 PHP 输入流的内容写入磁盘的最有效方法 而不使用授予 PHP 脚本的大量内存 例如 如果可以上传的最大文件大小为 1 GB 但 PHP 只有 32 MB 内存 define MAX FILE LEN 1073741824 1
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • 为什么 appcmd.exe 解锁配置在 Azure 模拟器上不起作用?

    我最近升级到 Azure 2 1 SDK 现在我的部分功能遇到了问题web config在计算模拟器上运行时处于 Web 角色中 我的web config包含这个
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • 如果循环中内存超出,我可以在 for 循环中抛出异常吗?

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何处理 foreach 循环中发生
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 当自动化 Eclipse 的“导出为功能”时,Maven/Tycho 看不到我的插件

    我的工作区中有一个插件和一个功能项目 当我通过 文件 gt 导出为 gt 功能 手动导出功能时 一切正常 我正在尝试编写一个自动插件构建和导出脚本来摆脱这种苦差事 我将功能项目转换为 Maven 项目 并用以下内容填充 pom xml
  • 如何使用多个命令运行 NSTask

    我正在尝试让 NSTask 运行如下命令 ps clx grep 查找器 awk 打印 2 这是我的方法 void processByName NSString name NSTask task1 NSTask alloc init NSP
  • Angular:添加指令时控制器未定义

    向我的网站添加指令时出现以下错误 Error ng areq Argument MainController is not a function got undefined 仅当我在网站中包含welcome directive welcom
  • PouchDB + 冲突解决

    我有一个关于难题的非常简单的问题 PouchDB 中的冲突解决如何工作 我查看了文档 并快速谷歌搜索 但没有帮助 那么 如何在使用 PouchDB 的应用程序中处理冲突管理 以下是在 CouchDB 中的操作方法 您可以直接将其转换为 Po
  • Spring Boot - 从属性文件注入映射[重复]

    这个问题在这里已经有答案了 属性文件如下所示 url1 path to binary1 url2 path to binary2 根据this我尝试了以下方法 Component EnableConfigurationProperties
  • 如何更改 WooCommerce 缩略图裁剪位置?

    我正在尝试更改 WooCommerce 缩略图裁剪位置 我发现这段代码可以帮助更改大小 add action init yourtheme woocommerce image dimensions 1 Define image sizes
  • 在 iFrame 中应用 CSS

    我正在尝试将广告图像的宽度从像素更改为百分比 我正在使用 Google DoubleClick 或 DFP 它会自动将您的广告图像放入 iframe 中 从而很难更改图像的实际尺寸 因此 我将图像宽度从像素更改为百分比的方法是 我在图像广告
  • 在 vhdl 中计算(并验证)以太网 FCS (crc32)

    我正在使用Spartan 3E 入门套件我正在尝试通过 100MBit 链路接收以太网帧 对于那些不知道的人 该板具有 PHY 芯片 暴露了 25MHz 的接收时钟 我 几乎 已经通过缓冲接收到的帧并通过串行链路重新发送它们来验证接收工作正
  • 如何从master上找到jenkins节点的ip地址

    从主节点脚本控制台或从系统 groovy 脚本 也在主节点上运行 运行 如何获取从节点的 IP 地址 我希望这个简单的脚本就足够了 import java net for slave in Jenkins instance slaves h
  • 列表追加正在覆盖我以前的值[重复]

    这个问题在这里已经有答案了 我正在尝试动态构建 ElasticSearch 的查询 这是我的代码 import json query string person human query query query query query boo
  • 如何允许用户在 ChicagoBoss 中下载文件

    我生成一个 xml 并将其存储到某个位置 比如myproject media doc xml因为我是 erlang 的新手开发人员 我所知道的是我必须设置请求标头 例如 Content Disposition attachment file
  • 如何从 Postman/WebSocket King 调用 SignalR Core hub 方法

    我有一个 SignalR Core 集线器 我可以使用 Postman 或 WebSocket King 等客户端连接到同一个集线器 但是 我无法调用需要参数的集线器方法 可以从 SignalR JS 客户端轻松调用相同的方法 我检查了浏览
  • Maven 类路径顺序问题

    有谁知道在 Maven2 中设置特定类路径顺序的方法 而不是我目前遇到的随机顺序 想要这样做有很多合理的理由 供应商提供了一个补丁 jar 其中包含先前发布的 jar 的重写类 因此该补丁 jar 必须出现在类路径排序中的第一个位置 通过遍
  • 如何将 PDF 文件中的特定 RGB 颜色更改为特定 CMYK 颜色?

    如果我有一个 PDF 文件 其中包含特定 RGB 颜色的对象 文本 艺术线条 并且我想将这些对象转换为具有特定的 CMYK 颜色 有哪些可用的库可以让我做到这一点 请注意 我不需要从任意 RGB 值 映射 到 合适的 CMYK 值的能力 这
  • Scanf_s 警告?跳过用户输入(主题:Runge-Kutta、流行病模拟)

    这是我的第一篇文章 我不得不承认 我在编程方面很糟糕 我是班上那个拼命工作的人 但似乎永远无法像我的其他同学那样掌握编程 所以请保持友善 我将在下面尝试解释我的问题 我有以下代码 已删除注释 但是当我运行它时 我收到类似于下面列出的警告 另
  • 61 秒不活动后,Indy 错误 10038“非套接字上的套接字操作”

    我想从 FTP 服务器下载一些大文件 GB 第一个文件的下载始终有效 然后 当尝试获取第二个文件时 我得到 套接字错误 10038 非套接字上的套接字操作 错误出现在 获取 上 在 获取 之后 我看到这些消息 通过 FTP 状态事件 Sta
  • 是否有一个内置函数可以打印对象的所有当前属性和值?

    所以我在这里寻找的是类似 PHP 的东西print r功能 这样我就可以通过查看相关对象的状态来调试我的脚本 你要vars 夹杂pprint from pprint import pprint pprint vars your object
  • WiX可配置目录的含义是什么?

    我有一个测试安装程序 有 2 个功能 A 和 B A 有 2 个文件 a1 和 a2 B 还有 2 个文件 b1 和 b2 每个文件属于单个组件 Feature A a1 a2 Feature B b1 b2 每个文件的安装位置如下 有些混
  • 从 SqlDataReader 转换为 JSON

    public string toJSON SqlDataReader o StringBuilder s new StringBuilder s Append if o HasRows while o Read s Append Id o
  • PHP CURL 和 SSL 证书(或证书链)

    再会 我有 REST API 可以通过 SSL https 访问 我想将正确的证书 或证书链 与我编写的 PHP 和 CURL 脚本一起发出请求 以下是我的目标的证书方式 http api vkontakte ru 在 Firefox 中看