1. API Key생성하기
아래 링크참조
2. Java SDK로 Vault Key 사용하여 Data암호화하기
> Maven Dependency
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-encryption</artifactId>
</dependency>
> Java Code
/* Vault를 사용하기 위한 Client객체 생성
* - KmsVaultClient: Client에서 Vault정보를 접근
* - KmsManagementClient: Client에서 Vault에 대한 관리작업 수행
* - KmsCryptoClient: Client에서 암호화작업수행
*/
KmsVaultClient kmsVaultClient = new KmsVaultClient(provider);
kmsVaultClient.setRegion(Region.AP_SEOUL_1);
KmsManagementClient kmsManagementClient = new KmsManagementClient(provider);
KmsCryptoClient kmsCryptoClient = new KmsCryptoClient(provider);
// Vault객체
Vault vault = getVaultTest(kmsVaultClient, vaultId);
// Vault의 ManagementEndpoint와 CryptEndpoint설정
kmsManagementClient.setEndpoint(vault.getManagementEndpoint());
kmsCryptoClient.setEndpoint(vault.getCryptoEndpoint());
/* 암호화 수행 */
String plaintext = "I love OCI!";
// 암호화를 수행하기 위햔 Detail Data에 대한 정보설정
EncryptDataDetails encryptDataDetails =
EncryptDataDetails.builder()
.keyId(keyId)
.plaintext(Base64.getEncoder().encodeToString(plaintext.getBytes()))
.build();
// 암호화를 요청할 Request객체 생성
EncryptRequest encryptRequest = EncryptRequest.builder().encryptDataDetails(encryptDataDetails).build();
EncryptResponse response = kmsCryptoClient.encrypt(encryptRequest);
// 암호화된Text에 Data Key에 대한 정보가 포함되어 있다.
System.out.println("Ciphertext: " + response.getEncryptedData().getCiphertext());
/* 복호화 수행 */
DecryptDataDetails decryptDataDetails =
DecryptDataDetails.builder()
.ciphertext(cipherText)
.keyId(keyId)
.build();
DecryptRequest decryptRequest = DecryptRequest.builder().decryptDataDetails(decryptDataDetails).build();
DecryptResponse response = kmsCryptoClient.decrypt(decryptRequest);
String plainText = response.getDecryptedData().getPlaintext();
plainText = new String(Base64.getDecoder().decode(plainText.getBytes()), StandardCharsets.UTF_8);
System.out.println("Plaintext: " + plainText);
/* sign 수행 */
// MEK가 비공개키로 생성되어야 한다
// 개인키와 공개키를 OCI에서 가지고 있기 때문에 OCI에서 전송한 것을 부인방지하는데 사용될 수 있다.
SignDataDetails sd = SignDataDetails
.builder()
.keyId(keyId)
.signingAlgorithm(SigningAlgorithm.Sha256RsaPkcs1V15)
.message(Base64.getEncoder().encodeToString(plaintext.getBytes()))
.build();
SignRequest signRequest = SignRequest.builder().signDataDetails(sd).build();
SignResponse response = kmsCryptoClient.sign(signRequest);
System.out.println("SignedData: " + response.getSignedData().getSignature());
/* verify 수행 */
VerifyDataDetails vd = VerifyDataDetails
.builder()
.keyId(keyId)
.signingAlgorithm(SigningAlgorithm.Sha256RsaPkcs1V15)
.message(Base64.getEncoder().encodeToString(plaintext.getBytes()))
.signature(signature)
.build();
VerifyRequest verifyRequest = VerifyRequest.builder().verifyDataDetails(vd).build();
VerifyResponse response = kmsCryptoClient.verify(verifyRequest);
System.out.println("SignatureValid: " + response.getVerifiedData().getIsSignatureValid());
작성자: 손창호(primelyson@gmail.com) / Cloud Engineer, 정보시스템감리사, DAP, PIA
개인의 시간을 할애하여 작성된 글로서 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다..
'6. 보안 Security' 카테고리의 다른 글
Data보안을 위한 DBMS_RLS활용 (0) | 2022.12.14 |
---|---|
OCI Certificates Service - 로드밸런서에 무료 SSL 구성하기 (0) | 2022.10.04 |
Vault Secret 정보 Java SDK로 가져오기 (0) | 2022.09.26 |
DBCS with Vault (0) | 2022.09.22 |
Block Volume with Vault (0) | 2022.09.22 |
댓글