文章详情

返回首页

在cloudflare上部署IP6.ARPA域名自动添加SSL证书

分享文章 作者: Ws01 创建时间: 2025-11-24 📝 字数: 24,272 字 👁️ 阅读: 13 次

export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);

// 处理 API 请求:支持 POST (/api/add-ssl) 和 GET (/?...)
if (
(url.pathname === '/api/add-ssl' && request.method === 'POST') ||
(url.pathname === '/' && request.method === 'GET' && url.searchParams.has('zoneId'))
) {
return handleApiRequest(request, url.searchParams);
}

// 返回 HTML 页面 (仅当是根路径的 GET 请求且没有API参数时)
return new Response(getHTML(), {
headers: {
'Content-Type': 'text/html; charset=utf-8',
},
});
},
};

// 统一处理 API 请求(支持 POST Body 和 GET Query Params)
async function handleApiRequest(request, queryParams) {
let email, zoneid, apikey, enabled, certificate_authority;

try {
if (request.method === 'POST') {
// POST 请求:从请求体中解析 JSON
const body = await request.json();
email = body.email;
zone_id = body.zoneId;
api_key = body.apikey;
enabled = body.enabled !== undefined ? body.enabled : true;
certificateauthority = body.ca || "sslcom";
} else if (request.method === 'GET') {
// GET 请求:从 URL 查询参数中获取
email = queryParams.get('email');
zone_id = queryParams.get('zoneId');
api_key = queryParams.get('apikey');
enabled = !(queryParams.get('enabled') === 'false');
certificateauthority = queryParams.get('ca') || "sslcom";
}

// 验证必需的输入
if (!email || !zoneid || !apikey) {
return new Response(JSON.stringify({
success: false,
errors: ['邮箱、区域ID和API密钥都是必需的']
}), {
status: 400,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
}
});
}

// 验证并设置 CA 默认值
const validCAs = ["sslcom", "letsencrypt", "google", "sectigo"];
const caToUse = validCAs.includes(certificateauthority) ? certificateauthority : "ssl_com";

// 调用 Cloudflare API
const response = await fetch(https://api.cloudflare.com/client/v4/zones/${zone_id}/ssl/universal/settings, {
method: 'PATCH',
headers: {
'X-Auth-Email': email,
'X-Auth-Key': api_key,
'Content-Type': 'application/json',
},
body: JSON.stringify({
enabled: enabled,
certificate_authority: caToUse
}),
});

const result = await response.json();

// 为 API 调用返回 JSON 响应
return new Response(JSON.stringify(result), {
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST',
'Access-Control-Allow-Headers': 'Content-Type',
},
});

} catch (error) {
return new Response(JSON.stringify({
success: false,
errors: [{ message: 请求失败: ${error.message || '未知错误'} }]
}), {
status: 500,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
}
});
}
}

// getHTML 函数保持不变,因为前端表单仍然使用 POST 请求
function getHTML() {
return `

IP6.ARPA域名自动添加SSL证书

IP6.ARPA域名自动添加SSL证书

请输入有效的邮箱地址
请输入区域ID
请输入API密钥

IP6.ARPA 域名生成工具

请输入有效的 IPv6 CIDR

API GET 调用示例

证书颁发机构 (ca) 支持:sslcomletsencryptgooglesectigo注意:ip6.arpa 域名通常仅支持 ssl_com

https://worker地址/?zoneId=...&email=...&apikey=...&enabled=true&ca=ssl_com
`;

}