【问题标题】:AWS cognito public key certificateAWS cognito 公钥证书
【发布时间】:2019-03-17 21:09:59
【问题描述】:

我需要 Amazon cognito 使用的公钥证书,以便我的 Web 应用程序可以验证 cognito JWT。 无论如何要获得公钥证书还是必须使用 cognito SDK 来实现这一点?

【问题讨论】:

    标签: amazon-web-services certificate amazon-cognito public-key


    【解决方案1】:

    Cognito JWK 上没有证书链。可在此处找到您的 Cognito 的公共 JWK:

    https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

    您可以使用 https://www.npmjs.com/package/jwk-to-pem 等库将 JWK 解码为 PEM 公钥格式

    var jwkToPem = require('jwk-to-pem');
    
    var jwk = JWK_FROM_URL,
        pem = jwkToPem(jwk);
    

    或者您可以使用https://github.com/cisco/node-jose 之类的方式进行完整验证

    jose.JWK.asKey(keys[key_index])
      .then(result => jose.JWS.createVerify(result).verify)
      .then(result => JSON.parse(result.payload))
    

    这里有解码 Cognito JWT 的详细指南 https://aws.amazon.com/premiumsupport/knowledge-center/decode-verify-cognito-json-token/,这里有一个在 Cognito JWT 上使用 jose 的示例:https://github.com/awslabs/aws-support-tools/blob/master/Cognito/decode-verify-jwt/decode-verify-jwt.js

    【讨论】:

    • 但是您无法从该站点获得证书,它只会为您提供具有模数和指数的 JWK。我想要这种形式的证书: -----BEGIN CERTIFICATE----- ...... -----END CERTIFICATE-----。在 AWS 支持指南上找不到解决方案。
    • 我已经充实了我的例子,没有证书,只有一个公钥,可以解码成 PEM 格式(你可以在这里自己在线测试:8gwifi.org/jwkconvertfunctions.jsp)。请参阅security.stackexchange.com/questions/54257/…,了解有关 AWS 可能不使用证书的原因
    【解决方案2】:

    没有可用的直接选项,但您可以在 openSSL 中解决问题,

    1. 使用可用的私钥生成私钥并生成证书签名请求 (CSR)。两者都可以在一行中完成
    openssl req -new -newkey rsa:2048 -nodes -keyout PrivateKey_FileName.key -out CSR_FileName.csr
    
    1. 将来自 cognito 的 PublicKey 保存为 .pem 格式。您可以使用在线工具 https://8gwifi.org/jwkconvertfunctions.jsp 将 jwk 转换为 .pem。

    2. 使用生成的私钥对 CSR 进行自签名,并强制 CA 包含以 .pem 格式保存的自定义公钥,以创建证书替换生成 CSR 请求时可用的任何公钥,使用以下命令。

    openssl x509 -req -days 1200 -in CSR_FileName.csr -force_pubkey cognito_publicKeyFileName.pem -signkey PrivateKey_FileName.key -out export_certificate_FileName.crt
    
    1. Boom..您已使用来自 cognito 的公钥创建了 x509 证书

    【讨论】:

      【解决方案3】:

      使用 AWS CLI 获取 Cognito 的公共 x509 证书的内容,使用此处记录的 CLI 调用:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cognito-idp/get-signing-certificate.html。下面打印了一个示例输出。

      MIICdzCCAeCgAwIBAgIGANc+Ha2wMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNVBAYT
      AlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMQwwCgYDVQQLEwNBV1MxITAfBgNVBAMT
      GEFXUyBMaW1pdGVkLUFzc3VyYW5jZSBDQTAeFw0wOTAyMDQxNzE5MjdaFw0xMDAy
      MDQxNzE5MjdaMFIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMRcw
      FQYDVQQLEw5BV1MtRGV2ZWxvcGVyczEVMBMGA1UEAxMMNTdxNDl0c3ZwYjRtMIGf
      MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpB/vsOwmT/O0td1RqzKjttSBaPjbr
      dqwNe9BrOyB08fw2+Ch5oonZYXfGUrT6mkYXH5fQot9HvASrzAKHO596FdJA6DmL
      ywdWe1Oggk7zFSXO1Xv+3vPrJtaYxYo3eRIp7w80PMkiOv6M0XK8ubcTouODeJbf
      suDqcLnLDxwsvwIDAQABo1cwVTAOBgNVHQ8BAf8EBAMCBaAwFgYDVR0lAQH/BAww
      CgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQULGNaBphBumaKbDRK
      CAi0mH8B3mowDQYJKoZIhvcNAQEFBQADgYEAuKxhkXaCLGcqDuweKtO/AEw9ZePH
      wr0XqsaIK2HZboqruebXEGsojK4Ks0WzwgrEynuHJwTn760xe39rSqXWIOGrOBaX
      wFpWHVjTFMKk+tSDG1lssLHyYWWdFFU4AnejRGORJYNaRHgVTKjHphc5jEhHm0BX
      AEaHzTpmEXAMPLE=
      
      

      在这些内容前面加上 -----BEGIN CERTIFICATE----- 并在它们后面加上 -----END CERTIFICATE-----。最终结果将如下所示:

       -----BEGIN CERTIFICATE-----
      MIICdzCCAeCgAwIBAgIGANc+Ha2wMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNVBAYT
      AlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMQwwCgYDVQQLEwNBV1MxITAfBgNVBAMT
      GEFXUyBMaW1pdGVkLUFzc3VyYW5jZSBDQTAeFw0wOTAyMDQxNzE5MjdaFw0xMDAy
      MDQxNzE5MjdaMFIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMRcw
      FQYDVQQLEw5BV1MtRGV2ZWxvcGVyczEVMBMGA1UEAxMMNTdxNDl0c3ZwYjRtMIGf
      MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpB/vsOwmT/O0td1RqzKjttSBaPjbr
      dqwNe9BrOyB08fw2+Ch5oonZYXfGUrT6mkYXH5fQot9HvASrzAKHO596FdJA6DmL
      ywdWe1Oggk7zFSXO1Xv+3vPrJtaYxYo3eRIp7w80PMkiOv6M0XK8ubcTouODeJbf
      suDqcLnLDxwsvwIDAQABo1cwVTAOBgNVHQ8BAf8EBAMCBaAwFgYDVR0lAQH/BAww
      CgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQULGNaBphBumaKbDRK
      CAi0mH8B3mowDQYJKoZIhvcNAQEFBQADgYEAuKxhkXaCLGcqDuweKtO/AEw9ZePH
      wr0XqsaIK2HZboqruebXEGsojK4Ks0WzwgrEynuHJwTn760xe39rSqXWIOGrOBaX
      wFpWHVjTFMKk+tSDG1lssLHyYWWdFFU4AnejRGORJYNaRHgVTKjHphc5jEhHm0BX
      AEaHzTpmEXAMPLE=                      
      -----END CERTIFICATE-----
      

      将这些内容保存到file: Cognito.crt。此文件包含 Cognito 的签名 x509 公共证书。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2022-10-05
        相关资源
        最近更新 更多