Tips
[Error] java.io.IOException: Invalid PKCS#8 data 에러 해결
Sungwoo Koo
2023. 5. 12. 17:03
private String getAccessToken() throws IOException {
// firebase로 부터 access token을 가져온다.
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new ClassPathResource("firebase/firebase_service_key.json").getInputStream())
.createScoped(Arrays.asList("https://www.googleapis.com/auth/cloud-platform"));
googleCredentials.refreshIfExpired();
return googleCredentials.getAccessToken().getTokenValue();
}
문제
linux ubuntu 환경에서 Git push를 통한 Jenkins CI/CD 과정을 거쳐 스프링부트 앱을 빌드했을때,
해당 json 파일의 private key에 대해 "java.io.IOException: Invalid PKCS#8 data" 에러가 발생했습니다.
Windows 로컬 환경에서는 정상 작동하는데 linux 에서만 해당 에러가 발생했습니다.
원인
개행 문자(newline character)의 처리 방식 차이
- Windows와 Linux는 개행 문자를 다르게 처리합니다. Windows는 Carriage Return(CR)과 Line Feed(LF) 두 가지 문자를 사용해 새 줄을 만들지만, Linux는 오직 Line Feed(LF)만 사용합니다.
이 차이 때문에, json 파일이 Windows에서 잘 작동하고 Linux에서 작동하지 않는 문제가 발생했습니다.
Git은 기본적으로 클라이언트 운영체제에 맞는 개행 문자를 사용합니다.
따라서 Windows에서 체크아웃된 파일은 CR+LF를 사용하고, Linux에서 체크아웃된 파일은 LF만을 사용합니다.
해결
이러한 문제를 해결하기 위해 Git 설정을 변경하여 개행 문자를 자동으로 변환하지 않도록 할 수 있습니다.
이렇게 하면, 개행 문자가 그대로 유지되어 파일이 동일하게 처리됩니다.
다음 명령어를 사용해 Git의 autocrlf 옵션을 false로 설정할 수 있습니다.
# Git 설정 변경
git config --global core.autocrlf false
이후, 다시 Git push 후 빌드 하여 문제를 해결했습니다.