인프런 커뮤니티 질문&답변

SeJongDeveloper님의 프로필 이미지
SeJongDeveloper

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

비대칭키를 이용한 암호화 ②

인증서, 공개키 파일은 언제 사용하나요?

작성

·

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은 내부적으로 다음과 같이 작동합니다:

  1. 암호화: 애플리케이션 또는 사용자가 데이터를 암호화하려고 요청할 때, Spring은 지정된 키스토어에서 공개키를 사용하여 데이터를 암호화합니다. 공개키는 누구와도 안전하게 공유될 수 있으며, 데이터를 암호화하는 데 사용됩니다.

  2. 복호화: 암호화된 데이터를 복호화할 때는 키스토어에 저장된 개인키를 사용합니다. 이 개인키는 보안을 유지해야 하며, 이를 통해서만 암호화된 데이터를 복호화할 수 있습니다.

key-store 설정에 지정된 .jks 파일은 이러한 작업을 위한 모든 필요한 정보(개인키, 공개키, 인증서 등)를 포함하고 있으며, Spring은 이 정보를 사용하여 암호화와 복호화 작업을 수행합니다. 따라서, 복호화 과정에서 명시적으로 공개키를 지정할 필요가 없는 것입니다. Spring은 지정된 키스토어 파일 내에서 필요한 키를 찾아 해당 작업을 수행합니다.

jks 파일안에 모든게 들어있었군요!
답변 감사합니다.

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 설정에 대해 더 자세한 사항은 위 문서들을 참고하시면 도움이 될 것입니다.

SeJongDeveloper님의 프로필 이미지
SeJongDeveloper

작성한 질문수

질문하기