{"id":20766579,"url":"https://github.com/mmqnym/quickcerts","last_synced_at":"2025-12-30T19:04:22.806Z","repository":{"id":204635537,"uuid":"707097550","full_name":"mmqnym/quickcerts","owner":"mmqnym","description":"A simple certificate server that can be used to issue certificates for your product to verify that it has been activated.","archived":false,"fork":false,"pushed_at":"2024-02-22T16:14:18.000Z","size":272,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T12:08:24.510Z","etag":null,"topics":["certificate","gin","golang","http-server","https-server","postgresql","python","qcs","redis","typescript"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mmqnym.png","metadata":{"files":{"readme":"README-zhHans.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-10-19T08:09:53.000Z","updated_at":"2023-12-24T06:11:51.000Z","dependencies_parsed_at":"2023-12-12T11:24:09.289Z","dependency_job_id":"30c7daa3-ecf9-4673-a90f-c9c439cc6512","html_url":"https://github.com/mmqnym/quickcerts","commit_stats":null,"previous_names":["mmq88/quickcerts","mmqnym/quickcerts"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/mmqnym/quickcerts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmqnym%2Fquickcerts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmqnym%2Fquickcerts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmqnym%2Fquickcerts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmqnym%2Fquickcerts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mmqnym","download_url":"https://codeload.github.com/mmqnym/quickcerts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mmqnym%2Fquickcerts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017355,"owners_count":26086052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certificate","gin","golang","http-server","https-server","postgresql","python","qcs","redis","typescript"],"created_at":"2024-11-17T11:24:54.716Z","updated_at":"2025-10-14T00:33:43.845Z","avatar_url":"https://github.com/mmqnym.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QuickCertS\n\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"app version\" src=\"https://img.shields.io/github/v/release/mmq88/quickcerts\"\u003e\u003c/img\u003e\n    \u003ca href=\"https://app.codecov.io/gh/mmq88/quickcerts\"\u003e\u003cimg alt=\"Codecov\" src=\"https://img.shields.io/codecov/c/github/mmq88/quickcerts?logo=codecov\u0026logoColor=%23F01F7A\u0026label=codecov\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/mmq88/quickcerts/actions/workflows/codeql.yml\"\u003e\u003cimg src=\"https://github.com/mmq88/quickcerts/workflows/CodeQL/badge.svg\" alt=\"CodeQL status\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/github.com/mmq88/quickcerts\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/mmq88/quickcerts\"\u003e\u003c/a\u003e\n    \u003cimg alt=\"license\" src=\"https://img.shields.io/github/license/mmq88/quickcerts\"\u003e\u003c/img\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"go version\" src=\"https://img.shields.io/github/go-mod/go-version/mmq88/quickcerts\"\u003e\u003c/img\u003e\n    \u003cimg alt=\"python version\" src=\"https://img.shields.io/badge/Python-v3.9.13-blue\"\u003e\u003c/img\u003e\n    \u003cimg alt=\"node version\" src=\"https://img.shields.io/badge/Node-v18.16.0-blue\"\u003e\u003c/img\u003e\n\u003c/p\u003e\n\n## 语言\n\n\u003cp\u003e\n    \u003ca href=\"./README.md\"\u003e\u003cimg alt=\"English\" src=\"https://img.shields.io/badge/English-6498cc?style=for-the-badge\"\u003e\u003c/img\u003e\u003c/a\u003e\n    \u003ca href=\"./README-zhHant.md\"\u003e\u003cimg alt=\"繁體中文\" src=\"https://img.shields.io/badge/繁體中文-6498cc?style=for-the-badge\"\u003e\u003c/img\u003e\u003c/a\u003e\n    \u003ca href=\"./README-zhHans.md\"\u003e\u003cimg alt=\"简体中文\" src=\"https://img.shields.io/badge/简体中文-6498cc?style=for-the-badge\"\u003e\u003c/img\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## 介绍\n\n本项目（QuickCertS，QCS）旨在帮助开发者快速建立一个证书服务器，用于为您的应用程序颁发证书（密钥和签名）。您可以嵌入公钥到您的应用中，并同时使用签名来验证密钥是否由您架设的证书服务器颁发，实现产品激活功能。\n\n此外，还提供了临时许可证的支持，如果您的应用需要试用期或者产品需要基于许可周期而不是永久授权，您可以使用相关 API 来实现这一功能。\n\n## 技术\n\n架构：\n\n- 服务器框架：Gin Web Framework\n- 緩存：Redis\n- 数据库：PostgreSQL\n\n公私钥存储规范：PKCS8\n\n签名：\n\n| SHA2    | SHA3     |\n| ------- | -------- |\n| SHA-256 | SHA3-256 |\n| SHA-384 | SHA3-384 |\n| SHA-512 | SHA3-512 |\n\n使用 RSA-PSS 填充自动计算的长度\n\n## 配置\n\n- 您可以在 `path_to_qcs/configs/allowlist.toml` 文件中配置管理员的用户名和令牌，用于管理员 API 的身份验证。\n\n- 您可以在 `path_to_qcs/configs/cache.toml` 中将默认的配置更改为您期望的配置。\n\n- 您可以在 `path_to_qcs/configs/database.toml` 文件中更改默认配置为您所期望的配置。但如果您之后使用 Docker Compose 启动服务器，则需要相应更改 Docker Compose 的配置。\n\n  ```yml\n  services:\n  qcs-db: # \u003c- 容器名称对应主机名称\n    build:\n      context: .\n      dockerfile: Dockerfile.database\n    networks:\n      - qcs_subnet\n    ports:\n      - \"33332:5432\"\n    environment:\n      POSTGRES_USER: quickcerts\n      POSTGRES_PASSWORD: password # \u003c- 建议更改数据库密码\n      POSTGRES_DB: quickcerts\n  ```\n\n- `path_to_qcs/configs/server.toml` 包含了服务器的所有相关设置，建议在正式运行之前完成配置。\n  ※请将以下的设置改为 `false`。\n\n  ```toml\n  LOG_TEST_MODE = false\n  ```\n\n- `path_to_qcs/init.sql` 中可以设置数据库的时区，建议使用与本地或云端相同的时区，以避免混淆。\n\n- 如果您了解如何使用 Redis，可于 `path_to_qcs/redis.conf` 更动 Redis 的默认值。\n\n## 构建\n\n- ### Docker\n\n\u003e 使用 docker 和 docker compose 快速启动服务器\n\n确保您已经在您的操作系统上安装了 `docker` 和 `docker compose`。在项目根目录中运行以下命令：\n\n```sh\ndocker compose up --build -d\n```\n\n即可完成构建，若未更改配置设置，默认运行端口 `:33333`\n\n### 可执行文件\n\n\u003e 使用 Release 提供的可执行文件\n\n- 创建一个 PostgreSQL 数据库，并将相关配置设置到 `path_to_qcs/configs/database.toml`。\n\n- 至 Release 根据您的操作系统选择要下载的压缩文件，然后在项目根目录中运行 `./init/Init(.exe)`。\n\n- 在项目根目录中运行 `server(.exe)`。\n\n即可完成构建，若未更改配置设置，默认运行端口 `:33333`\n\n### 源代码\n\n\u003e 从源代码编译并运行，或直接运行\n\n请使用 Golang 版本 `\u003e= 1.21.1` 进行编译和运行，或者直接运行：\n\n```sh\ngo run ./init/Init.go\ngo run ./server.go\n```\n\n即可完成构建，若未更改配置设置，默认运行端口 `:33333`\n\n## API\n\n\u003e 启动服务器后访问以下网址以查看：\n\n默认：http://localhost:33333/swagger/index.html\n\n如果使用 TLS 或不同端口，请相应调整网址。\n\n## SDK\n\n\u003e SDK \u0026 示例\n\n您可以在 `path_to_qcs/sdk` 查看 SDK 以及使用示例，目前支持 Python、TypeScript、Golang。\n\n- ### Python\n\n於 `path_to_qcs/sdk/python` 打开终端，输入：\n\n```sh\n# Here uses pyenv + virtualenv + pip,\n# you can also use your preferred environment/package management tool.\nvirtualenv -p \"path_to_python\" venv\n./venv/Script/activate\npip install -r \"./requirements.txt\"\ncd ./example\n\npython ./usage.py # SDK Usage\npython ./verify.py # Verify RSA signature.\n```\n\n- ### TypeScript\n\n於 `path_to_qcs/sdk/typescript` 打开终端，输入：\n\n```sh\nnpm i\n\nnpm run start # SDK Usage\nnpm run verify # Verify RSA signature.\n```\n\n- ### Golang\n\n於 `path_to_qcs/sdk/go` 打开终端，输入：\n\n```sh\ncd ./example\n\ngo run usage.go # SDK Usage.\n# If you want to run the verification test case, you can call VerifyExample().\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmqnym%2Fquickcerts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmmqnym%2Fquickcerts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmmqnym%2Fquickcerts/lists"}