使用curl 时,出于安全原因,如何使我的cacert.pem 保持最新状态?

2024-01-15

我想保持我的根证书为最新状态,以便与 cURL 和 PHP 内部一起使用curl命令,但是当前没有参数可以下载正确的安全连接所需的当前文件并使其保持最新。

以及使用示例curl在 PHP 中用于安全连接,需要一个名为cacert.pem(用于验证远程连接的PEM编码证书链)如下:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_CAINFO, "pathto/cacert.pem");
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
if (!($data = curl_exec($ch))) {
    echo "No data received";
} else {
    echo strlen($data) + " total byte(s)";
}
curl_close($ch);

虽然大多数人只是简单地设置CURLOPT_SSL_VERIFYPEERfalse,从而忽略这个问题,这很糟糕 https://stackoverflow.com/a/4661467/3504007。你可以.

我所要求的是一种合法的方式来维护本地副本cacert.pem这样当我使用curl在PHP中与其他服务器通信,我可以继续这样做securely .

这不是对外部资源或异地链接等的请求,但是由于问题的性质,这可能是解决此问题的唯一方法,因为随着证书链被撤销,它需要持续更新。迄今为止,还没有办法获取此文件作为curl本身或php或php的curl库的发行版的一部分并继续维护它。虽然令人沮丧的是,这不是像这样简单的更新命令curl --update-root-ca那就太好了,它不以任何形式存在。


自从最初写这篇文章(以及这次重写)以来,我能够通过直接包含指向的链接来解决我自己的问题only维护此文件的合法来源,该文件由作者维护的网站上提供curl at 这个位置 http://curl.haxx.se/ca/cacert.pem

此外,随着技术的进步,这个问题已更新以展示如何使用curl在 PHP 中并强制 TLS v1.2 连接(某些交易提供商要求或推荐的东西,并且可能不提供有关如何执行此操作的信息)。

关于证书颁发机构,有一些关键的根颁发机构,例如:

  • Symantec
  • RapidSSL
  • thawte
  • GeoTrust
  • Comodo

以及其他性质上的权威机构,例如

  • 微软
  • Mozilla
  • Google

对于任何想要维护自己的 cacert.pem 的人来说,这都可以成为一个框架。请记住,您需要从相应的 crl 下载他们的吊销列表(已被破坏或过期的证书)以维护适当的信任机制,而您应该能够只下载他们的根证书链并使用这些证书作为本地权威文件,如 cacert.pem。

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

使用curl 时,出于安全原因,如何使我的cacert.pem 保持最新状态? 的相关文章

  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 如何编写在正文中包含锚标记的 Zend Framework URL?

    使用 Zend Framework 中设置的标准 MVC 我希望能够显示始终具有锚点的页面 现在我只是在 phtml 文件中添加一个带有 anchor 的无意义参数
  • 使用 DOJO 自动完成文本框

    我正在寻找一种使用 DOJO 进行文本框自动建议的简单方法 我将查询的数据库表 使用 PHP 脚本 以 JSON 形式返回 有超过 100 000 条记录 因此这确实不应该采用 FilteringSelect 或 ComboBox 的形式
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 如何在 codeigniter 查询中使用 FIND_IN_SET?

    array array classesID gt 6 this gt db gt select gt from this gt table name gt where array gt order by this gt order by q
  • mysqli bind_param 中的 NULL 是什么类型?

    我正在尝试将参数绑定到 INSERT INTO MySQLi 准备好的语句 如果该变量存在 否则插入 null 然后我知道 type variable i corresponding variable has type integer d
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • 如何在 Zend Framework 中处理移动设备?

    我接手了一个噩梦般的项目 我正在迁移一个写得很差的站点 并慢慢地将其迁移到 Zend Framework 应用程序中 不幸的是 我没有时间做补救工作 使这变得可以忍受 也许是一个或两个模型 我现在被告知该网站很快就会有移动版本 建议是克隆旧
  • 如何确定当前使用哪个网格选项

    我将 Bootstrap 3 用于使用 PHP 和 HTML 创建的网页 随着响应式网格和类的开启引导程序3您可以将多个类分配给一个 div 以根据当前屏幕尺寸定义不同的宽度 例如 div class col lg 3 col md 3 c
  • Laravel 5.4 升级 - 违反完整性约束 - 列不能为空

    奇怪的是 所有这些都在 5 2 中工作 但我不知道可以改变什么来实现这一点 下面是错误和正在插入的数组 SQLSTATE 23000 Integrity constraint violation 1048 Column gender can
  • 创建 Facebook 测试用户时访问令牌出现问题

    我正在尝试为我的 Facebook 应用程序创建测试用户 他们在 11 月份的博客文章 http developers facebook com blog post 429 中宣布了此功能 并在此处记录了该功能 http developer
  • 如何处理 AJAX 请求中的会话超时

    我相信你们都熟悉使用 AJAX 的投票系统 嗯 看那边 我有类似的东西 当你投票赞成或反对时 它使用 AJAX 从 votes php 请求新值 问题是我正在使用会话来获取用户 ID 因此一个人只能投票一次 如果他们在页面上坐了一个小时然后
  • 如何在 Smarty 中打印 json

    我从 api 获取 json 如何使用 Smarty 打印 json Json格式 first name jinu last name mk loginid email protected cdn cgi l email protectio
  • 如何在 Twitter Card 中传递动态图像路径?

    我在用
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • 使用 PHP 和 OAuth 访问 SkyDrive

    我想使用 PHP 访问 skyDrive 我想检索文件和文件夹列表 下载 上传和删除文件 我有一个 microsoft dev clientID 和 clientSecret 有人可以帮助我开始使用 OAuth 连接到 skyDrive 并
  • 如何确保在 PHP 的“foreach”循环中重置该值?

    我正在写一个简单的 PHP 页面和一些foreach使用了循环 以下是脚本 arrs array a b c foreach arrs as arr if substr arr 0 1 b echo This is b End of fir
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 如何在 Carbon Laravel 中添加日期和另一个日期?

    在我的 laravel 项目中 我想将日期时间增加到前一个日期时间 这是我的代码 expire order 0 gt expire date new Carbon now gt addMonths 6 这两行的结果是 2018 01 28

随机推荐

  • Mac OS X 10.9 - 设置永久环境变量

    如何在 Mac OS X 10 9 中设置永久环境变量 即每次启动新终端会话时不需要导出的环境变量 我找到了许多关于修改我的答案 bash profile and profile然而 这两种选择似乎都不是永久的解决方案 只是暂时的 我试图设
  • 我应该将 SQL 查询放在 Rails 中的哪里?

    我应该在 Rails 中的什么位置放置 SQL 查询的最佳实践是什么 我是否应该在模型中创建方法 例如 find all public items 其中我在所有条件下使用查找方法 然后在控制器中使用它们 就像这样 我将所有查询都放在一个地方
  • 为什么占位符伪元素上的转换属性在 Chrome 中有效?

    我正在闲逛 placeholder当我注意到一些奇怪的事情时 Codepen Chrome 59 0 3071 上的伪元素 请看我的JSFiddle https jsfiddle net 4ct6zkaw 简而言之 此 CSS 不应启用 p
  • 红外 LED 跟踪:使用 OpenCV 跟踪 x、y、z 位置

    我正在寻找一种方法来解决我遇到的计算机视觉问题 我有工作跟踪系统 4 8个摄像头 给出红外 LED 的 x y z 每个 LED 传输独特的 8 位信号 跟踪系统价格昂贵 而且界面对于我们的用户来说太难使用 我想用我自己的 OpenCV 实
  • 按钮垂直对齐引导程序

    我正在尝试以简单的形式对齐按钮 我这样做了 div class panel panel default div class panel heading teste div div class panel body div class row
  • 将应用程序提交到使用 Firebase 的 App Store

    我有一个关于在使用 Firebase 时向应用程序商店提交应用程序的快速问题 我想知道 Firebase 方面是否需要做任何事情才能使数据库可供任何人使用 或者我可以只完成提交应用程序的正常过程并假设数据库将为测试人员或下载该应用程序的任何
  • std::includes 实际上做了什么?

    From 标准 https timsong cpp github io cppwp n4659 alg set operations includes std includes 返回 true if first2 last2 为空或者范围内
  • AVL树如何在插入时平衡树

    我想为 avl 树创建一个插入函数 然而 插入函数必须是递归的并且必须是平衡的 我有一个将树向左旋转的方法 PivoterAGauche 和一个将树向右旋转的方法 PivoterADroite Pivot left Private Func
  • 与 C 预处理器“字符串化”相反

    当使用 C 预处理器时 可以像这样对宏参数进行字符串化 define TO STRING x a string with x 所以使用时 结果如下 TO STRING test 将扩展到 a string with test 有什么办法可以
  • docker 扩展字段解析器错误

    我刚看到新的extension fields https docs docker com compose compose file extension fields在 Docker Compose v3 4 中 并尝试将其与部分覆盖结合使用
  • JsonPath - 过滤数组并仅获取第一个元素

    我试图过滤此 JSON 数组的元素以仅返回它找到的第一个元素 elements urn urn li lyndaCourse 189800 details classifications associatedClassification u
  • 固定位置元素继承弹性项目的宽度

    我正在构建一个 UI 它需要在视口底部有一个固定位置 粘性元素 其宽度受主要内容区域的限制 主要内容区域的两侧可以选择具有固定宽度的 同级 左侧和 或右侧边栏 因此我使用 Flexbox 来构建三列结构flex grow 1就主要内容而言
  • 使用 ctypes 访问变量数组的内容

    我使用 ctypes 来访问读取 python 中 C 函数的文件 由于读取的数据巨大且大小未知 我使用 float in C int read file const char file int n int m float data 功能m
  • Python 应用程序不执行任何操作

    在我更改了我不再记得的内容后 这段代码根本停止执行任何操作 Dash Shell import os import datetime class LocalComputer pass def InitInformation Home Loc
  • android:约束布局是否支持RTL

    在 android Studio 的约束布局中支持 RTL 的最佳实践是什么 或者我应该创建一个单独的布局 一个用于英语 另一个用于阿拉伯语 英文版 The Expected layout with Arabic language The
  • Tomcat如何定位webapps目录?

    Tomcat如何定位webapps目录 这个位置设置在哪里 是相对目录吗 它可以在 CATALINA BASE conf server xml in the
  • 使用vba建表时如何指定主键

    我已经用下面给出的建议更新了代码 我已经测试过并且效果很好 供未来用户快速参考 我使用下面的代码创建链接表 而无需为每个用户设置 DSN 如果手动连接 我如何指定主键 Dim sConnect As String Dim db As DAO
  • 使用 asp.net 调用存储过程

    如果我在 web config 文件中定义了连接字符串 如何创建到 SQL 数据库的连接C 代码 抱歉忘记指定 然后调用存储过程 然后我想最终以某种方式使用这些数据作为 GridView 的数据源 以下是 web config 中连接字符串
  • 如何使用 Json.NET 将 IHtmlString 序列化为 JSON?

    我有一个包含通过 JSON 发布的原始 HTML 的字段 该字段最近从字符串转换为 IHtmlString 当这个变化发生时 该字段从一个 JSON 字符串变成一个空对象 并且一堆消耗 JSON 的东西开始爆炸 When it was a
  • 使用curl 时,出于安全原因,如何使我的cacert.pem 保持最新状态?

    我想保持我的根证书为最新状态 以便与 cURL 和 PHP 内部一起使用curl命令 但是当前没有参数可以下载正确的安全连接所需的当前文件并使其保持最新 以及使用示例curl在 PHP 中用于安全连接 需要一个名为cacert pem 用于