Java를 사용하여 HTTPS에 요청할 때 신뢰할 수 있는 인증서를 찾을 수 없습니다.

Java를 사용하여 HTTPS에 요청할 때 신뢰할 수 있는 인증서를 찾을 수 없습니다.

저는 Java 개발자이고 특정 버전의 Java 8(1.8.0_162)을 사용해야 하는데 OpenJDK를 사용할 수 없습니다.

하지만 내 Java 프로그램에서 연결/가져오기/다운로드/무엇이든 시도할 때 이 오류가 발생합니다.HTTPS URL

sun.security.validator.ValidatorException: 신뢰할 수 있는 인증서를 찾을 수 없습니다.

코드가 프로덕션 환경에서 실행되기 때문에 정확하다는 것을 알고 있지만 로컬 컴퓨터에서 코드를 실행할 수 있습니다.

인증서와 관련이 있는 것 같은데 수정 방법을 모르겠습니다.

답변1

JDK 및 JRE에는 신뢰할 수 있는 자체 인증서 세트가 함께 제공됩니다. 파일 이름은 "cacerts"이며 에서 찾을 수 있습니다 JDK_HOME/jre/lib/security. readlink -f /bin/javaJDK_HOME 디렉터리가 있는 위치를 나타내야 합니다.

cacerts 파일에는 신뢰할 수 있는 CA(인증 기관)의 모든 인증서 목록이 포함되어 있습니다. 파일은 JKS 형식이므로 keytoolJDK의 일부인 다른 명령을 사용하여 조작할 수 있습니다. 이 파일을 수정하려면 루트 권한이 필요합니다.

대부분의 잘 알려진 CA는 이미 cacerts 파일의 일부입니다. 예외가 발생하므로 HTTPS 끝점에서 사용하는 CA 인증서가 파일에서 누락되어야 합니다. 원격 끝점에서 CA 인증서를 추출하여 cacerts 파일에 추가해야 합니다. 나중에 애플리케이션을 다시 시작하면 예상대로 작동합니다.

cacerts 파일을 수정하지 않으려면 자체 신뢰 저장소를 설정할 수도 있습니다. 이 방법에서는 신뢰하려는 인증서가 포함된 신뢰 저장소를 생성한 다음 javax.net.ssl.trustStore및 속성을 사용하여 javax.net.ssl.trustStorePassword애플리케이션이 이를 가리키도록 합니다 .

답변2

문제는 내 보안 폴더( ) jre/lib/security에 있는 파일에 존재하지 않는 다른 파일에 대한 링크가 끊어져 있다는 것입니다.

Oracle 홈페이지로 이동하여 Java 8 Linux에서 JDK를 다운로드하고 보안 폴더의 모든 파일을 교체했습니다(폴더 정책은 없음).

관련 정보