evandotpro/sslurp

此包的最新版本(dev-master)没有可用的许可证信息。

Sslurp 是一个简单的库,旨在使在 PHP 中正确处理 SSL 变得不那么痛苦。

dev-master 2015-02-05 16:13 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:38:41 UTC


README

v1.0 by Evan Coury

Build Status

简介

在 PHP 中正确处理 SSL 是一件痛苦的事情,并且默认情况下完全不安全。Sslurp 致力于使在 PHP 中安全地使用 SSL 变得更加容易。Sslurp 可以用作独立的库、CLI 工具或 ZF2 模块。

注意: Sslurp 需要 PHP 配置了 OpenSSL 支持。这在大多数 Linux 发行版的 PHP 包中是标准的,否则您需要使用 --with-openssl[=DIR] 编译 PHP。

特性 / 使用方法

根 CA 套件管理

Sslurp 提供了 CLI 和 OOP 接口,用于使用来自 Mozilla 的 certdata.txt 生成可信的根证书颁发机构(CA)套件,并保持其更新。生成的根 CA 套件包括根据 Mozilla 根证书计划 审查的证书——与 cURL、Firefox、Chrome 和许多其他应用程序、库、语言和操作系统所信任的相同的根 CA 套件。

Sslurp 在从 Mozilla 的源树获取 certdata.txt 时采取了额外的步骤来防止中间人攻击,确保生成的套件是真实的。当连接到 Mozilla 的 mxr.mozilla.org 域以获取更新的 certdata.txt 时,Sslurp 强制使用已验证的 SSL。Sslurp 使用以下过程来建立 mxr.mozilla.org 上的 SSL 证书的初始信任:

  • 检查 SSL_CERT_FILE 环境变量(由 OpenSSL 使用)。如果其值是可读文件的路径并且是有效的证书套件,Sslurp 将使用它。
  • 如果 SSL_CERT_FILE 未设置或指向不存在/无效的证书套件,Sslurp 将搜索几个已知/预期的位置以查找根 CA 套件,并使用找到的第一个有效套件。
  • 如果在任何预期路径中找不到有效的套件,Sslurp 最后将回退到使用捆绑的、预先验证的根 CA 公钥副本,该公钥为 mxr.mozilla.org 证书建立了信任(Equifax Secure Certificate Authority 至少直到 2013 年 11 月)。

除此之外,Sslurp 还使用 公钥固定 进一步验证与 Mozilla 的 mxr.mozilla.org 域通信的真实性。如果 mxr.mozilla.org 的公钥固定在当前证书过期之前发生变化,Sslurp 将开始抛出异常,并拒绝更新根 CA 套件。如果公钥固定在当前证书到期前一个月或之后(2013 年 11 月)发生变化,Sslurp 将开始抛出 PHP 通知,鼓励您更新 Sslurp 的副本以获取最新的固定。

强烈建议您始终使用 Sslurp 的最新版本。

CLI 根 CA 套件更新器

./bin/update-ca-bundle 是一个方便的命令行工具,用于抓取、构建并随后更新 PEM 格式的根 CA 包,以便与 PHP 的 OpenSSL 支持、curl、libcurl、php_curl 等一起使用。生成的输出与 mk-ca-bundle.pl 完全兼容,后者用于 生成 cURL 的可信包

Sslurp Root CA Bundle Updater

Usage:
 bin/update-ca-bundle [--stdout]
 bin/update-ca-bundle -o[output_file]

Options
 -o      	Path/filename to the file to (over)write the updated root CA bundle. Defaults to ca-bundle.pem
 --stdout	Do not write file, send output to stdout instead.

将 Sslurp 作为库使用

除了 CLI 工具之外,Sslurp 还可以通过 OOP 接口作为库使用。源代码 API 文档。

<?php
require_once 'vendor/Sslurp/autoload_register.php';

$bundle = new \Sslurp\CaRootPemBundle('ca-bundle.pem');

if ($bundle->isLatest()) {
    echo 'Your CA root bundle is up to date!' . PHP_EOL;
} else {
    echo 'WARNING! Your CA root bundle is out of date!' . PHP_EOL
       . 'Local CA root bundle is version ' . $bundle->getVersion() . '. '
       . 'Latest version available from Mozilla is ' . $bundle->getMozillaCertData()->getVersion() . '.' . PHP_EOL;

    echo 'Updating...';
    $bundle->update();
    echo "\tDone!" . PHP_EOL;
}

安装

Composer / Packagist

./composer.phar require evandotpro/sslurp

正常

./bin/update-ca-bundle CLI 工具将“直接”使用。

Sslurp 可以 轻松 集成到任何现有的项目、框架或库中。

要在项目中使用 Sslurp 作为库,最简单的方法是简单地包含 autoload_register.php 文件

require_once 'vendor/Sslurp/autoload_register.php';

或者,如果您的项目支持加载 classmap 数组,您可以获取 classmap 而无需注册额外的 SPL 自动加载器

$classmap = include 'vendor/Sslurp/autoload_classmap.php';
// Register $classmap with your project's existing classmap autoloader

如果您有一个现有的 SPL 自动加载器,该加载器允许将可调用的函数添加到堆栈中而不是直接注册类图数组,您可以选择简单地获取一个闭包,该闭包可以自动加载 Sslurp 类

$sslurpLoader = include 'vendor/Sslurp/autoload_function.php';
// $sslurpLoader is a closure that can be registered with an existing autoloader

待办事项

  • 偏执级别 1000 - 测试调用 OpenSSL 可执行文件的能力,并在可能的情况下,使用 OCSP 进一步验证 mxr.mozilla.org 域的有效性。

许可证

Sslurp 在 BSD 许可证下发布。请参阅包含的 LICENSE 文件。

生成的根 CA 包文件只是原始文件的转换版本,因此它遵循与 Mozilla 源相同的许可证:MPL v2.0、GPL v2.0 或 LGPL 2.1。有关详细信息,请参阅 nss/COPYING