AWS KMS

Documentação AWS:

KMS:

https://docs.aws.amazon.com/cli/latest/reference/kms/index.htmlarrow-up-right

Geração da chave:

https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.htmlarrow-up-right

Obter chave pública:

https://docs.aws.amazon.com/cli/latest/reference/kms/get-public-key.htmlarrow-up-right

Assinatura:

https://docs.aws.amazon.com/cli/latest/reference/kms/sign.htmlarrow-up-right

Chave privada

Gerar chave RSA 2048 bits:

aws kms create-key --description "cert1" --key-usage SIGN_VERIFY --customer-master-key-spec RSA_2048

Resultado esperado:

{
    "KeyMetadata": {
    "AWSAccountId": "<ID da conta AWS>" ,
    "KeyId": "<ID da chave>" ,
    "Arn": "arn:aws:kms: <regiao>:<ID da conta AWS>:key/<ID da chave>",
    "CreationDate": 1654625481.9,
    "Enabled": true,
    "Description": "cert1",
    "KeyUsage": "SIGN_VERIFY",
    "KeyState": "Enabled",
    "Origin": "AWS_KMS",
    "KeyManager": "CUSTOMER",
    "CustomerMasterKeySpec": "RSA_2048",
    "SigningAlgorithms": [
        "RSASSA_PKCS1_V1_5_SHA_256",
        "RSASSA_PKCS1_V1_5_SHA_384",
        "RSASSA_PKCS1_V1_5_SHA_512",
        "RSASSA_PSS_SHA_256",
        "RSASSA_PSS_SHA_384",
        "RSASSA_PSS_SHA_512"
    ]
  }
}

Assinar termo digital

AWS KMS espera o DIGEST puro a ser assinado, então é preciso extrair essa informação a partir da estrutura PKCS#1 do arquivo digitalterm_hash.bin

Extrair o hash/digest puro do PKCS#1:

Resultado esperado:

Salve o HEX DUMP em um arquivo hash.hex e depois converta de hexadecimal para binário hash.bin

Assinar usando chave privada AWS KMS:

Requisição (CSR)

Gere o CSR na sua aplicação, que fará uso da chave no AWS KMS.

Se a aplicação não der suporte à geração do CSR, gere um CSR no OpenSSL com uma chave qualquer (RSA 2048). Então substitua no CSR a chave pública inserindo a do AWS KMS, e faça nova assinatura do CSR usando a chave privada no AWS KMS.

Essa é uma operação complexa. Recomendamos o uso de um script que faça esse trabalho, como o disponível neste repositório: https://github.com/g-a-d/aws-kms-sign-csrarrow-up-right

circle-exclamation

Mas se preferir o método manual, alguns comandos que podem ser úteis no processo:

Obter a chave pública:

Converta de base64 para formato DER:

Faça a conversão para o formato esperado pelo OpenSSL:

Assinar usando chave privada AWS KMS:

Last updated