인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

조정대님의 프로필 이미지
조정대

작성한 질문수

코드로 배우는 React with 스프링부트 API서버

API서버에서 사용자 정보 추출하기(2)

9장 API서버에서 사용자 정보 추출하기 호출 오류 문의

작성

·

58

0

카카오로 access토큰 받아오고 나서

api서버에서 kakao로 사용자 정보 호출 시 오류가 나네요..

어떤 부분을 수정해야 할지 잘 감이 안오네요.

 

Not injecting HSTS header since it did not match request to [Is Secure]

image.png

--아래 로그

1-28T17:15:42.369+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.security.web.FilterChainProxy : Invoking ExceptionTranslationFilter (13/13)

2024-11-28T17:15:42.369+09:00 DEBUG 26452 --- [apiserver] [nio-8080-exec-2] o.s.security.web.FilterChainProxy : Secured GET /api/member/kakao?accessToken=s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ

2024-11-28T17:15:42.370+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.a.controller.SocialController : accessToken : s0KvFDK1upVad8mdV-4lSc8WG_NwqUV7AAAAAQoqJVAAAAGTcdcZj6ew61y3DOUZ

2024-11-28T17:15:42.372+09:00 INFO 26452 --- [apiserver] [nio-8080-exec-2] o.z.apiserver.service.MemberServiceImpl : response 1------------------------------

2024-11-28T17:15:42.405+09:00 TRACE 26452 --- [apiserver] [nio-8080-exec-2] o.s.s.w.header.writers.HstsHeaderWriter : Not injecting HSTS header since it did not match request to [Is Secure]

2024-11-28T17:15:42.405+09:00 ERROR 26452 --- [apiserver] [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://kapi.kakao.com/v2/user/me": PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] with root cause

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:148) ~[na:na]

at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:129) ~[na:na]

at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) ~[na:na]

 

 

-- 소스코드

private void getEmailFromAccessToken(String accessToken) {
    String kakaoGetUserURL = "https://kapi.kakao.com/v2/user/me";

    if(accessToken == null){
        throw new RuntimeException("Access Token is null");
    }

    RestTemplate restTemplate = new RestTemplate();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer " + accessToken);
    headers.add("Content-Type","application/x-www-form-urlencoded");
    HttpEntity<String> entity = new HttpEntity<>(headers);

    UriComponents uriBuilder = UriComponentsBuilder.fromHttpUrl(kakaoGetUserURL).build();

    log.info("uriBuilder " + uriBuilder);
    log.info("response 1------------------------------");
    ResponseEntity<LinkedHashMap> response =
            restTemplate.exchange(
                    uriBuilder.toString(),
                    HttpMethod.GET,
                    entity,
                    LinkedHashMap.class);


    log.info("response 2------------------------------");
    log.info(response);

답변 2

0

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

이건 프로젝트를 실행해 봐야 정확한 원인을 알 수 있을 듯 합니다.

 

https://drive.google.com/drive/folders/1ZLHRKaXx8Ou8kZNd1WE6qALxq_wJODXW

 

에 프로젝트를 올려주시면 저녁에 테스트를 해 볼 수 있습니다.

 

코드 올리신 후에 댓글 남겨주세요

조정대님의 프로필 이미지
조정대
질문자

회사에서 짬짬히 강의를 듣는데 외부로 보내기가 안되네요..

react쪽에서 카카오 회원정보 가져오는 걸 시도해보니 잘되어서 api서버쪽도 조금 변경해 수업을 따라가고 있습니다.

신경써주셔서 감사합니다.

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

아.. 회사 보안에서 막히시는군요..

그렇다면 보안쪽에서 막힐수도 있긴 합니다만..

 

나중에라도 필요하신 부분 공유가능하시면 올려주세요^^

0

안녕하세요, 조정대님. 인프런 AI 인턴입니다.

주어진 로그 메시지와 소스 코드를 기반으로 문제의 원인을 분석해 보겠습니다.

문제의 원인:

주된 문제는 다음과 같습니다:

  1. 자격 증명 경로 실패: 이 문제는 주로 HTTPS 요청을 처리하는 동안 발생합니다. 인증서 경로를 찾을 수 없다는 메시지는 SSL 인증서가 설치되지 않거나 잘못 설정되어 있음을 의미합니다. 이는 서버가 API 서버(kapi.kakao.com)에 연결할 때 올바르게 신뢰할 수 있는 경로를 설정하지 못했다는 의미입니다.

  2. HSTS Header 관련 메시지: “Not injecting HSTS header since it did not match request to [Is Secure]“라는 메시지는 보안 연결이 설정되지 않았거나, 요청이 HTTPS가 아니라는 힌트를 줍니다. 이 부분은 직접적인 오류 원인은 아니지만, 설정 검토가 필요합니다.

해결 방법:

  1. SSL 인증서 설치: 서버에 신뢰할 수 있는 인증서를 설치해야 합니다. 카카오 API를 호출하기 위해서는 인증서 경로를 시스템에 추가하여 Java가 이를 신뢰하도록 해야 합니다.

    • 일반적으로 시스템의 기본 KeyStore에 인증서를 추가할 수 있습니다. 다음 명령을 통해 인증서를 수동으로 설치할 수 있습니다:
      keytool -import -alias someAlias -keystore cacerts -file path/to/certificate.crt
    
    • 이 때, cacerts 파일은 Java 설치 경로의 lib/security 디렉토리에 있으며, 기본 비밀번호는 changeit입니다. 이 작업은 신중하게 진행되어야 하며, 반드시 인증서의 법적 유효성을 검증해야 합니다.
  2. HSTS 설정 확인: HSTS 설정은 보안 강화와 관련된 부분이므로, 현재 문제 해결에 직접적인 영향을 미치지 않지만, HTTPS로 서버를 설정하여 보안을 강화할 수 있습니다.

  3. 테스트 환경 구성: 로컬에서 SSL 설정된 서버를 테스트하는 도중 발생하는 문제일 수 있으므로, 인증서 관련 설정을 시험할 때는 로컬 환경에서 모든 설정이 올바르게 되어 있는지 확인해 보세요.

참고 자료:

추가적으로 비슷한 문제를 겪으신 분들의 답변을 통해 더 많은 정보를 얻으실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

조정대님의 프로필 이미지
조정대

작성한 질문수

질문하기