如何生成 Authelia 的 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/authelia
Authelia 提供了内置的authelia crypto certificate mldsa generate子命令,用于一次性生成 ML-DSA 私钥和证书,无需依赖 openssl 等外部工具。文章基于 ML-DSA 证书生成命令参考 与生成安全值指南 中的真实命令路径写成,覆盖本机二进制(Bare-Metal)和 Docker 容器两种执行方式,以及自签发、CA 签发和生成 CSR 三条文档明确支持的路径。
按项目文档,Authelia 自 4.39.21(2026 年 9 月 3 日发布)起实现了多项后量子加密措施,包括 WebAuthn 凭据与 OIDC/OAuth 2.0 的 ML-DSA-44、ML-DSA-65、ML-DSA-87 JOSE 签名支持,详见后量子加密概览。本文只讲如何用 CLI 生成 ML-DSA 密钥与证书这一任务本身。
前提条件
- 本机已安装 Authelia CLI 二进制,或可以使用 Docker 并拉取
authelia/authelia:latest镜像。两种执行方式在生成安全值指南中分别称为 Bare-Metal 和 Docker。 - 生成文件会写入
--directory(-d)指定的目录;不指定该参数时,命令在参考文档中仅展示了 flag 用法,未说明缺省输出位置,建议显式指定目录,避免生成文件散落。
生成自签名的 ML-DSA 密钥与证书
命令的基本形式(来自命令参考):
authelia crypto certificate mldsa generate [flags]参考文档明确说明:--path.ca未提供时,证书是自签名的。因此最简单的调用就是指定一个 common name 和输出目录,例如文档示例中使用的域名example.com(请替换为你自己的值):
authelia crypto certificate mldsa generate --common-name example.com --directory ./keys如果不带任何参数只想了解用法,运行参考文档给出的示例:
authelia crypto certificate mldsa generate --helpDocker 方式执行
生成安全值指南中 RSA 证书生成的 Docker 命令为把当前目录挂载到容器/keys再运行authelia crypto certificate rsa generate;ML-DSA 的generate命令拥有完全相同的--common-name、--directory选项,按同一模式执行:
docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd)":/keys authelia/authelia:latest authelia crypto certificate mldsa generate --common-name example.com --directory /keys副作用说明:该命令会启动一个临时容器,--rm使容器退出后自动删除;-v "$(pwd)":/keys会把当前工作目录挂载进容器,生成的文件最终落在你的当前目录中。-u "$(id -u):$(id -g)"让容器以你当前的用户身份写文件,避免产生 root 属主的输出。
选择 ML-DSA 参数集与有效期
ML-DSA 算法有三个参数集,通过-b, --parameters指定,可选值与默认值以命令参考为准:
| flag | 可选值 | 默认值 | 用途 |
|---|---|---|---|
-b, --parameters | ML-DSA-44、ML-DSA-65、ML-DSA-87 | ML-DSA-65 | 设置 ML-DSA 参数集 |
--duration | — | 1y | 证书有效期时长 |
--signature | — | SHA256 | 证书签名算法 |
--not-before/--not-after | 多种日期格式 | 不指定时为 now / 由 duration 决定 | 证书有效期的最早与最晚时间 |
--sans | — | — | subject alternative names |
-n, --common-name | — | — | 证书 common name |
--country、--province、-l, --locality、-s, --street-address、-p, --postcode、-o, --organization、--organizational-unit | — | organization 默认[Authelia] | 证书主体地址字段 |
例如指定参数集并延长有效期:
authelia crypto certificate mldsa generate --common-name example.com --parameters ML-DSA-65 --duration 2y --directory ./keys关于 ML-DSA-44 / 65 / 87 三个参数集之间如何选择,命令参考只列出三个可选值与默认值ML-DSA-65,没有给出选型建议;后量子概览文档同样只说明项目支持这三个参数集,未对三者做对比,因此按文档事实保留默认值或自行决定即可。
输出文件与改名
按命令参考中的默认文件名,生成结果写入输出目录:
| 文件 | 说明 | 对应 flag |
|---|---|---|
private.pem | 私钥数据 | --file.private-key |
public.crt | 证书数据 | --file.certificate |
public.chain.pem | 证书链 PEM bundle(仅当--bundles包含chain) | --file.bundle.chain |
private.chain.pem | 证书链与私钥 PEM bundle(仅当--bundles包含priv-chain) | --file.bundle.priv-chain |
需要改名时用对应的--file.*flag 指定;需要额外输出 bundle 时用--bundles,可选值参考文档写的是'chain'和'priv-chain'。另外--legacy开启后会在 PKCS#1 和 SECG1 旧格式输出中生效,--file.extension.legacy控制该旧格式的子扩展名(默认legacy)。
可选:使用已有 CA 签发
如果不想自签名,命令参考说明--path.ca指向 CA 文件所在目录,未提供该参数时证书自签。CA 的证书与私钥默认读取ca.public.crt和ca.private.pem(分别可由--file.ca-certificate、--file.ca-private-key改名)。
按文档给出的 flag 语义,一个可用的组合是先用--ca生成一张 CA 证书(参考文档说明--ca表示“create the certificate as a certificate authority certificate”),再把--path.ca指向该 CA 所在目录:
# 生成 CA(CA 证书 + CA 私钥) authelia crypto certificate mldsa generate --ca --common-name my-ca --directory ./ca # 用该 CA 签发业务证书 authelia crypto certificate mldsa generate --common-name example.com --path.ca ./ca --directory ./keys第二条命令假设./ca目录下就是默认文件名ca.public.crt与ca.private.pem,文件名不同时用--file.ca-certificate/--file.ca-private-key指定实际路径。
可选:为外部 CA 生成 CSR
如果证书要交给外部 CA 签发,使用姊妹命令 authelia crypto certificate mldsa request 生成私钥与证书签名请求:
authelia crypto certificate mldsa request --common-name example.com --directory ./csr该命令默认输出request.csr(由--file.csr改名)与私钥private.pem,其余证书字段 flag(--parameters、--duration、--sans、地址字段等)与generate一致。
验证生成结果
参考文档与指南给出的成功判据是输出文件本身:指南在证书一节明确“所有情况下输出文件如下”(private.pem为私钥、public.crt为公钥与证书)。执行完命令后,在输出目录确认这些文件已生成即可:
- 自签 / CA 签发(
generate):private.pem、public.crt,启用--bundles时还有对应的public.chain.pem或private.chain.pem; - CSR(
request):request.csr、private.pem。
文档没有给出命令成功时的终端输出样例,因此以文件是否落盘为准。
限制说明
- 三个 ML-DSA 参数集在文档中仅以可选值与默认值(
ML-DSA-65)的形式出现,没有强度对比或选型依据,本文不补写结论。 generate命令同时接受继承自父命令的-c, --config(默认configuration.yml)等全局参数,本任务仅使用生成相关的 flag,配置参数不影响密钥生成。- 本文命令中的
example.com取自文档示例,执行前请替换为实际要使用的 common name。
参考文档入口:authelia crypto certificate mldsa generate、authelia crypto certificate mldsa、authelia crypto certificate mldsa request、后量子加密概览、生成安全值指南。
【免费下载链接】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),仅供参考