首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用x5c和x5t参数创建JWK密钥

使用x5c和x5t参数创建JWK密钥
EN

Stack Overflow用户
提问于 2021-09-14 14:39:56
回答 1查看 5.7K关注 0票数 7

我需要生成一个具有以下参数的JWK:

  • “kty”:键类型
  • “孩子”:关键身份
  • “使用”:“sig”公钥使用
  • “n”:模量
  • “e”:“AQAB”公众指数
  • “x5c”:X.509证书链
  • “x5t”:X.509证书SHA-1指纹

注意:

  • JWK应该包含一个使用RSA算法的公钥。RSA为密钥匹配提供了一个密钥ID。
  • 应该包含使用“x5t”(X.509 SHA-1拇指指纹)和“x5c”(X.509证书链)参数的X.509证书。

前5个参数("kty“、”fairly“、"use”、"n“、"e")是相当直接的,而不是一个问题。但是,对于"x5c“和"x5t”组件,我不知道如何生成这些组件。我似乎可以使用诸如在x509中找到的工具创建一个x509证书,并且我认为在那里生成的x509证书将包含x5c参数。这是正确的吗?我将如何从它生成一个x5t (cert拇指指纹)?

所有的帮助都是感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-18 06:50:57

由于您既没有工具,也没有标记的语言,我认为这是对这两个参数的一般性解释。

在x5c中存储证书或证书链,在x5t中存储关联的拇指指纹。证书证书链用于证明公钥的所有权,拇指纹是用于标识/比较证书的证书的散列。

这两个参数的确切定义载于RFC 7517,JSON Web Key (JWK)4.7 x5c4.8 x5t两章。

  • x5c:

"x5c“(X.509证书链)参数包含一个或多个PKIX证书RFC5280链。证书链表示为证书值字符串的JSON数组。数组中的每个字符串都是ITU.X690.1994PKIX证书值中的base64 64编码的( RFC4648的第4节--而不是base64 64 not编码的)。包含键值的PKIX证书必须是第一个证书。这之后可能会有额外的证书,每个后续的证书都是用来验证上一个证书的证书。第一个证书中的密钥必须与JWK的其他成员表示的公钥匹配。这个成员的使用是可选的..。

  • x5t:

"x5t“(X.509证书SHA-1拇指指纹)参数是一个a.k.a 64url编码的SHA-1拇指指纹(a.k.a )。(摘要) X.509证书RFC5280的DER编码。请注意,证书拇指指纹有时也称为证书指纹。证书中的密钥必须与JWK的其他成员表示的公钥匹配。使用此成员是可选的。

证书的创建:

还可以生成自签名证书(除了您使用的在线工具),例如使用OpenSSL。以下OpenSSL语句

代码语言:javascript
复制
openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.crt -days 365

以PKCS#8格式(key.pem)生成私有(未加密) PEM编码的4096位密钥:

代码语言:javascript
复制
-----BEGIN PRIVATE KEY-----
MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDkWIfV9uL3XMay
...
OPAsywknGU1A/xTa3fFKO9KV6t/T9z3G
-----END PRIVATE KEY-----

和PEM编码证书(cert.crt):

代码语言:javascript
复制
-----BEGIN CERTIFICATE-----
MIIF4zCCA8ugAwIBAgIJAKSZ5oC4tblkMA0GCSqGSIb3DQEBCwUAMIGHMQswCQYD
...
6aBMYeKy0dqjtZIlO8rm2Rialc7Qt+0=
-----END CERTIFICATE-----

有关更多选项和详细信息,请参见https://www.openssl.org/docs/man1.1.1/man1/openssl-req.html和post https://stackoverflow.com/q/10175812/9014097

请注意,自签名证书由所有者签名。自签名证书用于内部页面或测试环境中。相反,CA签名证书是由第三方、公众信任的证书颁发机构(CA) (如DigiCert或Thawte等)签署的,例如用于面向公众的网站,s.也是这里。使用企业社会责任请求签名的证书。

证书、证书链、证书颁发机构等是公钥基础设施的一部分。

示例使用x5c:

在RFC 7517的附录B中,给出了x5c参数的使用实例。DER编码的证书是Base64编码的,包含在JSON数组中:

代码语言:javascript
复制
{
    "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解码器编码证书是PEM编码证书的主体,没有换行。

对于证书链,证书用逗号分隔,参见例如RFC 7515,附录B,x5c

Thumbprint/Fingerprint:

证书的缩略图是DER编码证书的SHA-1散列,它可以用OpenSSL生成,如下所示,s.也是这里

代码语言:javascript
复制
openssl x509 -in cert.crt -noout -fingerprint

这里,cert.crt是PEM编码的证书。有关更多细节,请参见https://www.openssl.org/docs/man1.1.1/man1/x509.html

示例:如果使用来自RFC 7517的附录B的证书,则OpenSSL语句将返回以下输出:

代码语言:javascript
复制
SHA1 Fingerprint=E2:93:5E:9C:40:4B:BF:42:69:2C:87:6E:81:6C:50:90:EB:19:70:AD

也就是说,十六进制编码的拇指指纹是: E2935E9C404BBF42692C876E816C5090EB1970AD或Base64url编码:4pNenEBLv0JpLIdugWxQkOsZcK 0。后者是x5t的值。

代码语言:javascript
复制
"x5t":"4pNenEBLv0JpLIdugWxQkOsZcK0"
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69179822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档