inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

472

SeJongDeveloper

작성한 질문수 10

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 프로젝트에서 비대칭키 암호화를 사용하고 있는건지 궁금합니다.

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

답변 2

1

Kjoony

실제로 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은 지정된 키스토어 파일 내에서 필요한 키를 찾아 해당 작업을 수행합니다.

0

SeJongDeveloper

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

0

인프런 AI 인턴

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

kafka 업데이트 강의 듣고 시포요

0

85

1

강의 교안

0

75

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

66

1

섹션 19 질문드립니다

0

53

1

강의 자료 업데이트

0

83

1

부하분산 강의 섹션

0

57

1

강의자료는 어디에서?

0

72

1

강의 자료는 어디서 다운 받을 수 있나요?

0

110

1

전체 사용자 조회시 오류

0

59

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

112

2

학습 방향

0

95

2

카프카 커넥터 사용 목적 문의

0

86

2

kafka 강의

0

108

2

서비스 디스커버리 종류

0

87

2

강의 자료에 대해서 궁금해요

0

117

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

90

2

Kafka Source Connect 버전 에러

0

85

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

96

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

113

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

162

2

어떤 것이 업데이트 된 건가요?

0

164

2