Traga sua própria autoridade de certificação (BYOCA) - AWS Criptografia de pagamento

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Traga sua própria autoridade de certificação (BYOCA)

Por padrão, quando um certificado de chave pública é necessário para chaves assimétricas (RSA, ECC) criadas no serviço, esses certificados são emitidos por uma autoridade de certificação (CA) exclusiva da conta e de criptografia de AWS pagamento. O objetivo é simplificar o uso do X.509 sem o ônus de identificar ou configurar uma CA ou gerenciar solicitações de assinatura de certificado (CSR).

AWS A criptografia de pagamento também oferece a capacidade de usar sua própria CA quando necessário por motivos de política ou conformidade.

Visão geral do

O recurso BYOCA permite que você use sua própria Autoridade de Certificação em qualquer lugar em que os certificados sejam usados, incluindo importação/exportação TR-34, RSA Unwrap e transferências de chaves baseadas em ECDH. Isso é útil quando você precisa manter uma cadeia de certificados consistente em toda a organização ou ao trabalhar com parceiros que exigem certificados de CA específicos. O exemplo a seguir demonstra o fluxo de trabalho BYOCA usando a exportação de chaves TR-34.

As três principais diferenças em relação ao fluxo de exportação padrão do TR-34 são:

  1. A chave RSA de assinatura é criada explicitamente usando. CreateKey Anteriormente, ele foi criado implicitamente via GetParametersForExport.

  2. Uma nova API GetCertificateSigningRequestcria uma Solicitação de Assinatura de Certificado (CSR) que pode ser assinada por sua CA externa.

  3. A ExportKeyAPI é estendida para permitir que um certificado seja fornecido em tempo de execução. Anteriormente, isso era fornecido implicitamente porimport-token, o que se torna um campo opcional.

Considerações importantes
  • Esses exemplos usam chaves RSA-2048 e envolvem uma chave TDES-2KEY. Ao exportar o AES-128, verifique se todas as chaves são RSA-3072 ou RSA-4096.

  • O erro mais comum é que a chave representada por SigningKeyIdentifier e SigningKeyCertificate não coincide.

Fluxo de trabalho BYOCA

As etapas a seguir demonstram o fluxo de trabalho completo do BYOCA para exportação do TR-34.

Etapa 1: Criar chave RSA

Primeiro, crie um par de chaves RSA que, em última análise, será o certificado de assinatura KDH. Você pode adicionar tags para identificar a finalidade da chave.

exemplo Criar chave RSA para assinatura
$ aws payment-cryptography create-key --exportable \ --key-attributes KeyAlgorithm=RSA_2048,KeyUsage=TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{Sign=True}'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc", "KeyAttributes": { "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE", "KeyClass": "ASYMMETRIC_KEY_PAIR", "KeyAlgorithm": "RSA_2048", "KeyModesOfUse": { "Sign": true } }, "KeyCheckValue": "41E3723C", "KeyCheckValueAlgorithm": "SHA_1", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY" } }

Anote o KeyArn que você precisará na próxima etapa.

Etapa 2: gerar solicitação de assinatura de certificado

Gere uma Solicitação de Assinatura de Certificado (CSR) para ser assinada por sua CA externa usando a GetCertificateSigningRequestAPI. A saída é um arquivo PEM codificado em base64. Se você decodificar o conteúdo em base64 e salvá-lo, você terá um CSR válido no formato PEM.

exemplo Gerar CSR
$ aws payment-cryptography-data get-certificate-signing-request \ --key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc \ --signing-algorithm SHA512 \ --certificate-subject '{ "CommonName": "MyCertificateAWSUSEAST", "Organization": "Amazon", "OrganizationUnit": "PaymentCryptography", "Country": "US", "StateOrProvince": "Virginia", "City": "Arlington" }'
{ "CertificateSigningRequest": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." }

O CertificateSigningRequest campo contém a CSR codificada em base64 que você enviará à sua CA para assinatura.

Etapa 3: revisar a CSR (opcional)

Opcionalmente, você pode usar o OpenSSL para revisar o conteúdo do CSR e garantir que ele seja válido e conforme o esperado.

exemplo Analise a CSR com o OpenSSL
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text

Etapa 4: Assine o CSR com uma autoridade de certificação

Depois de gerar a CSR, você precisa assiná-la por uma Autoridade Certificadora (CA). Em ambientes de produção, você normalmente CA privada da AWS usaria a infraestrutura de CA estabelecida pela sua organização. Para fins de teste, você pode usar o OpenSSL para criar um certificado autoassinado.

Usando CA privada da AWS

Para assinar a CSR usando CA privada da AWS, primeiro decodifique a CSR codificada em base64 e salve-a em um arquivo e, em seguida, use a API. IssueCertificate

exemplo Assine CSR com CA Privada da AWS
$ echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem $ aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --csr fileb://csr.pem \ --signing-algorithm SHA256WITHRSA \ --validity Value=365,Type=DAYS
{ "CertificateArn": "arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890" }

Em seguida, recupere o certificado assinado:

exemplo Recuperar certificado assinado
$ aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012 \ --certificate-arn arn:aws:acm-pca:us-east-1:111122223333:certificate-authority/12345678-1234-1234-1234-123456789012/certificate/abcdef1234567890
{ "Certificate": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----", "CertificateChain": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----" }

Salve o conteúdo do certificado para uso na etapa de exportação. Você precisará codificá-lo em base64 ao fornecê-lo à API. ExportKey

Usando o OpenSSL para testes

Para fins de teste, você pode usar o OpenSSL para criar uma CA autoassinada e assinar a CSR. Primeiro, crie uma chave privada da CA e um certificado autoassinado:

exemplo Crie um CA de teste com OpenSSL
$ # Generate CA private key openssl genrsa -out ca-key.pem 4096 $ # Create self-signed CA certificate openssl req -new -x509 -days 3650 -key ca-key.pem -out ca-cert.pem \ -subj "/C=US/ST=Virginia/L=Arlington/O=TestOrg/CN=Test CA"

Em seguida, decodifique a CSR da etapa anterior e assine-a com sua CA de teste:

exemplo Assine CSR com OpenSSL
$ # Decode the base64-encoded CSR echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d > csr.pem $ # Sign the CSR with the CA openssl x509 -req -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem \ -CAcreateserial -out signed-cert.pem -days 365 -sha512
Certificate request self-signature ok subject=C=US, ST=Virginia, L=Arlington, O=Amazon, OU=PaymentCryptography, CN=MyCertificateAWSUSEAST

O certificado assinado está agora disponívelsigned-cert.pem. Você precisará codificar esse certificado em base64 ao fornecê-lo à API: ExportKey

exemplo Codifique o certificado assinado em Base64
$ cat signed-cert.pem | base64 -w 0

Etapa 5: Importar certificado CA

Qualquer CA usada precisa ser confiável primeiro para evitar que certificados arbitrários sejam usados. Importe o certificado raiz da sua CA externa usando a ImportKeyAPI. Se estiver usando uma CA intermediária, chame import-key novamente, mas especifique TrustedPublicKey em vez RootCertificatePublicKey de especificar o ARN raiz da CA.

exemplo Importar certificado CA raiz
$ aws payment-cryptography import-key --key-material='{ "RootCertificatePublicKey": { "KeyAttributes": { "KeyAlgorithm": "RSA_4096", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Verify": true }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." } }'
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xivpaqy7qbbm7cdw", "KeyAttributes": { "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE", "KeyClass": "PUBLIC_KEY", "KeyAlgorithm": "RSA_4096", "KeyModesOfUse": { "Verify": true } }, "Enabled": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "EXTERNAL" } }

Anote as CAs KeyArn para uso na etapa de exportação.

Etapa 6: Obter o certificado de criptografia KRD

Neste exemplo, estamos importando de volta para a criptografia de AWS pagamento, então ligamos para o serviço para receber um certificado de chave pública KRD usando a API. GetParametersForImport Em um cenário real, isso seria fornecido por outro sistema, como um HSM, um caixa eletrônico, um terminal de pagamento ou sistema de gerenciamento de terminal de pagamento.

exemplo Obter parâmetros a serem importados
$ aws payment-cryptography-data get-parameters-for-import \ --key-material-type "TR34_KEY_BLOCK" \ --wrapping-key-algorithm RSA_2048
{ "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "WrappingKeyAlgorithm": "RSA_2048", "ImportToken": "import-token-v2rxpl6drxeptn7w", "ParametersValidUntilTimestamp": "2025-11-01T18:45:31.271000-07:00" }

Etapa 7: Exportar chave com BYOCA

Por fim, exporte a chave usando o TR-34 com seu próprio certificado assinado pela CA usando a API. ExportKey Forneça o certificado de assinatura que foi assinado pela sua CA externa.

exemplo Exportação do TR-34 com BYOCA
$ aws payment-cryptography-data export-key \ --export-key-identifier arn:aws:payment-cryptography:us-east-1:111122223333:key/iox73p5f4c4yjiod \ --key-material '{ "Tr34KeyBlock": { "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/j625deyfqlwctu57", "SigningKeyIdentifier": "arn:aws:payment-cryptography:us-east-1:111122223333:key/xgmq6fs6uow736uc", "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...", "KeyBlockFormat": "X9_TR34_2012", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..." } }'
{ "WrappedKey": { "WrappedKeyMaterialFormat": "TR34_KEY_BLOCK", "KeyMaterial": "3082055A06092A864886F70D010702A082054B30820547...", "KeyCheckValue": "3DCA31", "KeyCheckValueAlgorithm": "ANSI_X9_24" } }

O bloco de chaves exportado agora pode ser importado pelo sistema receptor usando o processo de importação padrão TR-34.

Notas adicionais

  • Esses exemplos são mostrados usando a AWS CLI. A mesma funcionalidade está disponível em toda a AWS, SDKs incluindo Java, Python, Go e Rust.

  • Se você estiver testando com uma CA autoassinada, poderá usar o OpenSSL para criar uma CA de teste e assinar a CSR. Na produção, use a infraestrutura de CA estabelecida pela sua organização.