发帖

关于彩虹聚合DNS系统接入毅融盾的教程

前言

关于毅融盾

毅融盾是我们近期发布的全新平台,深度融合网宿与白山 CDN 资源,提供多源智能调度、全网极速分发与立体安全防护,助力业务实现高可用、低延迟的边缘加速。

痛点与解决方案

随着 SSL 证书有效期不断缩短(从传统的 1-2 年逐步过渡至 90 天),频繁手动更换证书已成为运维工作中的痛点。手动操作不仅耗时费力,还容易因疏忽导致证书过期,进而影响业务可用性。

为解决这一难题,我们自主研发了毅融盾 CDN 的 SSL 证书自动部署模块,并成功将其集成至聚合 DNS 系统中。然而遗憾的是,该功能暂未被聚合 DNS 官方项目采纳。

为让更多有需要的用户受益,我们决定将实现方案整理成教程分享出来,供大家参考。教程中涉及的所有修改文件均已附于文末附件中。


一、准备工作:上传 Logo 图标

在配置部署驱动之前,需要先上传 Logo 图标,否则部署选项将无法显示图标。

操作步骤

1. 下载 Logo 文件:https://hydun.com/assets/img/logo.png
2. 将下载的文件保存至:/public/static/images/yrd.png

📝 说明:Logo 文件名必须为 yrd.png,否则无法正确显示。


二、创建部署模块文件

/app/lib/deploy/ 目录下新建 yrdcdn.php 文件:

<?php

namespace app\lib\deploy;

use app\lib\DeployInterface;
use Exception;

/**
 * 毅融盾 CDN SSL 证书部署驱动
 * 
 * 该模块支持将 SSL 证书自动部署到毅融盾 CDN 平台,
 * 实现多源智能调度环境下的证书自动化管理。
 */
class yrdcdn implements DeployInterface
{
    private $logger;
    private $username;
    private $password;
    private $proxy;
    private $token = null;

    /**
     * 构造函数
     * @param array $config 配置参数,包含账号、密码及代理设置
     */
    public function __construct($config)
    {
        $this->username = $config['username'];
        $this->password = $config['password'];
        $this->proxy = $config['proxy'] == 1;
    }

    /**
     * 验证账号配置信息
     * @throws Exception 账号或密码为空时抛出异常
     */
    public function check()
    {
        if (empty($this->username) || empty($this->password)) {
            throw new Exception('请填写控制台账号和密码');
        }
        $this->request('/login/loginUser', [
            'userAccount' => $this->username,
            'userPwd' => $this->password,
            'remember' => 'true'
        ]);
    }

    /**
     * 执行证书部署
     * 
     * @param string $fullchain 完整证书链(PEM 格式)
     * @param string $privatekey 私钥内容
     * @param array $config 部署配置,包含域名ID等信息
     * @param mixed $info 输出信息引用
     * @throws Exception 域名ID为空或部署失败时抛出异常
     */
    public function deploy($fullchain, $privatekey, $config, &$info)
    {
        $id = $config['id'];
        if (empty($id)) {
            throw new Exception('域名ID不能为空');
        }

        // 1. 登录获取认证 Token
        $this->token = $this->request('/login/loginUser', [
            'userAccount' => $this->username,
            'userPwd' => $this->password,
            'remember' => 'true'
        ]);

        // 2. 提交 HTTPS 证书配置
        $this->request('/CdnDomainHttps/httpsConfiguration', [
            'doMainId' => $id,
            'https' => [
                'certificate_name' => uniqid('cert_'),
                'certificate_source' => '0',
                'certificate_value' => $fullchain,
                'https_status' => 'on',
                'private_key' => $privatekey,
            ]
        ], true);

        $this->log("域名ID:{$id} 更新成功!");
    }

    /**
     * 设置日志回调函数
     * @param callable $func 日志处理函数
     */
    public function setLogger($func)
    {
        $this->logger = $func;
    }

    /**
     * 记录日志信息
     * @param string $txt 日志内容
     */
    private function log($txt)
    {
        if ($this->logger) {
            call_user_func($this->logger, $txt);
        }
    }

    /**
     * 发送 HTTP 请求
     * 
     * @param string $path 请求路径
     * @param array|null $params 请求参数
     * @param bool $json 是否使用 JSON 格式发送
     * @return mixed API 响应数据
     * @throws Exception 请求失败时抛出异常
     */
    private function request($path, $params = null, $json = false)
    {
        $url = 'https://rcdn.hydun.com' . $path;
        $body = $json ? json_encode($params) : $params;
        $headers = [];

        if ($json) {
            $headers['Content-Type'] = 'application/json';
        }

        $response = http_request(
            $url,
            $body,
            null,
            $this->token ? "kuocai_cdn_token={$this->token}" : null,
            $headers,
            $this->proxy
        );

        $result = json_decode($response['body'], true);

        if (isset($result['code']) && $result['code'] == 'SUCCESS') {
            return isset($result['data']) ? $result['data'] : null;
        } elseif (isset($result['message'])) {
            throw new Exception($result['message']);
        } else {
            throw new Exception('请求失败(httpCode=' . $response['code'] . ')');
        }
    }
}

三、配置部署驱动

app/lib/DeployHelper.php 文件中的 $deploy_config 数组内,添加毅融盾的配置项:

'yrdcdn' => [
    'name' => '毅融盾',
    'class' => 2,
    'icon' => 'yrd.png',
    'desc' => '替换证书管理内的证书',
    'note' => '支持毅融盾及其代理商,填写控制台登录账号及密码',

    // 账号配置输入项
    'inputs' => [
        'username' => [
            'name' => '账号',
            'type' => 'input',
            'placeholder' => '控制台账号',
            'note' => '填写手机号或邮箱',
            'required' => true,
        ],
        'password' => [
            'name' => '密码',
            'type' => 'input',
            'placeholder' => '控制台密码',
            'required' => true,
        ],
        'proxy' => [
            'name' => '使用代理服务器',
            'type' => 'radio',
            'options' => [
                '0' => '否',
                '1' => '是',
            ],
            'value' => '0'
        ],
    ],

    // 任务配置输入项
    'taskinputs' => [
        'id' => [
            'name' => '域名ID',
            'type' => 'input',
            'placeholder' => '',
            'note' => '在控制台 -> 我的域名 -> 配置,复制浏览器地址栏显示的域名ID(19位数字),注意域名是否与证书匹配',
            'required' => true,
        ],
    ],
],

四、使用说明

4.1 获取域名 ID

  1. 登录毅融盾 CDN 控制台
  2. 进入「我的域名」页面
  3. 点击目标域名的「配置」按钮
  4. 从浏览器地址栏复制域名 ID(格式:https://rcdn.hydun.com/xxx/domain/config/{ID}/...,其中 {ID} 即为所需数字)

4.2 配置步骤

步骤操作说明
1在聚合 DNS 系统中添加「毅融盾」账号
2填写控制台登录账号和密码
3创建证书部署任务,填入域名 ID
4绑定需要自动部署的 SSL 证书
5设置自动续期触发规则

五、注意事项

⚠️ 重要提示

  • ✅ 确保 Logo 文件已正确上传至 /public/static/images/yrd.png
  • ✅ 确保填写的域名 ID 与证书域名完全匹配
  • ✅ 首次部署时,建议手动验证证书是否正确生效
  • ✅ 如启用代理服务器,需确保代理配置正确
  • ✅ 建议定期检查日志,确保自动部署流程正常运行

六、文件结构汇总

项目根目录/
├── app/lib/deploy/
│   └── yrdcdn.php          # 毅融盾部署驱动
├── public/static/images/
│   └── yrd.png             # 毅融盾 Logo 图标
└── app/lib/
    └── DeployHelper.php    # 添加毅融盾配置项

七、结语

通过以上配置,即可在聚合 DNS 系统中实现毅融盾 CDN 的 SSL 证书自动部署。该方案深度融合了网宿与白山 CDN 资源,结合多源智能调度能力,可有效提升证书管理效率,降低因证书过期导致的服务中断风险。

如在部署过程中遇到问题,欢迎通过工单系统反馈。

上一篇 关于火毅盾 IPv6 节点全面恢复服务的公告 下一篇 关于毅融盾支持Certd自动部署的公告
评论区
游客
游客

还没有人评论,快来抢沙发吧~

在线客服
工作日在线,欢迎咨询购买、授权、部署与售后问题。
在线时间周一至周五 09:00 - 18:00
如遇支付、授权、安装、定制等问题,可优先联系在线客服,我们会尽快协助处理。