登录 立即注册

首页 > 绿虎论坛 > 软件开发 > 编程语言 > PHP (发帖)

标题: 有没有对接申请SSL证书的php源码

作者: @Ta

时间: 07-23 19:37

点击: 8230

要求直接对接Let's Encrypt接口,实现完整的申请证书流程,而不是通过命令行执行acme来申请证书。最好有后台管理,有没有类似的php源码?

[隐藏样式|查看源码]


『回复列表(6|隐藏机器人聊天)』

1.

同求
小米MIX2s(白)

(/@Ta/2024-07-23 21:31//)

2.
层主 @天天 于 2024-08-11 16:26 删除了该楼层。
(/@Ta/2024-07-24 20:43//
被锁定
)

3. 同求
(/@Ta/2024-07-24 21:01//)

4. 你可以使用ACME协议(Let’s Encrypt使用的协议)的PHP客户端,例如acmephp。以下是一个基本的示例脚本,用于申请Let’s Encrypt证书:
<?php
require 'vendor/autoload.php';

use AcmePhp\Ssl\Generator\KeyPairGenerator;
use AcmePhp\Ssl\Parser\KeyParser;
use AcmePhp\Ssl\Signer\DataSigner;
use AcmePhp\Core\Http\Base64SafeEncoder;
use AcmePhp\Core\Http\SecureHttpClient;
use AcmePhp\Core\AcmeClient;
use AcmePhp\Core\Challenge\Http\HttpDataExtractor;
use AcmePhp\Core\Challenge\Http\HttpChallengeHandler;
use AcmePhp\Core\Challenge\Http\HttpChallengeVerifier;

// 生成密钥对
$keyPairGenerator = new KeyPairGenerator();
$keyPair = $keyPairGenerator->generateKeyPair();

// 创建安全的HTTP客户端
$secureHttpClient = new SecureHttpClient(
    $keyPair,
    new KeyParser(),
    new DataSigner(),
    new Base64SafeEncoder()
);

// 创建ACME客户端
$acmeClient = new AcmeClient($secureHttpClient);

// 注册账户
$acmeClient->registerAccount('your-email@example.com');

// 请求证书
$domains = ['your-domain.com', 'www.your-domain.com'];
$order = $acmeClient->requestOrder($domains);

// 处理HTTP挑战
$httpChallengeHandler = new HttpChallengeHandler();
$httpDataExtractor = new HttpDataExtractor();

foreach ($order->getAuthorizationsChallenges() as $authorizationChallenges) {
    $domain = $authorizationChallenges->getLocation()->getDomain();

    $challenge = $authorizationChallenges->getHttpChallenge();

    $httpChallengeHandler->handle($challenge, $httpDataExtractor->getCheckPath($challenge));

    $acmeClient->challenge($challenge);

    $httpChallengeHandler->cleanUp($domain, $httpDataExtractor->getFilePath($challenge));
}

// 生成域名密钥对
$domainKeyPair = $keyPairGenerator->generateKeyPair();

// 请求证书签名
$certificate = $acmeClient->requestCertificate($order, $domainKeyPair);

// 保存证书和私钥
file_put_contents('/etc/letsencrypt/live/your-domain.com/cert.pem', $certificate->getPEM());
file_put_contents('/etc/letsencrypt/live/your-domain.com/private.pem', $domainKeyPair->getPrivateKey()->getPEM());
>

这个脚本首先生成一个密钥对,然后使用这个密钥对注册一个新的ACME账户。然后,它请求一个新的证书订单,处理HTTP挑战,最后请求证书签名。

请注意,这只是一个基本的示例,你可能需要根据你的具体需求进行修改。例如,你可能需要处理DNS挑战而不是HTTP挑战,或者你可能需要在不同的位置存储证书和私钥。

此外,你需要使用composer安装acmephp:

composer require acmephp/core

在运行此脚本之前,请确保你已经正确配置了你的web服务器,以便Let’s Encrypt的服务器可以访问到用于HTTP挑战的文件。你还需要确保你有权限写入证书和私钥的目录。

最后,这个脚本没有处理证书的续期。你可能需要设置一个cron job或其他类型的定时任务,定期运行类似的脚本来续期你的证书。

希望这个信息对你有所帮助!如果你有任何问题或需要进一步的帮助,随时向我提问。😊
(/@Ta/2024-07-25 08:17//)

5. acme也是通过api对接的,php-sdk-letsencrpty github一堆
(/@Ta/2024-07-26 12:08//)

6.

我的方案是php调用(shell命令)docker版的acme.sh生成证书后再移动证书文件到指定位置(远程shell 写入)或读取证书内容通过api部署到阿里云。好处是更少的代码,但需要有docker环境

(/@Ta/2024-08-02 05:55//)

回复需要登录

12月12日 17:57 星期四

本站由hu60wap6华为CPU驱动

备案号: 京ICP备18041936号-1