php - cURL 的 CA 公共(public)证书包

标签 php security curl ssl

我有一个启用 SSL 的电子商务网站,该网站使用 cURL 进行支付处理。一切都运行良好,但最近我了解到“CA Public Certification Bundle for cUrl”,将其用于 cURL 连接是个好主意。

如果这是真的,那么有人可以告诉我如何或与使用标准 SSL 相比有什么更好/不同的地方吗?

SSL 不是已经为所有连接提供了某种认证吗?

最佳答案

任何连接到 HTTPS 服务器的 HTTPS 客户端都会得到它的证书(事实上,它可以是一个证书链)。此服务器证书随后必须由客户端验证以验证服务器。

这通常是通过使用许多在客户端上配置为信任 anchor 的 CA 证书来完成的(即,这是您在遇到服务器证书之前提前信任的)。客户端尝试在服务器链的最后一个元素与其信任 anchor 中的一个 CA 证书之间建立一条链。如果存在这样的有效链,则服务器证书是可信的。

“CA 证书包”将是一组信任 anchor 。您可以通过寻找您愿意信任的 CA 来构建您自己的 CA,或者您可以使用现有的 bundle 。大多数操作系统或浏览器都带有一个现有的 bundle 。 cURL 本身没有,但它可以依赖于预定义的位置(在编译时设置)或者它还建议使用 Firefox bundle (通过转换机制)。 (您可以通过额外选项、命令行或 API 覆盖默认设置。)

Certificate Pinning (您也提到过)与 CA 证书 bundle 无关。事实上,情况几乎恰恰相反。您无需依赖第 3 方信任 anchor (证书颁发机构),而是明确地“固定”一组您知道为直接信任的服务器证书。它们不用于验证其他证书,而是将您获得的证书与您期望该主机的确切证书进行比较(或者至少比较公钥)。这更像是从服务器名称到证书(或公钥)的引用映射,并将您从该主机获得的内容与您拥有的引用进行比较。当然,这在实践中只能用于相当小的一组证书,这与 CA (PKI) 方法不同,CA (PKI) 方法旨在让您验证以前从未遇到过的各方(通过第 3 方:CA)。

How is it better/different than using the standard SSL? Doesn't the SSL already provide some kind of certification for all connections?

使用 CA 证书包与使用“标准 SSL”没有什么不同,它通常用于 SSL/TLS 连接。您通常看不到它,因为 CA 包通常随您的客户端(或操作系统)一起提供。 请注意,严格来说,这与 SSL/TLS itself 正交,主要是说你应该对服务器进行身份验证。证书验证(PKI 方式,通过 CA 证书)在 different specification 中定义, 还补充了 a specification on how to verify the name in the certificate (当然还有 HTTPS specification)。

关于php - cURL 的 CA 公共(public)证书包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578196/

相关文章:

php - 如何在 laravel 和 mysql 上获取一年中每个月分隔的总值?

security - 如何在 Java EE 7 中保护 Websocket 服务器

php - SSL 例程 :tls_process_server_certificate:certificate verify failed

php - 如何在 cURL POST 请求中使用数组

php - document.writing 用 Ja​​vascript - smarty

php - 无法为 symfony 安装 php-xml

php - Ubuntu 亚马逊网络服务 LAMP 堆栈设置

web-services - 如何向 grails cxf Web 服务添加安全性(用户名、密码)

PHP 安全登录 - 客户端选项?

node.js - 带有 header 和身份验证的 npm 请求