[SPRING] 예외는 봄 MVC에서 대상의 인증서를 확인할 수 없습니다.
SPRING예외는 봄 MVC에서 대상의 인증서를 확인할 수 없습니다.
내 사용자 이름과 비밀 번호를 사용하여 jira 서버에서 문제를 세부 정보를 얻으려고 노력하고 있지만 인증서를 확인할 수 없다는 ssl 오류가 나타납니다.
인증서를 확인하는 방법
url : http : local / 8080 / frr / hello
오류 받기 :
내 Service.class 코드
@Controller
public class Service{
@RequestMapping("/hello")
public String Data(ModelMap model){
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> result = restTemplate.exchange("https://jira.example.com/rest/api/2/issue/id", HttpMethod.GET, new HttpEntity<String>(createHeaders("username", "password")), String.class);
model.addAttribute("message", result);
return "helloworld";
}
RestTemplate restTemplate = new RestTemplate();
HttpHeaders createHeaders( String username, String password ){
HttpHeaders header = new HttpHeaders();
String auth = username + ":" + password;
byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")) );
String base64Creds = "Basic " + new String( encodedAuth );
header.add("Authorization", "Basic " + base64Creds);
return header;
}
}
해결법
-
==============================
1.현재 직면 한 문제는 응용 프로그램이 인증서를 신뢰할 수 없으므로 연결하려는 외부 서버의 유효성을 검사 할 수 없다는 것입니다.
현재 직면 한 문제는 응용 프로그램이 인증서를 신뢰할 수 없으므로 연결하려는 외부 서버의 유효성을 검사 할 수 없다는 것입니다.
간단히 설명하면 다음과 같습니다.
이 Jira 인스턴스가 사내 (회사에서 호스팅) 인 경우 자체 서명 된 인증서를 갖는 것이 거의 불가능합니다. 이 경우 인증서는 알려진 CA에서 발급하지 않으므로 인증서를 신뢰하려면 수동으로 등록해야합니다.
먼저 인증서를 받으십시오.
openssl s_client -connect jira.example.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt
그런 다음 자신의 키 저장소로 가져옵니다.
$JAVA_HOME/keytool -import -alias <server_name> -keystore $JAVA_HOME/lib/security/cacerts -file public.crt
참고 : 위의 명령은 Unix 환경 용입니다. Windows에서 명령 줄에서 유사하게 openssl을 사용하는 것이 좋지만 같은 목적으로 사용할 수있는 GUI 도구도 있습니다.
-
==============================
2.$ JAVA_HOME / lib / security / cacerts 파일이 있는지 확인하십시오! 제 경우에는 파일이 아니라 / etc / ssl / certs / java / cacerts에 대한 링크 였고 JVM이이 파일을 찾을 수 없기 때문에 이것이 자체 (WHAT ???)에 대한 링크였습니다.
$ JAVA_HOME / lib / security / cacerts 파일이 있는지 확인하십시오! 제 경우에는 파일이 아니라 / etc / ssl / certs / java / cacerts에 대한 링크 였고 JVM이이 파일을 찾을 수 없기 때문에 이것이 자체 (WHAT ???)에 대한 링크였습니다.
해결책: 실제 cacerts 파일을 다른 JDK에서 / etc / ssl / certs / java / 디렉토리로 복사하면 문제가 해결됩니다 :)
-
==============================
3.@Gergely Bacso가 표시 한 인증서를 가져온 후에도 인증서 문제가 계속 발생하는 경우 IDE 또는 Java 응용 프로그램을 실행하는 데 사용되는 명령 줄에 링크 된 java.exe 또는 javaw.exe 바이너리가 JRE가 JRE가 아닌 사람은 인증서를 cacerts 키 저장소에 설치 한 후에도 인증서 오류가 발생했습니다. JDK의 바이너리를 사용할 때까지 인증서가 설치되지 않았습니다. JRE 로의 경로를 바꾼 후에 모든 것이 예상대로 진행되었고 성공적으로 연결할 수있었습니다. 문제를 디버그하려고하는 누군가의 시간을 절약 해주기를 바랍니다.
@Gergely Bacso가 표시 한 인증서를 가져온 후에도 인증서 문제가 계속 발생하는 경우 IDE 또는 Java 응용 프로그램을 실행하는 데 사용되는 명령 줄에 링크 된 java.exe 또는 javaw.exe 바이너리가 JRE가 JRE가 아닌 사람은 인증서를 cacerts 키 저장소에 설치 한 후에도 인증서 오류가 발생했습니다. JDK의 바이너리를 사용할 때까지 인증서가 설치되지 않았습니다. JRE 로의 경로를 바꾼 후에 모든 것이 예상대로 진행되었고 성공적으로 연결할 수있었습니다. 문제를 디버그하려고하는 누군가의 시간을 절약 해주기를 바랍니다.
-
==============================
4.대체 할 수 있습니다.
대체 할 수 있습니다.
String base64Creds = "Basic " + new String( encodedAuth );
와
String base64Creds = new String( encodedAuth ); //"Basic " String duplicated
from https://stackoverflow.com/questions/32051596/exception-unable-to-validate-certificate-of-the-target-in-spring-mvc by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring JDBCTemplate 대 최대 절전 모드 성능 측면 [닫힘] (0) | 2019.07.07 |
---|---|
[SPRING] WebSocket 핸드 셰이크 - 예기치 않은 응답 코드 200 - AngularJs 및 Spring Boot (0) | 2019.07.06 |
[SPRING] 스프링 @value 주석을 프리미티브 부울로 평가하기 (0) | 2019.07.06 |
[SPRING] LocalContainerEntityManagerFactoryBean과 LocalEntityManagerFactoryBean의 차이점은 무엇입니까? (0) | 2019.07.05 |
[SPRING] 통합 테스트에서 빈 재정의 (0) | 2019.07.05 |