Infisical 如何配置证书同步,把签发的证书自动分发到 Linux 服务器?
Infisical 如何配置证书同步把签发的证书自动分发到 Linux 服务器【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical如果你的证书由 Infisical 签发但实际使用方是一台 Linux 服务器例如跑着 nginx 的业务机手动下载证书再 scp 过去的方式在续期时会很快失效。Infisical 的 Certificate Sync 支持Linux Server目标它在 Application 级别配置通过 SSH 连接到目标服务器把选定证书按指定格式原子化地写入目标目录走 SFTP读取方不会看到写了一半的证书或密钥开启 Auto-Sync 后证书变化会自动再次分发。本文对应文档 Linux Server 证书同步。适用前提Infisical 中能访问目标服务器的一个SSH Connection或一个连接到服务器所在域的LDAP Connection多台服务器场景见后文可选分支目标服务器上目录已存在且连接用户对其有写权限服务器可从 Infisical 直接触达或通过 Infisical Gateway 触达若要用健康检查或 post-sync 命令必须由 Gateway 执行且 Gateway 运行Infisical CLI v0.43.120 或更高版本。前置准备创建 SSH Connection如果还没有 SSH Connection按 SSH 连接文档 创建进入 Organization Settings 的App Connections标签页点击 Add Connection选择SSH Connection填写连接名称及可选描述SSH host主机名或 IP与端口默认 22用户名以及密码或 SSH 私钥私钥若带 passphrase 需一并填写。Infisical 同时支持用户名密码和 SSH 密钥两种认证方式。注意SSH Connection 把目标机器的地址和凭据存在一起一个连接对应一台服务器。在 UI 中创建 Linux Server 同步在你的 Application 中打开Certificate Syncs标签页点击Create Sync。目标类型选择Linux Server。配置DestinationConnection选择上一步的 SSH ConnectionDestination Directory证书文件写入的绝对路径例如/etc/ssl/certs。配置Sync Options详见下节。配置Commands健康检查 / 同步后命令可以留空。配置Details同步名称与可选描述。选择要同步的证书。确认后点击Create Sync。LDAP 连接时步骤 3 之后会多出一个Target Host配置主机名或 IPv4 地址不接受下划线、端口和 IPv6 字面量端口留空即 22可选Trusted Host Keys粘贴ssh-keyscan host的输出本文主路径按 SSH 连接展开。关键同步选项怎么填选项说明Export FormatPEM写独立的证书、链、私钥文件PKCS#12写单个带密码的.pfx包Certificate File Extension仅 PEM.pem默认或.crt两者内容相同按消费方服务期望选择Combine Certificate and Chain仅 PEM叶子证书 链合并为一个文件nginx 期望的 full-chain 形式不再单独写链文件File Permissions / Private Key Permissions八进制权限证书与链文件默认644私钥默认600Owner / Group可选改属主要求连接用户是 root 或有免密 sudoPKCS#12 Password导出格式为 PKCS#12 时必填Include Private Key仅 PEM是否同时写私钥。私钥不可用例如来自外部 CSR 的证书时同步会失败Include Root CA in Certificate Chain是否在链中包含根 CA消费方只需要中间证书时保持关闭Enable Removal of Certificates证书被移出同步、吊销或过期时删除服务器上对应文件Certificate Name Schema文件基本名支持{{commonName}}、{{certificateId}}、{{shortCertificateId}}等占位符扩展名由导出格式决定不含占位符的 schema 只能绑定一张证书Auto-Sync Enabled证书变化时自动同步文件扩展名由导出格式决定name schema 只提供基本文件名。以 common name 为app.example.com、同步到/etc/ssl/certs、默认{{commonName}}schema 为例文档给出的交付文件示例如下PEM (.pem 扩展名) /etc/ssl/certs/app.example.com.pem certificate /etc/ssl/certs/app.example.com.chain.pem chain /etc/ssl/certs/app.example.com.key private key包含私钥时 PKCS#12 /etc/ssl/certs/app.example.com.pfx以上为源文档中的示例结果实际文件名由你的 schema 与选项决定。触发同步并验证选择证书后选中的证书会立即被推送到目标。之后若使用服务端自动续期续期后的证书也会自动同步。验证方式登录目标服务器确认目标目录中出现了对应文件名称遵循你的 name schema 与导出格式。在 Application 的 Certificate Syncs 页面查看同步状态命令执行失败时原因会显示为同步的last error。若配置了健康检查可先点击Test check直接对目标主机执行检查无需等待一次真实同步。注意它会把变量解析到已绑定的证书上因此至少要选中一张证书才能测试{{pkcs12Password}}是例外——导出密码只有在已保存的同步实际交付过证书后才存在测试时总是拒绝。可选健康检查与 post-sync 命令两个可选命令都在同步的Commands步骤配置留空即不执行两者都可以写多行脚本每行一条或用串联。注意两条命令都由 Infisical Gateway 在目标服务器上以 SSH 连接账号的身份执行而不是 Infisical 本体所以同步的 App Connection 必须走 gateway否则保存同步时命令会被拒绝。Gateway 需运行 Infisical CLI v0.43.120 及以上可在 Gateway 主机上执行infisical --version确认。健康检查Health check在任何证书写入之前执行用于确认主机就绪例如test -w /etc/ssl/certs。退出码非零时同步就地停止不交付任何文件、不执行删除、不运行 post-sync 命令本次运行中所有证书都会以该原因标记为 skipped。它还会每天独立运行一次主机在两次同步之间变得不可用时能及时上报。建议写“只回答一个问题”的检查而不是做准备工作set -e test -w {{certificateDirectory}} test ! -e {{certificatePath}} || test -w {{certificatePath}} systemctl is-active --quiet nginx要检查本次运行将写的所有文件可以遍历{{certificateFiles}}每行一个路径echo {{certificateFiles}} | while read -r file; do test -w $(dirname $file); donePost-sync 命令在文件全部交付完成之后执行用来让消费服务加载新文件例如cp {{certificatePath}} /etc/nginx/ssl/live.pem systemctl reload nginx它每次只在实际交付了文件的同步运行中执行一次未完成的运行可能被重试命令会随重试再执行因此优先选择幂等命令服务 reload 就是。可用变量在命令中直接写变量名即可值已按目标 shell 加引号不要再手动加引号变量含义{{certificatePath}}本次运行要写的证书文件完整路径仅单证书同步可用{{certificateDirectory}}目标目录{{certificateFiles}}本次运行写入的所有路径每行一个{{commonName}}证书 common name仅单证书同步可用{{pkcs12Password}}PKCS#12 导出密码仅 PKCS#12 格式{{certificatePath}}与{{commonName}}指向单张具体证书因此使用了它们的命令只能保存在只绑定一张证书的同步上绑定第二张证书会被拒绝。表外的双花括号内容不会被替换会原样到达服务器拼错的变量名会以字面文本形式暴露出来。限制与权限要点每条命令最长 8192 字符变量替换前计数更长的逻辑放到服务器上的脚本命令里调用它超时健康检查 15 秒post-sync 命令 30 秒超时按失败处理命令以 SSH 连接账号执行约束该账号即约束命令能力。例如服务 reload 不需要 root可以只授予一条 sudoers 规则svc-infisical ALL(root) NOPASSWD: /usr/bin/systemctl reload nginx只有 Application Admin 能设置这两条命令渲染后的命令在目标服务器进程表中可见。若命令引用了{{pkcs12Password}}服务器上任何已有 shell 的账号都能看到它敏感场景避免使用多行命令中 shell 默认只报告最后一行的退出状态脚本开头加set -e让第一条失败即中止并让同步失败。可选通过 API 创建同步也可以直接调用 Create Linux Server PKI Sync 端点。文档中的示例请求access-token及 UUID 均为占位需替换为你自己的 token、Application ID、连接 ID 和证书 IDcurl --request POST \ --url https://app.infisical.com/api/v1/cert-manager/syncs/linux-server \ --header Authorization: Bearer access-token \ --header Content-Type: application/json \ --data { name: my-linux-cert-sync, applicationId: 3c90c3cc-0d44-4b50-8888-8dd25736052a, connectionId: 550e8400-e29b-41d4-a716-446655440000, isAutoSyncEnabled: true, certificateIds: [550e8400-e29b-41d4-a716-446655440000], syncOptions: { exportFormat: pem, includePrivateKey: true, canRemoveCertificates: true, certificateNameSchema: {{commonName}}, healthCheckCommand: test -w /etc/ssl/certs, postSyncCommand: sudo systemctl reload nginx }, destinationConfig: { destinationPath: /etc/ssl/certs, host: server01.corp.example.com } }注意destinationConfig.host及可选port默认 22只在connectionId指向 LDAP Connection 时使用且必填connectionId指向 SSH Connection 时这两个字段会被拒绝因为 SSH 连接自带主机与端口。可选分支用 LDAP 连接服务多台服务器SSH Connection 一个连接对应一台服务器把同一证书推到五十台服务器就要维护五十个连接。改用连接到域的LDAP Connection后一个连接可服务任意多个同步每个同步各自指定Target Host共享同一凭据轮换服务账号密码后所有同步在下次运行自动生效。其前提是域控可被 LDAPS 636 端口访问硬化的域控会在 389 端口的明文 simple bind 上返回strongerAuthRequired且域控与目标服务器都要可达。Infisical 以DOMAIN\user形式如CORP\svc-certs登录目标服务器。realm join入域的主机SSSDadprovider原生支持该形式通过 LDAP 配置目录客户端的主机ldapprovider默认只认userdomain需要在其sssd.conf中追加文档示例[domain/CORP] re_expression (((?Pdomain[^\\])\\(?Pname.$))|((?Pname[^])(?Pdomain.$))|(^(?Pname[^\\])$)) use_fully_qualified_names False创建同步前先在服务器上执行getent passwd CORP\svc-certs确认返回为空则同步必然认证失败。常见问题与限制目标目录不存在同步失败并给出明确错误。先创建目录并授予连接用户写权限再重跑同步。不能反向导入Linux Server 同步只向服务器交付证书不会把服务器上的证书读回 Infisical。删除行为仅当开启Enable Removal of Certificates且证书被移出同步、吊销或过期时Infisical 才会删除它为该证书交付过的文件。命令失败的表现健康检查失败时同步被标记为 failed原因显示为 last error且本次什么都没写、没删post-sync 命令失败时已交付的文件保留在服务器原处。同步只影响 Infisical 管理的证书直接在目标侧创建的证书不受影响但 Infisical 管理的证书若在目标侧被直接修改可能被下次同步覆盖参见 Certificate Syncs 总览。完成基础配置并验证文件落地后下一步可以在 Application 中开启证书自动续期使续期后的证书无需人工介入即可重新分发到同一批服务器。【免费下载链接】infisicalInfisical is the open-source platform for secrets, certificates, and privileged access management.项目地址: https://gitcode.com/GitHub_Trending/in/infisical创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考