mirror of
https://github.com/certimate-go/certimate.git
synced 2026-04-26 05:05:56 +03:00
[GH-ISSUE #617] [Bug] 部署到网宿 CDN Pro 时私钥加密错误 #409
Labels
No labels
announcement
backlog
bug
declined
documentation
duplicate
enhancement
good first issue
good first issue
help wanted
invalid
pull-request
question
stale
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/certimate#409
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Anbool on GitHub (Apr 15, 2025).
Original GitHub issue: https://github.com/certimate-go/certimate/issues/617
软件版本 / Release Version
v0.3.8
缺陷描述 / Description
我错了大哥,上次忘记回复你了。网宿给的 Shell 脚本示例我已经测试成功了:
其中的 时间戳 就是取值当前时间
复现步骤 / Steps to reproduce
日志 / Logs
其他 / Miscellaneous
No response
@fudiwei commented on GitHub (Apr 15, 2025):
接口示例脚本里给的是 username+ApiKey,但是 SDK 示例给的是 AccessKey+SecretKey,这是俩完全不同的签名方案。所以我才问你这玩意儿到底该咋加密的。
@Anbool commented on GitHub (Apr 15, 2025):
SDK 里我看给出了加密方式,这个是时间戳我确认了确实是当前时间,大哥别的还有啥问题不,有的话我问他们技术去。
@fudiwei commented on GitHub (Apr 15, 2025):
你贴的那段脚本,是基于第一种 API 鉴权方式。但是它提供的 SDK,是基于第二种鉴权方式,根本就没有 username 和 ApiKey。
所以你得问问,用 AKSK 这种鉴权方式的话,加密这里这些参数该怎么调整?
我现在是拿 SecretKey 当 APIKey 去生成那个 AES Key 和 iv(你开头贴的那段脚本第 7-10 行,就把传入的 apikey 改成 secretkey),但这么看不对。
@Anbool commented on GitHub (Apr 15, 2025):
你看是这个不大哥。
@fudiwei commented on GitHub (Apr 15, 2025):
我再详细说一遍吧,要是还没明白我也没办法了。
网宿云提供了两种 API 鉴权方案,第一种是 username+ApiKey 生成签名,第二种是 AccessKey+SecretKey 生成签名。
它接口文档里给的 curl 示例,是基于第一种实现的。AES 加密所用到的密钥,是用 ApiKey+当前时间生成出来的。
但它的 SDK,是基于第二种实现的。现在的问题就是,此时 AES 加密用到的秘钥该怎么生成?
API 鉴权是 API 鉴权,是所有接口都需要做的一步。AES 加密是 AES 加密,只有创建证书 privateKey 这一个字段需要加密。只是它 AES 加密所需的参数来自于 API 鉴权,可给的示例只有第一种没有第二种的。
@Anbool commented on GitHub (Apr 15, 2025):
确认是不能用 AK/SK 加密证书私钥。证书接口比较特殊,私钥加密只能用 ApiKey。仍可以用 AK/SK 做接口鉴权,但是私钥加密必须用 ApiKey。
这就意味着,必须单独的提供一个使用 Username+ApiKey 加密 privateKey 字段的方式🤣
ApiKey 在 https://console.wangsu.com/account/apiManage 进行创建。
@fudiwei commented on GitHub (Apr 17, 2025):
@Anbool 麻烦帮忙验证一下 #627 的 commit
50b48d956f如果你没有 Node 环境的话直接跑 go 单测用例也行,位于 /internal/pkg/core/deployer/providers/wangsu-cdnpro 目录下。
@Anbool commented on GitHub (Apr 17, 2025):
@fudiwei 大哥,我看了一下代码,是不是少一个 username
@fudiwei commented on GitHub (Apr 17, 2025):
Username 是用来生成请求签名的,现在签名是基于 AK/SK 生成的,也没法同时用两种签名呀。生成 AES 秘钥只需要 ApiKey 和时间戳。
@Anbool commented on GitHub (Apr 17, 2025):
@fudiwei 看上去失败了,好像没有打印具体的接口错误信息
@Anbool commented on GitHub (Apr 17, 2025):
@fudiwei 抱歉,我又仔细的查看了一下控制台,证书的确已经可以上传了,把证书名称从我之前的域名命名改成了certimate_***,目前看已经成功更新了证书,因为我在 shell 看到的是报错,所以执行了四次,目前这个证书从原来的三个版本变成了七个版本,目前第七个版本还尚未部署,这样看来更新证书接口是没有问题的。但不知道为什么单例测试抛出了错误。
@fudiwei commented on GitHub (Apr 17, 2025):
internal/pkg/vendors/wangsu-sdk/openapi/client.go 第 161 行:
重新跑一下单测,会在控制台打印 HTTP 报文。看一下更新证书那个接口的响应是什么?
@Anbool commented on GitHub (Apr 18, 2025):
@fudiwei 接口没有返回响应体,只有响应头。
请求:
响应体:
请求:
响应头:
@Anbool commented on GitHub (Apr 18, 2025):
应该是判断响应状态码是否为 201,然后取 Location 响应头中的 versions 执行部署就行了。
@fudiwei commented on GitHub (Apr 18, 2025):
再验证一下 commit 437fea2c1c1fbedf7ce1dcc66bad9db2f329f887
@Anbool commented on GitHub (Apr 18, 2025):
好像同样的错误。
@fudiwei commented on GitHub (Apr 18, 2025):
再验证一下 commit c21258f192f1ce01c96d60b2cc67d557fa29172a
@Anbool commented on GitHub (Apr 18, 2025):
测试流程通过了,但是程序会一直处于 INFO waiting for deployment task completion ... 状态,但已经部署完成了。
响应体:
@fudiwei commented on GitHub (Apr 18, 2025):
再验证一下 commit
c10ceed753,然后看一下日志打印的 current status 是什么?@fudiwei commented on GitHub (Apr 19, 2025):
@Anbool Any updates?
@Anbool commented on GitHub (Apr 19, 2025):
抱歉延迟的更新。看到日志打印了为空。在 2025/04/19 04:16:58 之前就已经部署完成了。
@fudiwei commented on GitHub (Apr 19, 2025):
为啥 status 是空呢…… 😕
@Anbool 日志里
sdk request 'cdn.GetDeploymentTaskDetail'这条展开看一下 response 是啥?如果你是跑的单测的话这个日志级别是 DEBUG 不会显示在控制台上,你可以修改 internal/pkg/core/deployer/providers/wangsu-cdnpro/wangsu_cdnpro.go 第 204 行,将
d.logger.Debug(...)改为d.logger.Info(...)@Anbool commented on GitHub (Apr 19, 2025):
就返回了以下内容
@fudiwei commented on GitHub (Apr 20, 2025):
😵💫 为啥都是空……
@Anbool 这个不是 Response Body 吗?
@Anbool commented on GitHub (Apr 20, 2025):
@fudiwei 大哥,你可以给我一个邮箱不,我把 Key 都发给你,你调试看看可能比较快?
@Anbool commented on GitHub (Apr 20, 2025):
已发送,请查收。测试域名直接操作,不需要我二次确认。此外所需的 API 访问权限都已经开通了。另外最好是在控制台引导用户在使用之前先检查 API 权限是否已经开通,避免后期造成不必要的 issues,大部分 API 权限可以在 https://apiexplorer.wangsu.com/apiexplorer/overview 门户直接开通和查看。辛苦了!
@fudiwei commented on GitHub (Apr 21, 2025):
@Anbool 感谢提供测试环境,问题已修复。记得重置 AK/SK,以免数据泄露。
@Anbool commented on GitHub (Apr 21, 2025):
感谢您的工作,相关数据已处理。期待新版本发布。