我需要生成一个具有以下参数的JWK:
>
“kty”:键类型
“孩子”:密钥标识
“使用”:“sig”公钥使用
“n”:模数
“e”:“AQAB”公众指数
"x5c": X.509证书链
“x5t”:X.509证书SHA-1指纹
注:
>
应包含使用“x5t”(X.509 SHA-1指纹)和“x5c”(X.509证书链)参数的X.509证书
前5个参数(kty,孩子,使用,n,e)相当简单,不是问题。然而,对于“x5c”和“x5t”组件,我不确定如何生成这些。似乎我可以创建一个x509证书使用的工具,如在https://www.samltool.com/self_signed_certs.php找到的,我想生成的x509证书将是x5c参数。这是正确的,我将如何生成一个x5t(证书指纹)从这?
感谢所有的帮助。
由于您既没有标记工具也没有标记语言,因此我假设这是对这两个参数的一般性解释。
在x5c中,证书或证书链存储在x5t中,以及相关的指纹。证书或证书链用于证明公钥的所有权,指纹是用于标识/比较证书的证书哈希。
RFC 7517、JSON Web密钥(JWK)、第4.7章x5c和第4.8章x5t中描述了这两个参数的确切定义:
“x5c”(X.509证书链)参数包含一个或多个PKIX证书的链[RFC5280]。证书链表示为证书值字符串的JSON数组。数组中的每个字符串都是[ITU.X690.1994]PKIX证书值下的base64编码(RFC4648的第4节——非base64url编码)。包含密钥值的PKIX证书必须是第一个证书。随后可能会有其他证书,每个后续证书都是用于认证前一个证书的证书。第一个证书中的密钥必须与JWK的其他成员表示的公钥匹配。此成员的使用是可选的。。。
“x5t”(X.509证书SHA-1指纹)参数是X.509证书[RFC5280]的DER编码的base64url编码SHA-1指纹(也称为摘要)。请注意,证书指纹有时也称为证书指纹。证书中的密钥必须与JWK的其他成员表示的公钥匹配。此成员的使用是可选的。
创建证书:
还可以生成自签名证书(您使用的在线工具除外),例如使用OpenSSL。下面是OpenSSL语句
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.crt -days 365
生成PKCS#8格式(key.PEM)的私有(未加密)PEM编码4096位密钥:
-----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDkWIfV9uL3XMay
...
OPAsywknGU1A/xTa3fFKO9KV6t/T9z3G
-----END PRIVATE KEY-----
和PEM编码证书(cert.crt):
-----BEGIN CERTIFICATE-----
MIIF4zCCA8ugAwIBAgIJAKSZ5oC4tblkMA0GCSqGSIb3DQEBCwUAMIGHMQswCQYD
...
6aBMYeKy0dqjtZIlO8rm2Rialc7Qt+0=
-----END CERTIFICATE-----
有关更多选项和详细信息,请参阅openssl req和如何使用openssl?生成自签名SSL证书的文章?。
请注意,自签名证书由所有者签名。自签名证书用于内部页面或测试环境中。相比之下,CA签署的证书由第三方、公众信任的证书颁发机构(CA)签署,如DigiCert或Thawte等。例如,用于面向公众的网站,这里也有。使用CSR请求已签名的证书。
证书、证书链、证书颁发机构等是公钥架构体系的一部分。
x5c的使用示例:
在RFC 7517的附录B中,给出了使用x5c参数的示例。DER编码的证书是Base64编码的,包含在JSON数组中:
{
"kty":"RSA",
"use":"sig",
"kid":"1b94c",
"n":"vrjOfz9Ccdgx5nQudyhdoR17V-IubWMeOZCwX_jj0hgAsz2J_pqYW08
PLbK_PdiVGKPrqzmDIsLI7sA25VEnHU1uCLNwBuUiCO11_-7dYbsr4iJmG0Q
u2j8DsVyT1azpJC_NG84Ty5KKthuCaPod7iI7w0LK9orSMhBEwwZDCxTWq4a
YWAchc8t-emd9qOvWtVMDC2BXksRngh6X5bUYLy6AyHKvj-nUy1wgzjYQDwH
MTplCoLtU-o-8SNnZ1tmRoGE9uJkBLdh5gFENabWnU5m1ZqZPdwS-qo-meMv
VfJb6jJVWRpl2SUtCnYG2C32qvbWbjZ_jBPD5eunqsIo1vQ",
"e":"AQAB",
"x5c":
["MIIDQjCCAiqgAwIBAgIGATz/FuLiMA0GCSqGSIb3DQEBBQUAMGIxCzAJB
gNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYD
VQQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1
wYmVsbDAeFw0xMzAyMjEyMzI5MTVaFw0xODA4MTQyMjI5MTVaMGIxCzAJBg
NVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UEBxMGRGVudmVyMRwwGgYDV
QQKExNQaW5nIElkZW50aXR5IENvcnAuMRcwFQYDVQQDEw5CcmlhbiBDYW1w
YmVsbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL64zn8/QnH
YMeZ0LncoXaEde1fiLm1jHjmQsF/449IYALM9if6amFtPDy2yvz3YlRij66
s5gyLCyO7ANuVRJx1NbgizcAblIgjtdf/u3WG7K+IiZhtELto/A7Fck9Ws6
SQvzRvOE8uSirYbgmj6He4iO8NCyvaK0jIQRMMGQwsU1quGmFgHIXPLfnpn
fajr1rVTAwtgV5LEZ4Iel+W1GC8ugMhyr4/p1MtcIM42EA8BzE6ZQqC7VPq
PvEjZ2dbZkaBhPbiZAS3YeYBRDWm1p1OZtWamT3cEvqqPpnjL1XyW+oyVVk
aZdklLQp2Btgt9qr21m42f4wTw+Xrp6rCKNb0CAwEAATANBgkqhkiG9w0BA
QUFAAOCAQEAh8zGlfSlcI0o3rYDPBB07aXNswb4ECNIKG0CETTUxmXl9KUL
+9gGlqCz5iWLOgWsnrcKcY0vXPG9J1r9AqBNTqNgHq2G03X09266X5CpOe1
zFo+Owb1zxtp3PehFdfQJ610CDLEaS9V9Rqp17hCyybEpOGVwe8fnk+fbEL
2Bo3UPGrpsHzUoaGpDftmWssZkhpBJKVMJyf/RuP2SmmaIzmnw9JiSlYhzo
4tpzd5rFXhjRbg4zW9C+2qok+2+qDM1iJ684gPHMIY8aLWrdgQTxkumGmTq
gawR+N5MDtdPTEQ0XfIBc2cJEUyMTY5MPvACWpkA6SdS4xSvdXK3IVfOWA=="]
}
请注意,值中的换行符仅用于显示目的。DER编码是PEM编码的结果,通过去除页眉、页脚和换行符,Base64解码其余部分,即Base64解码的DER编码证书是没有换行符的PEM编码证书的主体。
对于证书链,证书用逗号分隔,参见例如。RFC 7515,附录B,x5c。
指纹/指纹:
证书的指纹是DER编码证书的SHA-1散列,可以使用OpenSSL生成,如下所示。同样在这里:
openssl x509 -in cert.crt -noout -fingerprint
这里cert.crt是PEM编码的证书。有关更多详细信息,请参阅openssl x509。
示例:如果使用RFC 7517附录B中的证书,OpenSSL语句将返回以下输出:
SHA1 Fingerprint=E2:93:5E:9C:40:4B:BF:42:69:2C:87:6E:81:6C:50:90:EB:19:70:AD
即十六进制编码的拇指指纹是:E2935E9C404BBF42692C876E816C5090EB1970AD或Base64url编码的:4pNenEBLv0JpLIdugWxQkOsZcK0。后者是x5t的值:
"x5t":"4pNenEBLv0JpLIdugWxQkOsZcK0"
我使用的是nimbus jose jwt 5.14,我用以下代码生成了RSA密钥对 现在我需要解释一些关于公钥的“元数据”: e 孩子 kty n 使用 x5c 如何获得x5c?是否可以使用此库生成X509证书?此字段为空:
在画布中,为了让LTI应用程序进行身份验证,站点管理员必须输入远程站点的JWK。JWK的格式定义明确: 首先,我们可以使用像openssl这样的工具,创建一个密钥,并从中生成JWK吗?目前,我们正在使用jose4j编写代码来实现这一点,但还不清楚这是否必要。 其次,Canvas需要一些可选字段,如kid、alg和use。我们猜测use应该是“sig”,我们编造了kid:“1”,猜测alg:“RS2
假设我有一个python结构,表示RSA密钥对,如下所示: 如何编写python代码来生成可用于验证使用此RSA私钥签名的JWT的JWK?使用的算法是RSA256。 这个网站mkjwk完成了我想做的事情。但我正试图用python代码来做到这一点。
我的项目正在基于构建身份验证服务。NET内核和nuget软件包。我们希望创建包含公钥证书(或证书链)的JWT令牌,该证书可用于验证JWT数字签名。这在商业身份提供者(SaaS)中是可能的,并且在JWT规范中通过称为“x5c”的头参数得到支持。但到目前为止,我无法使用。 我能够创建使用证书签名的JWT令牌。证书是使用openssl(下面包含的命令)自签名和创建的。我在C#中的测试代码如下所示: 生成
我用几个参数创建了自己的流程图块。其中两个是“代理”类型,我主要选择了相应的代理。我的块所做的是,它根据进入块的代理创建新的代理(有点像批处理块)。 到目前为止,我能够验证传入的代理,以确保在Main中选择了正确的代理类型。现在我想创建另一个带有源块和注入功能的代理。但是我的问题来了。我想根据选择的参数(类型代理)动态地创建代理。显然,在新代理字段中只输入参数的名称是行不通的(它确实有效,但只适用
本文向大家介绍JavaScript 使用rest参数创建参数数组,包括了JavaScript 使用rest参数创建参数数组的使用技巧和注意事项,需要的朋友参考一下 示例 如果您需要一个数组,其中包含您可能会或可能不会希望拥有的额外参数,除了您明确声明的参数外,还可以在参数声明内使用array rest参数,如下所示: 示例1,数组中的可选参数: 示例2,所有参数现在都是一个数组: 控制台输出tru