ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Authelia CLI 深度解析:使用 `authelia crypto pair ecdsa generate` 生成 ECDSA 密钥对

Authelia CLI 深度解析:使用 `authelia crypto pair ecdsa generate` 生成 ECDSA 密钥对 Authelia CLI 深度解析使用authelia crypto pair ecdsa generate生成 ECDSA 密钥对【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/autheliaAuthelia 的authelia crypto pair ecdsa generate子命令用于在命令行上生成一对 ECDSA椭圆曲线数字签名算法公私钥并将其以 PEM 格式导出为独立文件。该命令是 Authelia 内置crypto工具集中面向密钥对操作的一环常用于为反向代理 TLS 终止、JWT/签名场景或证书签发流程准备椭圆曲线密钥材料。读完本文你将掌握该命令的全部参数含义与默认值、曲线选择P224/P256/P384/P521的解析规则、输出文件的命名与目录行为以及从 Cobra 命令注册到ecdsa.GenerateKey调用的完整源码级执行链路。命令概览根据官方参考文档 authelia crypto pair ecdsa generate该子命令的定义如下Generate a cryptographic ECDSA key pairGenerate a cryptographic ECDSA key pair. This subcommand allows generating an ECDSA key pair.authelia crypto pair ecdsa generate [flags]文档给出的示例用法authelia crypto pair ecdsa generate --help在 CLI 结构中该命令隶属于 authelia crypto pair ecdsaPerform ECDSA key pair cryptographic operations后者又是authelia crypto pair下四个算法分支RSA、ECDSA、Ed25519、ML-DSA之一。从 internal/commands/crypto.go 中的newCryptoPairCmd可以看到这四个分支均由newCryptoPairSubCmd统一构造再挂接一个generate子命令。完整参数说明以下参数清单完整继承自官方参考文档并结合同目录其他命令文档与源码补充了默认值来源-b, --curve string Sets the elliptic curve which can be P224, P256, P384, or P521 (default P256) -d, --directory string directory where the generated keys, certificates, etc will be stored --file.extension.legacy string string to include before the actual extension as a sub-extension on the PKCS#1 and SECG1 legacy formats (default legacy) --file.private-key string name of the file to export the private key data to (default private.pem) --file.public-key string name of the file to export the public key data to (default public.pem) -h, --help help for generate --legacy enables the output of the legacy PKCS#1 and SECG1 formats when enabled从父命令继承的参数-c, --config strings configuration files or directories to load, for more information run authelia -h authelia config (default [configuration.yml]) --config.experimental.filters strings list of filters to apply to all configuration files, for more information run authelia -h authelia filters逐参数解读参数默认值作用-b, --curveP256指定椭圆曲线仅接受 P224、P256、P384、P521 四个取值-d, --directory空当前目录生成密钥、证书等文件的存放目录--file.private-keyprivate.pem私钥导出文件名--file.public-keypublic.pem公钥导出文件名--legacyfalse启用后额外输出 PKCS#1 / SECG1 传统格式--file.extension.legacylegacy传统格式文件在扩展名前插入的子扩展名用于区分新旧两种 PEM 文件这些参数的注册位置在源码中一览无余--file.public-key由 cmdFlagsCryptoPairGenerate 注册--curve短标志-b默认P256由 cmdFlagsCryptoPrivateKeyECDSA 注册而--legacy、--file.extension.legacy、--file.private-key、-d, --directory则由 cmdFlagsCryptoPrivateKey 统一注册。注意 ECDSA 的-b是曲线名字符串而同族的 RSA 命令中-b是整数位数默认 2048ML-DSA 的-b是参数集——这是使用短标志时需要留意的差异。--curve曲线解析四种取值的底层规则--curve参数是 ECDSA 密钥强度与用途的关键控制项。命令执行时曲线字符串经 cryptoGenPrivateKeyFromCmd 中的 ECDSA 分支处理case cmdUseECDSA: // ... if curveStr, err cmd.Flags().GetString(cmdFlagNameCurve); err ! nil { return nil, err } if curve utils.EllipticCurveFromString(curveStr); curve nil { return nil, fmt.Errorf(invalid curve %s was specified: curve must be P224, P256, P384, or P521, curveStr) } if privateKey, err ecdsa.GenerateKey(curve, ctx.providers.Random); err ! nil { return nil, fmt.Errorf(generating ECDSA private key resulted in an error: %w, err) }从源码看解析逻辑集中在 internal/utils/crypto.go 的 EllipticCurveFromString它对四种曲线提供了两种写法——标准写法P256与带连字符的替代写法P-256且测试用例覆盖了大小写不敏感场景func EllipticCurveFromString(curveString string) (curve elliptic.Curve) { switch curveString { case EllipticCurveAltP224, EllipticCurveP224: return elliptic.P224() case EllipticCurveAltP256, EllipticCurveP256: return elliptic.P256() case EllipticCurveAltP384, EllipticCurveP384: return elliptic.P384() case EllipticCurveAltP521, EllipticCurveP521: return elliptic.P521() } return nil }对应的常量定义在 internal/utils/const.go。单元测试 internal/utils/crypto_test.go 中为每种曲线都设置了 Standard / Lowercase / Hyphenated 三组输入例如P224、小写形式、P-224全部断言解析到对应的elliptic.Pxxx()曲线对象而传入非法曲线名时命令会直接报错并提示合法取值集合。四条曲线的安全强度与适用场景对应 NIST 标准曲线Go 标准库crypto/elliptic提供曲线安全强度位说明P224112四条中最弱一般仅用于兼容性验证P256128默认值TLS/OAuth/JWT 等场景的主流选择P384192需要更高安全余量时使用常见于长期证书P521256最高强度密钥与签名体积更大另外值得注意ecdsa.GenerateKey的随机数来源是ctx.providers.Random即 Authelia 全局随机数提供者而非直接调用crypto/rand——从源码结构看这使得密钥生成行为可以被测试注入受控随机源。执行流程与输出文件authelia crypto pair ecdsa generate的执行入口是generate子命令的RunE即 CryptoGenerateRunE。它先调用cryptoGenPrivateKeyFromCmd生成私钥再根据父级命令类型分流func (ctx *CmdCtx) CryptoGenerateRunE(cmd *cobra.Command, args []string) (err error) { var ( privateKey any ) if privateKey, err ctx.cryptoGenPrivateKeyFromCmd(cmd); err ! nil { return err } if cmd.Parent().Parent().Use cmdUseCertificate { return ctx.CryptoCertificateGenerateRunE(cmd, args, privateKey) } return ctx.CryptoPairGenerateRunE(cmd, args, privateKey) }由于generate的父链是pair而非certificate流程进入 CryptoPairGenerateRunE随后由 runCryptoPairGenerate 完成落盘。其关键步骤读取--legacy与--file.extension.legacy标志计算输出路径cryptoGetWritePathsFromCmd 将-d, --directory与--file.private-key/--file.public-key两个文件名做filepath.Join拼接pair 类命令固定使用file.private-keyfile.public-key这一对标志打印摘要输出以Generating key pair开头ECDSA 私钥会显示Algorithm: ECDSA Curve P256算法描述由 cryptoKeyAlgorithm 生成形如ECDSA Curve P256随后列出Directory、Private Key、Public Key的输出路径写入 PEM 文件私钥、公钥均通过 utils.WriteKeyToPEM 写出若启用--legacy还会为两个文件各写一份传统格式副本公钥推导公钥由私钥直接推导utils.PublicKeyFromPrivateKey因此一次运行即可得到完整密钥对。从单元测试 TestCryptoGenerateRunE / ShouldSucceedPairECDSA 可以确认该行为在临时目录上设置-d后执行CryptoGenerateRunE断言无错误且标准输出包含ECDSA字样同文件中 pair RSA 分支的测试还断言了private.pem与public.pem两个文件确实被创建。--legacy选项与传统格式命名规则--legacy启用后命令会额外输出 PKCS#1 / SECG1 传统格式即私钥头为EC PRIVATE KEY而非 PKCS#8 的PRIVATE KEY。传统格式文件名的生成规则同样在 runCryptoPairGenerate 中若文件名不带扩展名传统格式路径为原路径.extLegacy若带扩展名如private.pem则在扩展名前插入子扩展名得到private.legacy.pem子扩展名即--file.extension.legacy的值默认为legacy。对于 ECDSA 私钥从 cryptoKeyProperties 的返回值可以确认legacyKey为true即该算法支持传统格式输出——这与 Ed25519固定返回false不同。需要强调的是传统格式的写入以--legacy标志开启为前提默认运行时只产生一份 PEM 输出。实战示例以下示例均基于上述默认值可直接在部署了 Authelia CLI 的环境中运行# 1. 默认生成在当前目录生成 P256 曲线的 private.pem 与 public.pem authelia crypto pair ecdsa generate # 2. 指定 384 位曲线并输出到独立目录 authelia crypto pair ecdsa generate -b P384 -d /etc/authelia/keys # 3. 使用连字符替代写法P-521 与 P521 等价 authelia crypto pair ecdsa generate --curve P-521 -d /etc/authelia/keys # 4. 同时输出 PKCS#1/SECG1 传统格式生成 private.pem、private.legacy.pem、public.pem、public.legacy.pem authelia crypto pair ecdsa generate --legacy -d ./tls # 5. 自定义文件名 自定义子扩展名 authelia crypto pair ecdsa generate -b P256 -d ./tls \ --file.private-key ecdsa.key.pem --file.public-key ecdsa.pub.pem \ --legacy --file.extension.legacy pkcs1输出会类似如下结构路径与曲线随参数变化Generating key pair Algorithm: ECDSA Curve P256 Output Paths: Directory: /etc/authelia/keys Private Key: private.pem Public Key: public.pem与相关命令的关系父命令 authelia crypto pair ecdsaECDSA 密钥对操作的容器命令generate为其子命令authelia crypto pair密钥对操作总入口兄弟分支还包括rsa、ed25519、mldsaML-DSA 后量子签名参数集 ML-DSA-44/65/87若需要基于 ECDSA 密钥生成 X.509 证书或 CSR可参考同族的 authelia crypto certificate ecdsa generate 与 authelia crypto certificate ecdsa request它们复用同一套--curve参数与密钥生成逻辑只是额外附加了主题、SAN、有效期等证书字段。小结authelia crypto pair ecdsa generate用一条命令完成了选择曲线 → 生成私钥 → 推导公钥 → 按命名规则落盘的完整流程默认 P256 曲线、private.pem/public.pem双文件输出、-d控制目录、--legacy控制是否追加 PKCS#1/SECG1 传统格式。其实现核心位于 internal/commands/crypto.go 与 internal/commands/crypto_helper.go曲线解析依赖 internal/utils/crypto.go 的EllipticCurveFromString行为由 internal/commands/crypto_test.go 与 internal/utils/crypto_test.go 中的用例持续验证。对于需要在 TLS、签名或证书体系中引入椭圆曲线密钥的运维与集成场景掌握这条命令及其参数语义即可覆盖绝大多数密钥准备需求。【免费下载链接】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),仅供参考
返回列表