기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
BYOCA(Bring Your Own Certificate Authority)
기본적으로 서비스 내에서 생성된 비대칭(RSA,ECC) 키에 퍼블릭 키 인증서가 필요한 경우 이러한 인증서는 AWS Payment Cryptography 및 계정 고유 인증 기관(CA)에서 발급합니다. 이렇게 하면 CA를 식별 또는 설정하거나 인증서 서명 요청(CSR)을 관리할 필요 없이 X.509를 간단하게 사용할 수 있습니다.
AWS Payment Cryptography는 정책 또는 규정 준수 이유로 필요한 경우 자체 CA를 사용할 수 있는 기능도 제공합니다.
개요
BYOCA 기능을 사용하면 TR-34 가져오기/내보내기, RSA 언래핑, ECDH 기반 키 전송 등 인증서가 사용되는 모든 곳에서 자체 인증 기관을 사용할 수 있습니다. 이는 조직 전체에서 일관된 인증서 체인을 유지해야 하거나 특정 CA 인증서가 필요한 파트너와 협력할 때 유용합니다. 다음 예제에서는 TR-34 키 내보내기를 사용하는 BYOCA 워크플로를 보여줍니다.
표준 TR-34 내보내기 흐름과 비교한 세 가지 주요 차이점은 다음과 같습니다.
-
서명 RSA 키는 CreateKey를 사용하여 명시적으로 생성됩니다. 이전에는 GetParametersForExport를 통해 암시적으로 생성되었습니다.
-
새 API GetCertificateSigningRequest는 외부 CA에서 서명할 수 있는 인증서 서명 요청(CSR)을 생성합니다.
-
ExportKey API는 런타임에 인증서를 제공할 수 있도록 확장됩니다. 이전에는에서 이를 암시적으로 제공했으며
import-token, 이는 선택적 필드가 되었습니다.
중요 고려 사항
-
이 예제에서는 RSA-2048 키를 사용하고 TDES-2KEY 키를 래핑합니다. AES-128을 내보낼 때 모든 키가 RSA-3072 또는 RSA-4096인지 확인합니다.
-
가장 일반적인 오류는
SigningKeyIdentifier및 로 표시되는 키가 일치하지 않는다는SigningKeyCertificate것입니다.
BYOCA 워크플로
다음 단계는 TR-34 내보내기를 위한 전체 BYOCA 워크플로를 보여줍니다.
단계(Steps)
1단계: RSA 키 생성
먼저 궁극적으로 KDH 서명 인증서가 될 RSA 키 페어를 생성합니다. 태그를 추가하여 키의 목적을 식별할 수 있습니다.
예서명을 위한 RSA 키 생성
$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" } }
다음 단계에서 KeyArn 필요하므로를 기록해 둡니다.
2단계: 인증서 서명 요청 생성
GetCertificateSigningRequest API를 사용하여 외부 CA가 서명할 인증서 서명 요청(CSR)을 생성합니다. 출력은 base64로 인코딩된 PEM 파일입니다. 콘텐츠를 base64로 디코딩하고 저장하는 경우 PEM 형식의 유효한 CSR이 있습니다.
예 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..." }
CertificateSigningRequest 필드에는 서명을 위해 CA에 보낼 base64로 인코딩된 CSR이 포함되어 있습니다.
3단계: CSR 검토(선택 사항)
선택적으로 OpenSSL을 사용하여 CSR 콘텐츠를 검토하고 예상대로 유효한지 확인할 수 있습니다.
예 OpenSSL을 사용하여 CSR 검토
$echo "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0..." | base64 -d | openssl req -text
4단계: 인증 기관을 통해 CSR 서명
CSR을 생성한 후에는 인증 기관(CA)의 서명을 받아야 합니다. 프로덕션 환경에서는 일반적으로 AWS Private CA 또는 조직의 설정된 CA 인프라를 사용합니다. 테스트 목적으로 OpenSSL을 사용하여 자체 서명된 인증서를 생성할 수 있습니다.
사용 AWS Private CA
를 사용하여 CSR에 서명하려면 AWS Private CA먼저 base64로 인코딩된 CSR을 디코딩하고 파일에 저장한 다음 IssueCertificate API를 사용합니다.
예를 사용하여 CSR 서명 AWS Private CA
$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" }
그런 다음 서명된 인증서를 검색합니다.
예서명된 인증서 검색
$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-----" }
내보내기 단계에서 사용할 인증서 콘텐츠를 저장합니다. ExportKey API에 제공할 때 base64 인코딩이 필요합니다.
테스트에 OpenSSL 사용
테스트 목적으로 OpenSSL을 사용하여 자체 서명된 CA를 생성하고 CSR에 서명할 수 있습니다. 먼저 CA 프라이빗 키와 자체 서명된 인증서를 생성합니다.
예 OpenSSL을 사용하여 테스트 CA 생성
$# 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"
그런 다음 이전 단계에서 CSR을 디코딩하고 테스트 CA로 서명합니다.
예 OpenSSL을 사용하여 CSR 서명
$# 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
이제 서명된 인증서가에 있습니다signed-cert.pem. ExportKey API에 인증서를 제공할 때이 인증서를 base64로 인코딩해야 합니다.
예 Base64 서명된 인증서 인코딩
$cat signed-cert.pem | base64 -w 0
5단계: CA 인증서 가져오기
임의의 인증서가 사용되지 않도록 하려면 사용 중인 모든 CA를 먼저 신뢰해야 합니다. ImportKey API를 사용하여 외부 CA의 루트 인증서를 가져옵니다. 중간 CA를 사용하는 경우를 import-key 다시 호출하고 TrustedPublicKey 대신를 지정RootCertificatePublicKey하고 루트 CA ARN을 지정합니다.
예루트 CA 인증서 가져오기
$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" } }
내보내기 단계에서 KeyArn 사용할 CA를 기록해 둡니다.
6단계: KRD 암호화 인증서 가져오기
이 예제에서는 AWS Payment Cryptography로 다시 가져오므로 GetParametersForImport API를 사용하여 KRD 퍼블릭 키 인증서를 수신하도록 서비스를 호출합니다. 실제 시나리오에서는 HSM, ATM, 결제 터미널 또는 결제 터미널 관리 시스템과 같은 다른 시스템에서 이를 제공합니다.
예가져오기를 위한 파라미터 가져오기
$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" }
7단계: BYOCA를 사용하여 키 내보내기
마지막으로 ExportKey API를 사용하여 자체 CA 서명 인증서와 함께 TR-34를 사용하여 키를 내보냅니다. ExportKey 외부 CA에서 서명한 서명 인증서를 제공합니다.
예 BYOCA를 사용하여 TR-34 내보내기
$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" } }
이제 수신 시스템에서 표준 TR-34 가져오기 프로세스를 사용하여 내보낸 키 블록을 가져올 수 있습니다.
추가 참고 사항:
-
이 예제는 AWS CLI를 사용하여 표시됩니다. Java, Python, Go 및 Rust를 포함한 모든 AWS SDKs에서 동일한 기능을 사용할 수 있습니다.
-
자체 서명된 CA로 테스트하는 경우 OpenSSL을 사용하여 테스트 CA를 생성하고 CSR에 서명할 수 있습니다. 프로덕션 환경에서는 조직의 설정된 CA 인프라를 사용합니다.