작성
·
329
·
수정됨
0
안녕하세요. 비대칭키 암호화 강의 영상을 시청했습니다.
강의를 들으면서 keystore 폴더에 keytool을 사용하여 3가지 파일을 생성했습니다.
비공개키 파일: apiEncryptionKey.jks
인증서 파일: trustServer.cer
공개키 파일: publicKey.jks
spring cloud config 프로젝트에서 다음과 같이 코드를 작성했습니다.
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
ConfigServiceApplication.java
@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServiceApplication.class, args);
}
}
bootstrap.yml
encrypt:
# key: abcdefghijklmnopqrstuvwxyz0123456789
key-store:
location: file:///${user.home}/Desktop/keystore/apiEncryptionKey.jks
password: test1234
alias: apiEncryptionKey
강의를 다 듣고 난 후 궁금한점이 생겨서 테스트를 진행했습니다.
keystore 폴더에서 인증서 파일, 공개키 파일을 삭제했습니다.
http://127.0.0.1:8888/encrypt
http://127.0.0.1:8888/decrypt
http://localhost:8888/ecommerce/default
강의영상에 나온 위 api 호출을 다시 시도해봤습니다.
마치 대칭키 암호화 방식처럼 비공개키 하나로 암호화, 복호화를 하고 있습니다.
질문1: 인증서 파일, 공개키 파일은 언제 사용하는건지 궁금합니다.
질문2: spring cloud config 프로젝트에서 비대칭키 암호화를 사용하고 있는건지 궁금합니다.
답변 2
1
실제로 publicKey는 처음에 keytool로 생성했던 apiEncryptionKey.jks 에 포함되어있습니다.
일반적으로 비대칭 암호화에서는 공개키로 데이터를 암호화하고, 개인키로 데이터를 복호화합니다. 여기서 사용된 .jks
파일(Java KeyStore)은 여러 키와 인증서를 저장할 수 있는 저장소로, 개인키(Private Key)와 이에 대응하는 공개키(Public Key) 둘 다 포함하고 있습니다.
Spring Cloud Config와 같은 프레임워크에서 암호화 및 복호화를 할 때, 설정에 지정된 키스토어 파일(.jks
)을 사용하여 둘 다 처리할 수 있습니다. 이는 .jks
파일 내부에 개인키와 공개키 모두 포함되어 있기 때문입니다. 설정에서 지정한 키스토어 내의 개인키를 사용하여 복호화를 수행하고, 필요한 경우에는 같은 키스토어 내의 공개키를 사용하여 데이터를 암호화할 수 있습니다.
설정 파일에서 key-store
를 지정할 때, 사실상 Spring은 내부적으로 다음과 같이 작동합니다:
암호화: 애플리케이션 또는 사용자가 데이터를 암호화하려고 요청할 때, Spring은 지정된 키스토어에서 공개키를 사용하여 데이터를 암호화합니다. 공개키는 누구와도 안전하게 공유될 수 있으며, 데이터를 암호화하는 데 사용됩니다.
복호화: 암호화된 데이터를 복호화할 때는 키스토어에 저장된 개인키를 사용합니다. 이 개인키는 보안을 유지해야 하며, 이를 통해서만 암호화된 데이터를 복호화할 수 있습니다.
key-store
설정에 지정된 .jks
파일은 이러한 작업을 위한 모든 필요한 정보(개인키, 공개키, 인증서 등)를 포함하고 있으며, Spring은 이 정보를 사용하여 암호화와 복호화 작업을 수행합니다. 따라서, 복호화 과정에서 명시적으로 공개키를 지정할 필요가 없는 것입니다. Spring은 지정된 키스토어 파일 내에서 필요한 키를 찾아 해당 작업을 수행합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
SeJongDeveloper님, 인증서 및 공개키 파일의 사용에 대해 질문해주셨네요. 일반적으로, 인증서와 공개키 파일은 다음과 같은 상황에서 사용됩니다.
질문1: 인증서 파일 및 공개키 파일은 SSL/TLS 같은 보안 연결을 구현할 때 사용됩니다. 클라이언트가 서버의 신원을 검증하고 안전한 통신 채널을 확립하는데 필요한 비공개키-공개키 쌍과 인증서가 들어있습니다. 인증서 파일은 서버의 공개키와 서버의 신원을 확인하는데 필요한 정보를 포함하며 신뢰할 수 있는 인증 기관(CA)에 의해 서명되어 있습니다.
질문2: Spring Cloud Config 프로젝트에 제공한 bootstrap.yml
설정 코드를 보면, 비대칭키 암호화에 사용된 것으로 보입니다. key-store
옵션을 사용해 비공개키(Private Key)가 저장된 Java KeyStore를 지정하여 암호화와 복호화에 사용하고 있습니다. 일반적으로 Spring Cloud Config를 사용하여 설정 정보를 관리할 때, encrypt.key-store
를 설정하면 비대칭키 방식을 사용하는 것이며, encrypt.key
를 설정하면 대칭키 방식을 사용하는 것입니다.
비공개키 파일(apiEncryptionKey.jks
)을 사용하여 암호화와 복호화 작업을 수행하고 계신 상태이며, Spring Cloud Config에서는 이 비공개키를 사용해 설정 값들을 암호화하거나 복호화하는 데 사용됩니다. 공개키 파일은 이를 보완해 클라이언트에서 서버의 신원을 검증하고 서버에 자료를 안전하게 전송할 때 사용되지만, 여기서는 설정 관리 차원에서 사용되고 있지는 않습니다.
추가적으로, Spring Boot 및 Spring Cloud Config에서 SSL/TLS 설정에 대해 더 자세히 알고 싶으시다면, Spring Boot Reference Documentation의 관련 섹션을 참고하시면 도움이 될 것입니다. 예를 들어 자바 KeyStore 파일에 대한 SSL 구성은 다음 문서를 참고해보실 수 있습니다:
- Configuring SSL With Java KeyStore Files
- Configuring SSL
암호화와 SSL 설정에 대해 더 자세한 사항은 위 문서들을 참고하시면 도움이 될 것입니다.
jks 파일안에 모든게 들어있었군요!
답변 감사합니다.