Infisical 如何从私有 CA 签发第一张 TLS 证书(CA、策略、Profile 到出证)?
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
如果你的团队需要在不依赖公共 CA 的情况下为内部服务签发 TLS 证书,Infisical Certificate Manager 提供的路径是:先创建一个私有 Root CA,再建证书策略(Policy)和证书配置(Profile),最后通过 Application 发起证书请求并下载证书文件。本文按官方快速上手文档的顺序,走通从创建 CA 到拿到certificate.pem与private-key.pem的完整流程,并用openssl验证证书内容。
准备条件
官方快速上手文档只列出一个前置权限要求:
- 需要Product Admin权限(用于创建 CA、策略和 Profile)。
流程涉及的对象及其职责,官方文档的表述是:
- Certificate Authority(CA):签署和签发 X.509 证书的实体,团队出证前必须至少配置一个 CA;
- Certificate Policy:定义证书必须遵循的规则(允许的域名、有效期、密钥算法等),请求违反策略时证书不会被签发;
- Certificate Profile:把 CA + 策略 + 默认值组合成可复用模板,相当于证书的“形状”;
- Application:团队消费 Profile、实际发起证书请求的地方。
完整参考文档:PKI 快速入门、签发第一张证书、Internal CA 参考。
创建 Root CA
进入Certificate Manager → Certificate Authorities,选择Create。快速上手文档给出的字段取值:
| Field | Value |
|---|---|
| Name | my-root-ca |
| Type | Root CA |
| Key Algorithm | EC_prime256v1 |
Internal CA 参考页对这一步有更完整的字段说明(入口写作Certificate Authorities → Internal → Create CA),补充字段包括:
- Valid Until:CA 有效期,日期时间字符串格式,如
YYYY、YYYY-MM-DD、YYYY-MM-DDTHH:mm:ss.sssZ; - Path Length:可挂接的中间 CA 层数上限,
-1表示不限制,0表示不允许挂中间 CA; - Key Source:CA 签名密钥的生成位置,
Infisical(默认,由 Infisical 生成并管理)或HSM(通过 HSM Connector 在你的 HSM 内生成并签名); - Name / Organization (O) / Country (C) / State or Province / Locality / Common Name:构成 CA 的 Distinguished Name(DN),其中至少填写一项。
注意一个文档间差异:快速上手文档的 Key Algorithm 示例值写作EC_prime256v1,而 Internal CA 参考页列出的受支持算法为RSA 2048、RSA 4096、ECDSA P-256、ECDSA P-384(默认RSA 2048)。两种写法对应同一组椭圆曲线选项时的实际可选项以你界面上显示的值为准。
创建证书策略(TLS Server Certificate 预设)
进入Certificate Manager → Certificate Policies,选择Create。快速上手文档的取值:
| Field | Value |
|---|---|
| Preset | TLS Server Certificate |
| Name | tls-server |
选预设的原因:策略文档说明TLS Server Certificate预设为 Web 服务器、API 端点、HTTPS 场景预置了 Server Auth、Digital Signature、DNS/IP SANs 等设置,选择后仍可再自定义。
策略如何生效:每次有证书请求时,Certificate Manager 会用 Profile 绑定的策略校验请求,任何约束被违反则证书不会被签发,这一过程自动完成,使用团队不需要了解策略细节。策略各字段采用三态模型:未配置(不约束)、配置但为空(显式禁止)、配置规则(白名单)。首次签发不必逐项配置,用预设即可。
创建 Certificate Profile,关联 CA 与策略
进入Certificate Manager → Certificate Profiles,选择Create(参考页写作Create Profile)。快速上手文档的取值:
| Field | Value |
|---|---|
| Name | web-servers |
| Certificate Authority | 选择my-root-ca |
| Certificate Policy | 选择tls-server |
Profile 文档补充:
- Issuer Type可选
Certificate Authority或Self-Signed。本文场景选前者;若选Self-Signed,Profile 只支持 API 注册且签发的是自签证书,不适用于“从私有 CA 出证”的目标。 - Certificate Details页签可预置默认值(TTL、Subject 属性、密钥/签名算法、Key Usages 等),请求者未指定时自动套用。
- 一个明确警告:Profile 保存后如果策略被更新,原有默认值可能不再合规,证书请求会在校验阶段失败,直到你更新 Profile 默认值。
创建 Application 并配置 API 注册方式
进入Certificate Manager → Applications,选择Create(Application 文档写作Create Application)。快速上手文档的取值:
| Field | Value |
|---|---|
| Name | my-first-app |
| Certificate Profile | 选择web-servers |
Application 由 Product Admin 创建并可分配 Admin / Operator / Auditor 三种角色成员;只有被分配到该 Application 的人才能查看或管理其中的证书。
接下来配置注册方式(Enrollment)。本流程使用API方式(官方定义为 UI 签发、Infisical Agent 或直接 API 调用的默认方式),操作路径:
- 打开 Application,进入Settings页签,找到Certificate Profiles区域;
- 在
web-serversProfile 上选择Configure; - 选择Add enrollment method,再选择API。
如果 Settings 页看不到任何 Profile,说明 Product Admin 还没把 Profile 挂到该 Application,需要先去挂载。
API 方式还有一个可选项:Auto-Renewal By Default。开启后,Infisical 会在到期前(按Renew Before Days设置的天数)在服务端自动续签。注意官方限制:自动续签只对服务端托管私钥的证书生效,通过 CSR 提交的证书不具备续签资格。
请求并下载第一张证书
在 Application 内进入Certificate Requests页签,选择Request Certificate。快速上手文档的取值:
| Field | Value |
|---|---|
| Profile | 选择web-servers |
| Common Name | example.local |
点击Request后下载证书与私钥。根据 API 注册文档,UI 请求时还可选择两种请求方式:
- Managed:Infisical 生成并管理私钥,你再填 Common Name、SANs、密钥算法、签名算法、TTL 等字段;
- CSR:粘贴自己的 PEM 编码 CSR,Subject 属性和密钥算法从 CSR 中提取。
文档明确提醒:私钥只在签发时展示一次,签发后须立即妥善保存。
完成后的结果是两个文件:
certificate.pem—— 你的 TLS 证书;private-key.pem—— 对应私钥(务必妥善保管)。
可选分支:直接调 API 签发
如果你不走 UI,API 注册方式支持直接调用。以托管密钥方式为例(文档示例):
curl -X POST 'https://app.infisical.com/api/v1/cert-manager/certificates' \ -H 'Authorization: Bearer <access-token>' \ -H 'Content-Type: application/json' \ -d '{ "profileId": "<certificate-profile-id>", "attributes": { "commonName": "api.example.com", "ttl": "90d", "keyAlgorithm": "RSA_2048", "altNames": [ { "type": "DNS", "value": "api.example.com" }, { "type": "DNS", "value": "www.api.example.com" } ] }, "metadata": [ { "key": "env", "value": "production" }, { "key": "service", "value": "payments-api" } ] }'占位符替换说明:<access-token>换成你的 Infisical 访问令牌;<certificate-profile-id>换成你创建的 Profile 的 ID。请求成功后响应包含certificate(证书体)、certificateChain(证书链)、privateKey(托管密钥时返回)、serialNumber、certificateId等字段(以上为文档示例响应结构)。若证书需要审批,响应中certificateRequestId存在但certificate为null,需轮询 Get Certificate Request 端点查看状态。
验证证书内容
对下载到的证书执行:
openssl x509 -in certificate.pem -text -noout快速上手文档给出的预期:应看到证书详情,包括 Common Name(example.local)、有效期,以及该证书由my-root-ca签发。
限制与下一步
- CSR 方式签发的证书不受服务端自动续签覆盖,续签需由客户端自行处理;
- 策略更新后 Profile 默认值可能不合规,届时证书请求会在校验阶段失败,需同步更新 Profile 默认值;
- 直接由 Root CA 出证是最短路径;CA 概览文档给出的实践建议是保留离线/低使用的 Root CA,再创建中间 CA 负责日常签发(Intermediate CA 通过 Infisical CA、Manual 或 External CA 三种方式挂到 Root 下),本文未展开该层级。
官方文档给出的后续方向:为 Application 配置 ACME 注册 实现自动续签、配置到期告警、通过 Certificate Syncs 把证书推送到云端目的地。
【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考