golang 用于生成凭证密钥对的App命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 用于生成凭证密钥对的App命令相关的知识,希望对你有一定的参考价值。

package cmd

import (
	"fmt"

	"github.com/omnisyle/goliauth/goliauth/internal/app"
	"github.com/spf13/cobra"
)

var db string

func appCmd() *cobra.Command {
	command := &cobra.Command{
		Use:   "app",
		Short: "Create a public/secret key pair as an app with a name",
	}

	createCmd := &cobra.Command{
		Use:   "create [name]",
		Short: "Create an app with a public/secret key pair",
		Args:  cobra.MinimumNArgs(1),
		Run:   createApp,
	}

	getCmd := &cobra.Command{
		Use:   "get [public key]",
		Short: "Get an app using public key",
		Args:  cobra.MinimumNArgs(1),
		Run:   getApp,
	}

	command.PersistentFlags().StringVarP(
		&db,
		"db",
		"d",
		"",
		"Url to connect to the database",
	)

	command.MarkFlagRequired("db")

	command.AddCommand(
		createCmd,
		getCmd,
	)

	return command
}

具有多个私钥/公钥对的 JWT

【中文标题】具有多个私钥/公钥对的 JWT【英文标题】:JWT with multiple private/public keys pairs 【发布时间】:2018-12-14 19:47:03 【问题描述】:

我正在实现类似于:https://login.microsoftonline.com/common/discovery/v2.0/keys

生成和验证 JWT 令牌的 Spring Boot JWT 应用程序。 我将生成许多公钥/私钥(我不想用一个密钥生成所有令牌。一对密钥将生成寿命较短的令牌,第二对将生成更长的......) 我将使用公钥创建端点 /keys。问题是:如何在我的应用程序中将正确的公钥与私钥连接起来进行验证?

第二个:如何生成像上面这样的密钥(使用像 kty":"RSA","use":"sig", child...这样的字段)有什么模式可以做到吗?

【问题讨论】:

【参考方案1】:

如何生成像上面这样的键(带有 "kty": "RSA""use": "sig""kid"...等字段)有什么模式可以做到吗?

这是一个称为 JSON Web Key (JWK) 的标准,在 RFC 7517 中定义,它定义了一个表示 JSON 中的加密密钥的数据结构。

在 Java 中,您可以使用 Nimbus JOSE + JWT,它支持带有 RSA 密钥的 JWK。


如何在我的应用程序中连接正确的公钥和私钥来验证它?

您可以在您的令牌中使用kid 标头声明:这是一个可选的标头声明,其中包含一个密钥标识符,当您有多个密钥来签署令牌并且您需要查找正确的密钥以进行验证时特别有用签名。

一旦签名的 JWT 是 JWS,请考虑来自 RFC 7515 的定义:

4.1.4. "kid" (Key ID) Header Parameter

kid (key ID) Header Parameter 是指示哪个键的提示 用于保护 JWS。此参数允许发起人 明确地向接收者发出密钥更改的信号。的结构 kid 值未指定。它的值必须区分大小写 细绳。此标头参数的使用是可选的。

与 JWK 一起使用时,kid 值用于匹配 JWK kid 参数值。

【讨论】:

感谢您非常准确的回复!将密钥存储在服务器上的最佳做法是什么?我不必将它放在远程存储库中 谢谢,现在我知道如何安全地存储文件了。但我不确定如何准确存储密钥。我的想法-> 生成(通过 keygen、openssl 或类似的东西)一些密钥对。所以我将有一些条目的文件:1.条目类型:PrivateKeyEntry,证书链长度:3.证书 [1]:所有者:所有者, Issuer: issuer.. etc. 那么如何存储呢?编码为base64并存储在txt文件中? @michf 这超出了原始问题的范围。请提出一个新问题。

以上是关于golang 用于生成凭证密钥对的App命令的主要内容,如果未能解决你的问题,请参考以下文章

golang Golang RSA密钥生成

golang Golang RSA密钥生成

jenkins配置凭证使用ssh密钥方式拉取gitlab代码

openssl生成ssl证书

如何通过命令行将 CSR 回复导入我的密钥对?

具有多个私钥/公钥对的 JWT