IT/WEBWAS

SSL 통신을 위한 WAS 내 Java 설정_https 호출

동구멍폴로 2021. 5. 8. 15:15
반응형

 WAS 내 JSP 파일등을 통해 https 통신이 필요한 경우, SSL Protocol을 사용하게 된다. 

여기서 WAS가 사용하는 Java 버전 및 옵션 적용 유무에 따라 통신/인터페이스시 오류가 발생할 수 있다. 

조치를 위해 아래 내용을 참고하여 설정 변경 후 WAS 재기동을 진행한다. 

 

1. Java 버전 업그레이드

버전별 사용가능한 SSL Protocol 은 아래와 같다. 여기서 기준은 무료 버전이다. 

버전 가능한 SSL Protocol Default설정 비고
Java 6 (JDK 1.6.0_45) SSL v3.0, TLS1.0 TLS1.0 * JDK minor 버전에 따라 지원 프로토콜 추가
Java 7 (JDK 1.7.0_80) SSL v3.0, TLS1.0, TLS1.1, TLS1.2  TLS1.0 Default는 1.0 유지임에 주의
Java 8 (JDK 1.8.0_202) SSL v3.0, TLS1.0, TLS1.1, TLS1.2  TLS1.2   

*  JDK 1.6.0_111 이후 TLS1.1 지원, 1.6.0_121 이후 TLS 1.2 지원 (단, jsse.enableSNIExtension 등 옵션 설정은 불가능)

** TLS1.2 미만 프로토콜의 경우, Deprecated 될 예정이니 사용을 지양하는 것이 좋다.

 

 

2. 오류 로그별 Java/옵션 적용 

2.1 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

 

1) JDK 1.7 이상으로 업그레이드를 진행한다.
  이때, 반드시 Java 버전 업그레이드 후 해당 WAS에 Deploy 하여 사용중인 소스에 대한 오류 발생여부를 확인한다.
  (일반적으로 Java 6->7 로 바뀜에 따른 오류는 거의 없다.)

2) 추가적으로 TLS 1.2 를 사용하도록 기동 스크립트에 아래와 같이 옵션을 추가한다. 

 : WAS 기동 옵션 내 JAVA HOME 디렉토리 설정이나, -D 옵션이 설정된 위치에 다음과 같은 명령어를 추가해 준다.

-Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2

  (전체 프로토콜을 허용하고 싶은 경우는 TLSv1.0,TLSv1.1,TLSv1.2 와 같이 변경하면 됨.)

 

 

2.2 javax.net.ssl.SSLHandshakeException: Received fatal alert: unrecognized_name

 

-> 기동 스크립트에 아래와 같이 옵션을 추가한다. 

  아래 옵션은 SNI(ServerNameIndex) 값을 넘기지 않겠다는 내용으로, 인식이 불가능한 문자열을 정보로 보내지 않도록 하는 설정이다.

-Djsse.enableSNIExtension=false  

 호출 대상/Target 서버 측에서 SNI을 통해 Domain에 따른 분기처리 등을 설정해 두었다면 아래와 같이 옵션을 설정한다.

-Djsse.enableSNIExtension=true

 

**** 호출 대상/Target 서버 측에서 SNI를 사용하는지 확인하는 방법은 아래와 같다. (WAS 구성 서버에서 실행)

      아래 명령어 실행시 정상적으로 Handshake 가 된다면 SNI 설정을 true로 설정하는 것이 좋다.

openssl s_client -servername myserver.com -connect myserver.com:443 -state

(대상서버가 myserver.com , 443 포트 사용중이라고 가정. -servername 변수 유무를 통해 사용여부 확인가능)

반응형