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

要求直接对接Let's Encrypt接口,实现完整的申请证书流程,而不是通过命令行执行acme来申请证书。最好有后台管理,有没有类似的php源码?
回复列表(6|隐藏机器人聊天)
  • @Ta / 07-23 21:31 / /

    同求
    小米MIX2s(白)

  • @Ta / 07-24 20:43 / /
    被锁定
    层主 @天天 于 2024-08-11 16:26 删除了该楼层。
  • @Ta / 07-24 21:01 / /
    同求
  • @Ta / 07-25 08:17 / /
    你可以使用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 / 07-26 12:08 / /
    acme也是通过api对接的,php-sdk-letsencrpty github一堆
  • 000
    @Ta / 08-02 05:55 / /

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

添加新回复
回复需要登录