복붙노트

[SPRING] Spring 부팅 application.yml에서 Spring Kafka SSL 설정

SPRING

Spring 부팅 application.yml에서 Spring Kafka SSL 설정

SSL을 사용하기 위해 Kafka 클라이언트와 함께 Spring Boot Application을 설정하려고합니다. 나는 내 keystore.jks와 truststore.jks 파일 시스템 (docker 컨테이너에) 때문에 이것을 가지고있다 : https://github.com/spring-projects/spring-kafka/issues/710

다음은 내 application.yml입니다.

spring:
  kafka:
      ssl:
        key-password: pass
        keystore-location: /tmp/kafka.client.keystore.jks
        keystore-password: pass
        truststore-location: /tmp/kafka.client.truststore.jks
        truststore-password: pass

하지만 응용 프로그램을 시작할 때 (도커 컨테이너에서) 다음과 같이 말합니다.

Caused by: java.lang.IllegalStateException: Resource 'class path resource [tmp/kafka.client.keystore.jks]' must be on a file system
[..]
Caused by: java.io.FileNotFoundException: class path resource [tmp/kafka.client.keystore.jks] cannot be resolved to URL because it does not exist

나는 컨테이너를 검사했고 .jks는 / tmp에있다.

.jks를 봄 부팅으로 전달하는 방법을 이해할 수 없습니다.

업데이트 06/07/2018

이게 내 부두 파일이야.

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY ssl/kafka.client.keystore.jks /tmp
COPY ssl/kafka.client.truststore.jks /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

해결법

  1. ==============================

    1.논의에 따르면 kafka ssl 구성을 사용하려면 먼저 consumerFactory에서 ssl 등록 정보를 활성화하고 설정해야합니다.

    논의에 따르면 kafka ssl 구성을 사용하려면 먼저 consumerFactory에서 ssl 등록 정보를 활성화하고 설정해야합니다.

    @Bean
    public ConsumerFactory<String, ReportingTask> consumerFactory() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonSerializable.class);
        props.put(ConsumerConfig.CLIENT_ID_CONFIG, clientId);
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, enableAutoCommit);
        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, autoCommitInterval);
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, sessionTimeout);
        props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, maxRecords);
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, offSet);
        if (sslEnabled) {
            props.put("security.protocol", "SSL");
            props.put("ssl.truststore.location", trustStoreLocation);
            props.put("ssl.truststore.password", trustStorePassword);
    
            props.put("ssl.key.password", keyStorePassword);
            props.put("ssl.keystore.password", keyStorePassword);
            props.put("ssl.keystore.location", keyStoreLocation);
        }
        return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(), new JsonDeserializer<>(Task.class));
    }
    

    인증서를 도커 컨테이너에 복사합니다.

    COPY ssl/stage/* /var/lib/kafka/stage/
    
  2. ==============================

    2.다른 사람이 여전히이 문제를보고있는 경우 file : / 파일 경로 앞에 다음과 같이 입력 해보십시오.

    다른 사람이 여전히이 문제를보고있는 경우 file : / 파일 경로 앞에 다음과 같이 입력 해보십시오.

    truststorelocation: "file:/tmp/kafka.client.keystore.jks"
    

    오류는 URL이 없다는 불만을 토로합니다. 프로토콜을 추가하면 경로가 URL이됩니다 (기본적으로 말하면됩니다)

  3. from https://stackoverflow.com/questions/51200107/spring-kafka-ssl-setup-in-spring-boot-application-yml by cc-by-sa and MIT license