尧图精选

Authelia 后量子密码学实战:使用 authelia crypto certificate mldsa generate 生成 ML-DSA 证书

🕒 发布时间:2026/9/13 17:34:56 📁 来源:尧图网络
Authelia 后量子密码学实战使用 authelia crypto certificate mldsa generate 生成 ML-DSA 证书【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/autheliaAuthelia 是面向 Web 应用的单点登录与多因素认证门户并在其加密工具集中原生支持后量子密码学标准 ML-DSAModule-Lattice Digital Signature Algorithm。本文围绕authelia crypto certificate mldsa generate命令完整讲解如何使用 Authelia CLI 生成 ML-DSA 私钥与 X.509 证书涵盖全部命令行参数、参数集选择、自签名与 CA 签发两种模式、证书链捆绑输出以及命令背后的源码实现原理帮助你为 OIDC、TLS 等场景产出符合后量子密码学要求的证书材料。命令定位crypto 命令树中的 ML-DSA 分支authelia crypto certificate mldsa generate位于 Authelia 的crypto子命令体系下。从源码结构看crypto命令由 internal/commands/crypto.go 中的newCryptoCmd构建挂载了rand、certificate、hash、pair四个一级子命令其中certificate又通过newCryptoCertificateSubCmd为RSA、ECDSA、Ed25519、ML-DSA四种算法各生成一组generate生成密钥与证书和request生成密钥与证书签名请求子命令见 internal/commands/crypto.go。因此完整命令层级为authelia crypto └── certificate ├── rsa ├── ecdsa ├── ed25519 └── mldsa ├── generate # 生成 ML-DSA 私钥与证书 └── request # 生成 ML-DSA 私钥与证书签名请求CSR相关命令文档authelia crypto certificate mldsa的概述见 authelia_crypto_certificate_mldsa.mdCSR 分支见 authelia_crypto_certificate_mldsa_request.md。命令概述与语法该命令的职责是“生成一个 ML-DSA 私钥和证书”Generate an ML-DSA private key and certificate。官方参考文档定义的基础语法如下authelia crypto certificate mldsa generate [flags]查看帮助信息authelia crypto certificate mldsa generate --help命令执行流程可从源码确认CryptoGenerateRunE先通过cryptoGenPrivateKeyFromCmd依据--parameters生成 ML-DSA 私钥再根据命令所属分支调用CryptoCertificateGenerateRunE完成证书模板构建、签名与文件输出见 internal/commands/crypto.go 与 internal/commands/crypto_helper.go。全部选项详解含默认值与源码依据以下选项来自官方参考文档并补充了默认值来源对应 internal/commands/crypto_helper.go 中的 flag 定义密钥生成选项选项说明默认值-b, --parameters string指定 ML-DSA 参数集可选ML-DSA-44、ML-DSA-65、ML-DSA-87ML-DSA-65这是 ML-DSA 分支独有的密钥参数。源码 internal/utils/crypto_mldsa.go 显示解析参数时不仅接受完整名称如ML-DSA-65还接受裸安全级别如65且大小写不敏感未知参数会报错错误信息形如invalid parameters ML-DSA-99 were specified: parameters must be ML-DSA-44, ML-DSA-65, or ML-DSA-87该行为由 internal/utils/crypto_mldsa_test.go 中的测试用例覆盖。证书主体信息选项选项说明默认值-n, --common-name string证书通用名Common Name空-o, --organization strings证书组织Organization[Authelia]--organizational-unit strings证书组织单元空--country strings证书国家/地区空--province strings证书省/州空-l, --locality strings证书所在地城市空-s, --street-address strings证书街道地址空-p, --postcode strings证书邮政编码空这些选项最终被组装进pkix.Name结构见 internal/commands/crypto_helper.go并写入证书的 Subject 字段。有效期选项选项说明默认值--duration string证书有效时长1y--not-before string证书生效的最早日期时间支持多种格式当前时间--not-after string证书失效的最晚日期时间支持多种格式由--duration推导源码 internal/commands/crypto_helper.go 明确了几点行为--not-before未指定时取time.Now()--not-after与--duration不能同时指定否则返回错误两者都未指定时按notBefore duration计算notAfter。--duration与时间字符串均由utils包中的解析函数处理。主体备用名称SAN选项说明默认值--sans strings主体备用名称Subject Alternative Names空SAN 支持 DNS 名称与 IP 地址混用。源码 internal/commands/crypto_helper.go 会尝试用net.ParseIP判断每个值能解析为 IP 的放入IPAddresses否则放入DNSNames。命令输出时以DNS.1:xxx, IP.1:1.2.3.4的形式展示见cryptoSANsToString。签名与用途选项选项说明默认值--signature string证书签名算法SHA256--extended-usage strings证书扩展用途类型空--ca将证书创建为证书颁发机构CA证书false需要注意对 ML-DSA 而言--signature选项不生效。源码 internal/commands/crypto_helper.go 的cryptoGetAlgFromCmd中当父命令为mldsa时签名算法直接从--parameters推导ML-DSA-44→x509.MLDSA44依此类推见 internal/utils/crypto_mldsa.go与 RSA/ECDSA/Ed25519 分支使用--signature的逻辑不同。这也符合 ML-DSA 的密码学特性——签名算法由参数集唯一确定。--ca开启后证书模板的IsCA置为 true同时KeyUsage与ExtKeyUsage会依据 CA 角色自动调整见 internal/commands/crypto_helper.go。输出文件与目录选项选项说明默认值-d, --directory string生成密钥、证书等文件的存放目录空当前目录--file.private-key string私钥导出文件名private.pem--file.certificate string证书导出文件名public.crt--file.ca-private-key string用于签名的 CA 私钥文件名ca.private.pem--file.ca-certificate string用于签名的 CA 证书文件名ca.public.crt--file.bundle.chain string--bundles含chain时证书链 PEM 捆绑包文件名public.chain.pem--file.bundle.priv-chain string--bundles含priv-chain时证书链私钥 PEM 捆绑包文件名private.chain.pem--bundles strings启用捆绑包生成取值chain与priv-chain空--legacy启用旧版 PKCS#1 与 SECG1 格式输出false--file.extension.legacy string旧版格式中位于实际扩展名之前的子扩展名legacy--path.ca stringCA 文件源目录不提供则生成自签名证书空关于输出路径源码cryptoGetWritePathsFromCmd见 internal/commands/crypto_helper.go定义了文件名选择的规则若指定了--ca私钥写为--file.ca-private-key默认ca.private.pem、证书写为--file.ca-certificate默认ca.public.crt普通证书则写为--file.private-key与--file.certificate。所有路径都会与--directory拼接。关于--legacyPKCS#1 / SECG1 是 RSA 与 ECDSA 密钥的传统编码格式而ML-DSA 密钥并不存在这两种旧格式。源码cryptoKeyProperties对 ML-DSA 返回的legacy标志为false见 internal/commands/crypto_helper.go因此--legacy对 ML-DSA 实际不产生额外输出该选项主要是与 RSA/ECDSA 子命令保持 CLI 一致性。通用继承选项选项说明默认值-c, --config strings要加载的配置文件或目录[configuration.yml]--config.experimental.filters strings应用于所有配置文件的过滤器列表空-h, --help显示命令帮助—ML-DSA 参数集与构建前提ML-DSA 是 NIST 标准化的后量子签名算法按安全强度分为三个参数集参数集完整名称签名算法标识ML-DSA-44Module-Lattice Digital Signature Algorithm 44x509.MLDSA44ML-DSA-65默认同上强度 65x509.MLDSA65ML-DSA-87同上强度 87x509.MLDSA87常量定义见 internal/utils/const.go。重要的构建前提Authelia 的 ML-DSA 支持依赖 Go 标准库crypto/mldsa该包在Go 1.27中才正式落地。源码 internal/utils/crypto_mldsa.go 与 internal/oidc/mldsa.go 均明确注明使用更早工具链构建的 Authelia 二进制不支持任何 ML-DSA 操作此时GenerateMLDSAKey会返回错误“generating ML-DSA private keys requires this binary to be built with Go 1.27 or later”见 internal/utils/crypto_mldsa_stub.go。因此在使用本命令前请确认你的 Authelia 二进制由 Go 1.27 或更高版本构建。ML-DSA 密钥生成还有一个实现细节不同于 RSA/ECDSA/Ed25519 通过ctx.providers.Random注入随机源crypto/mldsa自身从crypto/rand取随机种子且不提供外部注入接口因此GenerateMLDSAKey不接收随机源参数见 internal/utils/crypto_mldsa.go。实战场景一生成自签名 ML-DSA 证书最基本的用法是不提供--path.ca此时证书为自签名源码中cryptoGetCAFromCmd在未指定--path.ca时返回 nil随后parent template实现自签名见 internal/commands/crypto.goauthelia crypto certificate mldsa generate \ --directory ./certs \ --common-name authelia.example.com \ --sans authelia.example.com,192.168.1.10 \ --duration 2y该命令将在./certs目录下生成private.pemML-DSA-65 私钥与public.crt自签名证书。由于 ML-DSA 的签名算法由参数集决定命令输出中的Signature Algorithm会自动显示为对应参数集如MLDSA65无需也无法通过--signature覆盖。实战场景二使用已有 CA 签发 ML-DSA 证书企业内网或生产环境中通常希望由受信任的 CA 签发证书。首先用--ca生成一个 CA 证书authelia crypto certificate mldsa generate \ --directory ./ca \ --common-name Authelia Internal CA \ --ca \ --duration 10y \ --parameters ML-DSA-87输出./ca/ca.private.pem与./ca/ca.public.crt文件名由--file.ca-private-key/--file.ca-certificate的默认值决定。然后通过--path.ca指向 CA 目录为实际域名签发authelia crypto certificate mldsa generate \ --directory ./certs \ --common-name portal.example.com \ --sans portal.example.com \ --path.ca ./ca \ --duration 1y此时命令会读取./ca/ca.private.pem与./ca/ca.public.crt源码 internal/commands/crypto_helper.go 中cryptoGetCAFromCmd负责读取与解析并用 CA 私钥对新证书签名signatureKey caPrivateKey见 internal/commands/crypto.go。命令输出会显示签发方信息Signed By: CA Common Name以及 CA 的序列号与过期时间。实战场景三生成证书链与私钥捆绑包使用--bundles可以额外输出 PEM 捆绑包authelia crypto certificate mldsa generate \ --directory ./certs \ --common-name portal.example.com \ --path.ca ./ca \ --bundles chain,priv-chainchain生成public.chain.pem内容为“证书 CA 证书”的 PEM 链默认文件名见--file.bundle.chainpriv-chain生成private.chain.pem内容为“私钥 证书 CA 证书”默认文件名见--file.bundle.priv-chain。捆绑逻辑由 internal/commands/crypto_helper.go 的cryptoGenerateCertificateBundlesFromCmd实现chain把证书与 CA 证书依次写入 PEM 块priv-chain则将私钥 PEM 块置于链首。若未指定--path.ca自签名捆绑包中自然不包含 CA 证书块。命令输出解读执行生成时命令会在 stdout 打印一段结构化摘要见 internal/commands/crypto.go 的CryptoCertificateGenerateRunE包含证书序列号128 位随机数来源见 internal/commands/crypto_helper.go签发方式Self-Signed或 CA 的 Common Name、序列号与过期时间Subject 信息Common Name、Organization、Organizational Unit、Country、Province、Street Address、Postal Code、Locality属性Not Before / Not After、CA 标志、Signature Algorithm、Public Key Algorithm、ML-DSA 参数集、SAN 列表输出路径目录、私钥文件、证书文件、可选捆绑包文件。例如示意Generating Certificate Serial: 7f3a… Signed By: Authelia Internal CA Serial: 9b2c…, Expires: 2036-… Subject: Common Name: portal.example.com, Organization: [Authelia], … Properties: Not Before: …, Not After: … CA: false, CSR: false, Signature Algorithm: MLDSA65, Public Key Algorithm: MLDSA, Parameters: ML-DSA-65 Subject Alternative Names: DNS.1:portal.example.com Output Paths: Directory: certs Private Key: private.pem Certificate: public.crt与 OIDC 后量子签名的联动本命令生成的 ML-DSA 密钥并不仅限于 TLS 证书场景Authelia 的 OIDC 授权服务器同样支持 ML-DSA 签名。源码 internal/oidc/mldsa.go 定义了SigningAlgsMLDSA按参数集升序暴露ML-DSA-44、ML-DSA-65、ML-DSA-87三种 JWS 签名算法并要求同样的 Go 1.27 构建前提SigningAlgFromMLDSAKey则根据密钥所属参数集返回对应的 JWSalg值见 internal/oidc/mldsa.go。这也解释了为什么项目将自身定位为“OpenID Certified™ and Post-Quantum Cryptography Ready”——ML-DSA 的 CLI 支持与 OIDC 签名支持共享同一套后量子密钥基础设施。常见错误与排查invalid parameters xxx were specified: parameters must be ML-DSA-44, ML-DSA-65, or ML-DSA-87--parameters取值非法。接受完整名称或裸级别数字如44、65、87大小写不敏感。generating ML-DSA private keys requires this binary to be built with Go 1.27 or later当前二进制由 Go 1.27 之前的工具链构建不具备 ML-DSA 能力请更换为支持crypto/mldsa的构建。failed to determine not after同时指定了--not-after与--duration二者互斥只保留其一。CA 文件读取失败--path.ca指定的目录下必须存在ca.private.pem与ca.public.crt或通过--file.ca-private-key/--file.ca-certificate覆盖文件名且内容必须是合法的 PEM 私钥与证书。参考文档与源码索引命令参考文档authelia_crypto_certificate_mldsa_generate.md父命令文档authelia_crypto_certificate_mldsa.md命令实现internal/commands/crypto.go、internal/commands/crypto_helper.goML-DSA 密钥工具internal/utils/crypto_mldsa.go、internal/utils/crypto_mldsa_stub.go、internal/utils/crypto_mldsa_test.goOIDC ML-DSA 签名算法internal/oidc/mldsa.go综上authelia crypto certificate mldsa generate是 Authelia 后量子密码学能力的直接入口一条命令即可完成 ML-DSA 私钥生成、证书构建、自签名或 CA 签发、SAN 注入、有效期控制与证书链捆绑且默认参数集ML-DSA-65兼顾了安全强度与兼容性。配合 OIDC 侧的 ML-DSA 签名支持Authelia 为追求后量子安全的应用提供了从密钥生成到身份签名认证的完整闭环。【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →