본문 바로가기
프로그래밍/SPRING

[SPRING] RestTemplate, SSL, TLS, Proxy(+UrlConnection, HttpClient, WebClient)

by 두둠칫 2022. 9. 19.

0. RestTemplate로 API 통신 구현하면서 통신 CS와 함께 공부해서, 반영 전 마지막 코드 개선해보기 위해 정리한 글

 

1. RestTemplate란

 - REST API을 쉽게 호출할 수 있도록 Spring에서 지원하는 내장 클래스

 

2. 생성자

1) RestTemplate()

 

2) RestTemplate(ClientHttpRequestFactory requestFactory)

- 기본생성자로 생성할 경우 SimpleClientHttpRequestFactory로 생성된다.
- ClientHttpRequestFactory는 proxy, timeOut 값 등 기본 HTTP 클라이언트 라이브러리에 대한 구성 옵션을 제공한다.
- SimpleClientHttpRequestFactory의 메서드 createRequest를 보면, 요청을 만들 때 HttpURLConnection을 사용한다.

 

3) RestTemplate(List<HttpMessageConverter<?>> messageConverters)

- JSON 데이터를 HTTP message body 내 직접 읽거나 쓰는 경우 사용

- 활용하지는 못해봤다

 

 

3. 동작 프로세스

 

 

4. SSL, TLS, HTTPS, Proxy + WAS(Weblogic)

1) SSL, TLS

- SSL은 Secure Socket Layer의 약자로 웹서버와 웹 브라우저 간의 암호화 통신을 위하여 응용계층과 TCP/IP 계층에서 동작하는 '프로토콜'이며, Netscape사에서 만들었으며 ISO표준 정식명칭은 TLS(Transport Layer Security). 즉 SSL == TLS

- 상호간 정당한 사용자인지 인증서를 통해 검증하고 서로 약속한 암호화 알고리즘을 통해 키를 교환(3 way handshanking) 후 암호화 통신을 이어간다.

 

2) HTTPS

- HTTP 통신에 SSL(TLS) 프로토콜을 적용한 것.

 

3) Proxy

- Proxy란 '대리'라는 의미로, 보안상의 이유로 직접 통신할 수 없는 두 점 사이에서 통신을 할 경우 그 중계 기능을 하는 것을 프록시 서버라고 부른다.

 

4) Insecure SSL 요청

- 회사 네트워크 환경이 Proxy를 통해 외부와 통신하는 환경에서 필요에 의해 SSL 통신을 구현해야하는 경우가 있다. 이 때, Proxy에서 SSL 인증서가 회사의 사설 인증서로 교체되어 certificate error가 발생할 수 있다.(이 글을 쓰게된 원인..)

- 이 경우에 Insercure SSL 처리를 하기 위해, HttpRequestFactory 구현하고 메서드를 override하여 우회될 수 있도록해야한다. (hostname 모두신뢰, X.509 공개키 암호화 검증 패스)

 

5) Weblogic

- ava.net.URL 이용해서 Connection을 맺으려 할때 Weblogic에서 오류가 발생하는 경우에 다음과 같이 handler를 할당해서 처리한다.

 

URL url = new URL(null, url, new sun.net.www.protocol.https.Handler());

 

- 따로 할당하기 전엔 new weblogic.net.https.Handler()로 할당되는 형태

- 위의 코드로 jsse.jar의 Handler를 사용하게 된다

- WAS는 dafualt handler를 가지고 있기 때문에, 설정으로 바꿀수도 있음

 

 

5. UrlConnection, HttpClient, WebClient

- UrlConnection > HttpClient > RestTemplate > AsyncRestTemplate > Webclient 순

- 스프링버전 업그레이드하면 써보고 정리해보자...

'프로그래밍 > SPRING' 카테고리의 다른 글

[SPRING] 대량 Insert : mybatis foreach vs sqlSession batch  (0) 2022.08.02
JPA 관련 정리  (0) 2022.06.01
한끝완3  (0) 2022.05.27
한끝완2  (0) 2022.05.23
한끝완1  (0) 2022.02.20