제3장 WebtoB 4.1 SP9 Fix#0

내용 목차

3.1. 신규 기능
3.1.1. wsadmin > patchinfo 추가
3.1.2. License에 Cloud type 추가
3.1.3. *TCPGW.ClientConnectionLog 추가
3.1.4. HTH에서 HTMLS를 kill해 주는 기능
3.1.5. DH/ECDH key Exchange 알고리즘 방식을 지원하는 기능
3.1.6. WebDAV 기능
3.2. 추가 기능
3.2.1. wsadmin의 cl off 명령에 대해 HTH와 기연결된 클라이언트를 끊어주도록 기능 추가
3.3. 변경 기능
3.3.1. Windows에서 SO_REUSEADDR 대신 SO_EXCLUSIVEADDRUSE으로 변경
3.3.2. JEUS로부터 받은 응답에 대한 access log를 남길 때 사용하는 rcode 값 변경
3.3.3. Sun Sparc 장비에서 AES cipher 오류로 인한 OpenSSL 바이너리 변경
3.3.4. 클라이언트가 미리 연결을 끊은 경우에도 POST 요청에 대한 body가 항상 JEUS로 전달되도록 변경
3.3.5. *NODE.LimitRequestFieldSize, *NODE.LimitRequestLine MAX 값 변경
3.3.6. SSL을 사용하는 경우 RequiredCiphers 기본값 변경
3.3.7. SysMaster 3 버전 지원을 위해 usrinc/wsadmin.h에 MAX_NUM_HTH 값을 20에서 100으로 변경
3.3.8. HTH0291, HTH0365 로그 레벨을 Warning에서 Debug로 변경
3.3.9. HTH0486 메시지의 로그 레벨을 Debug에서 Warn으로 변경
3.3.10. *SERVER.HttpOutBufSize를 0으로 설정할 때 동작방식 변경
3.3.11. WBSSL 버전 업그레이드
3.3.12. SSL을 사용하는 경우 Protocols 기본값 변경
3.4. 버그 패치
3.4.1. Reverse Proxy 사용 중 클라이언트가 응답 받기 전 미리 연결을 끊은 경우 memory leak 버그 수정
3.4.2. Reverse Proxy를 사용하는 경우 HTH의 CPU 점유율이 높아지는 오류 수정
3.4.3. WJPv2를 사용할 때 JEUS로 전달하는 요청 URL 값이 항상 URL decode되어 있는 오류 수정
3.4.4. ForceCacheModificationCheck=Y인 경우, directory 요청에 대한 응답을 정상처리하지 못하는 오류 수정
3.4.5. Windows-IOCP 적용한 버전에서 응답을 다 보내지 않은 채로 기다리는 오류 수정
3.4.6. wsadmin > restat 명령을 사용할 때 JSV(st -j) 통계가 초기화 되지 않는 오류 수정
3.4.7. chunked data를 다 받았음에도 불구하고 HTH0473 로그가 발생하며 JSV connection이 끊어지는 오류 수정
3.4.8. *NODE.CacheMaxFileSize 설정값이 크고, Pipelined Request될 때 HTH0381 로그가 발생하거나 Memory Leak 버그 수정
3.4.9. JSV Response를 compression 하기 위한 과정에서 무한 loop에 빠질 수 있는 오류 수정
3.4.10. HTH가 WSM에 로그 메시지를 write할 때 incomplete 상태인 경우 HTH가 restart 될 수 있는 오류 수정

3.1. 신규 기능

3.1.1. wsadmin > patchinfo 추가

  • wsadmin에서 release 이후 패치된 버전에 대한 diff 정보를 볼 수 있는 명령어를 추가하였다.

    [예 3.1] wsadmin > patchinfo 정보

    $$2 webtob (wsadm) [2015/09/22:14:40:02]: patchinfo
    ----------
    B291.10.0(2015/05/08) : (CHG) Change *NODE.LimitRequestLine, *NODE.LimitRequestFieldSize' default value(8190->16382). 
    B291.9.0 (2015/04/23) : (CHG) Change processing incomplete POST body. IMS-95420 
    B291.8.0 (2015/04/21) : (ADD) Add *NODE.Options="ProcessIncompleteRequest". IMS-95420 
    B291.7.0 (2015/04/13) : (ADD) Add a new type of license for cloud. 
    B291.6.0 (2015/03/27) : (CHG) Change OpenSSL binary for AES cipher on Sun Sparc. IMS-94411 
    B291.5.0 (2015/03/23) : (CHG) Upgrade OpenSSL from 1.0.1l to 1.0.1m because of CVE-2015-0286 (and etc). 
    B291.4.0 (2015/03/20) : (CHG) Synchronize response status code with JSV (accesslog). IMS-88401 
    B291.3.0 (2015/03/06) : (CHG) Upgrade OpenSSL from 1.0.1j to 1.0.1l because of CVE-2015-0204 (and etc). 
    B291.2.0 (2015/03/04) : (BUG) Fix a bug that a memory leak occurs in reverse proxy. IMS-93593 
    B291.1.0 (2015/02/26) : (CHG) Change socket option(SO_REUSEADDR->SO_EXCLUSIVEADDRUSE) on Windows. IMS-93718 
    Released (2015/01/29) : 4.1.8.1-B291.0.0 
    ----------

  • 관련이슈 : IMS-90114

3.1.2. License에 Cloud type 추가

  • Cloud platform 지원을 위하여 Cloud license를 추가하였다.

3.1.3. *TCPGW.ClientConnectionLog 추가

  • TCPGW를 사용할 때 클라이언트와의 연결 로그를 남길지 여부에 대한 설정을 추가하였다.

    [예 3.2] *TCPGW.ClientConnectionLog 설정 방법

    *TCPGW
    tcpgw1    ...
              ClientConnectionLog = N (default: Y)
              ...

  • 관련이슈 : IMS-96365

3.1.4. HTH에서 HTMLS를 kill해 주는 기능

  • HTH가 클라이언트로부터 요청을 받아 HTMLS에게 forwarding한 상태에서 클라이언트 연결이 끊어졌음에도 불구하고 HTMLS가 (Timeout이 지나도록) RUN 상태일 때, HTH가 HTMLS 프로세스를 kill하는 기능을 추가하였다. HTH가 HTMLS를 kill하게 되면 WSM이 HTMLS를 Restart시켜주게 된다.

  • 관련이슈 : IMS-96537, IMS-97885

3.1.5. DH/ECDH key Exchange 알고리즘 방식을 지원하는 기능

  • OpenSSL에서 지원하는 ECDHE-RSA Key Exchange 방식을 사용하기 위하여 해당 기능을 추가하였다.

  • 관련이슈 : IMS-99064

3.1.6. WebDAV 기능

  • WebDAV(Web Distributed Authoring and Versioning, 웹 분산 저작 및 버전 관리) 기능을 지원한다.

    HTTP의 확장 프로토콜로 아래와 같이 NODE(VHOST) 절에 메소드를 추가하여 서버에 저장된 문서와 파일을 편집하고 관리할 수 있다. WebtoB에서는 PUT, DELETE, COPY, MOVE, MKCOL, PROPFIND 메소드를 지원한다. (LOCK/UNLOCK ,PROPPATCH 제외)

    해당 기능을 사용하지 않고자 할 때는 특정 method를 disable하도록 설정하면 된다. 자세한 사항은 RFC-4918을 참고한다.

    [예 3.3] WebDAV 기능 설정 방법

    *VHOST
    vhost1    ...
              Method = "GET, POST, HEAD, OPTIONS, PROPFIND, PUT, DELETE, MKCOL, COPY, MOVE"
                     (default:"GET, POST, HEAD, OPTIONS")
              ...

  • 관련이슈 : IMS-82239

3.2. 추가 기능

3.2.1. wsadmin의 cl off 명령에 대해 HTH와 기연결된 클라이언트를 끊어주도록 기능 추가

  • wsadmin> cl off 명령을 수행할 때 listen port를 내리고, 이미 HTH와 연결된 클라이언트는 close해주도록 기능을 추가하였다. 단, 이미 처리 중이거나(RUNNING) 큐잉된 요청의 클라이언트에 대해서는 정상적으로 해당 요청처리가 끝나면 close해주도록 한다.

  • 관련이슈 : IMS-98088

3.3. 변경 기능

3.3.1. Windows에서 SO_REUSEADDR 대신 SO_EXCLUSIVEADDRUSE으로 변경

  • Windows에서 소켓을 생성할 때 SO_REUSEADDR 소켓 옵션을 사용했을 경우, 이미 bind된 소켓을 다시 bind할 수 있는 문제가 있어 SO_REUSEADDR 옵션 대신 SO_EXCLUSIVEADDRUSE 사용하도록 변경하였다.

  • 관련이슈 : IMS-93718

3.3.2. JEUS로부터 받은 응답에 대한 access log를 남길 때 사용하는 rcode 값 변경

  • JEUS로부터 응답을 받아 처리한 경우 access log를 남길 때 기존에는 마지막 메시지의 rdode 값을 사용하였으나, 첫 번째 받은 메시지의 Response status code를 사용하도록 변경하였다.

  • 관련이슈 : IMS-88401

3.3.3. Sun Sparc 장비에서 AES cipher 오류로 인한 OpenSSL 바이너리 변경

  • Sun Sparc에서 AES 암호화 알고리즘을 사용하는 경우 정상 동작하지 않는 문제가 있었다. 이는 cc(SunStudio11) 사용하여 컴파일할 때 발생할 수 있는 문제로 SunOS Sparc 서버의 cc compiler에 대한 패치를 진행하였다.

  • 관련이슈 : IMS-94411

3.3.4. 클라이언트가 미리 연결을 끊은 경우에도 POST 요청에 대한 body가 항상 JEUS로 전달되도록 변경

  • 클라이언트가 body data를 Content-Length 만큼 다 보내지 않은 상태에서 연결을 미리 끊은 경우, 기존에는 WebtoB는 클라이언트 연결과 해당 서버의 연결을 끊고 남은 body를 버렸으나, 클라이언트로부터 받은 데이터를 body data에 대해 (클라이언트가 close하더라도) 해당 서버로 전달하도록 변경하였다.

    해당 기능을 사용하기 위해서는 다음을 추가하여야 한다.

    *NODE.Options="ProcessIncompleteRequest" 
  • 관련이슈 : IMS-95420

3.3.5. *NODE.LimitRequestFieldSize, *NODE.LimitRequestLine MAX 값 변경

  • *NODE 절의 LimitRequestFieldSize 및 LimitRequestLine의 Max 값이 기존 8KB에서 16KB로 변경되었다.

    [예 3.4] *NODE.LimitRequestFieldSize, LimitRequestLine MAX 값 변경

    *NODE
    webtob    ...         
            LimitRequestFieldSize = Numeric,    # 8190 (0-16382)
            LimitRequestLine = Numeric,         # 8190 (0-16382)
              ...

  • 관련이슈 : IMS-92139

3.3.6. SSL을 사용하는 경우 RequiredCiphers 기본값 변경

  • RequiredCiphers의 기본값을 "ALL:!ADH:!EXPORT56:RC4+RSA:!SHA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL"에서 "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP" 로 변경하였다.

    [예 3.5] RequiredCophers 변경 내용

    RequiredCiphers = "HIGH:MEDIUM:!SSLv2:!PSK:!SRP:!ADH:!AECDH:!EXP"
    

3.3.7. SysMaster 3 버전 지원을 위해 usrinc/wsadmin.h에 MAX_NUM_HTH 값을 20에서 100으로 변경

  • *NODE.HTH의 최대 설정 가능한 수를 20에서 100으로 변경한 이후에 발생한 문제로 usrinc/wsadmin.h에 MAX_NUM_HTH 값을 20에서 100으로 변경하여 SysMaster 3에서 WEBADM이 정상동작하지 않는 오류가 수정되었다.

  • 관련이슈 : IMS-96515

3.3.8. HTH0291, HTH0365 로그 레벨을 Warning에서 Debug로 변경

  • 해당 로그는 JEUS에서 WebtoB reconnect 후(또는 chunk 응답 완료후) 아래와 같이 알수 없는 메시지를 보내는 경우에 발생하는데, 이는 known bug로 해당 로그 레벨을 Warning에서 Debug로 변경하였다.

  • 관련이슈 : IMS-98223

3.3.9. HTH0486 메시지의 로그 레벨을 Debug에서 Warn으로 변경

  • 해당 로그는 중간에 방화벽 등으로 인해 JSV connection이 RUN 상태로 오래 지속되는 경우 발생할 수 있는 로그이다. 해당 현상에 대해 자세한 분석을 할 수 있도록 해당 로그 레벨을 Debug에서 Warning으로 변경하였다.

3.3.10. *SERVER.HttpOutBufSize를 0으로 설정할 때 동작방식 변경

  • (FlowControl 값이 default 50인 경우) 기존에는 HttpOutBufSize를 0으로 설정하였을 경우 Max HttpOutBufSize인 16MB를 사용하게 되어 FlowControl 버퍼 사이즈가 800MB 정도로 큰 값을 사용하여 malloc fail 현상이 발생할 수 있는 문제가 있었다. 그리하여 HttpOutBufSize를 0으로 설정하였을 경우 FlowControl 버퍼를 만들때는 8KB를 사용하도록 변경하였다. 즉 변경 후에는 FlowControl 버퍼 사이즈가 400KB정도가 된다.

  • 관련이슈 : IMS-97655

3.3.11. WBSSL 버전 업그레이드

  • WBSSL의 버전을 기존의 "WBSSL 1.0.1j"에서 "WBSSL 2.2.2"로 업그레이드하였다.

    최근 계속해서 발생하는 OpenSSL의 보안 취약점 문제를 해결하기 위하여 SSL/TLS 통신 프로토콜 처리 부분을 개선한 OpenSSL 대체 라이브러리를 포함하였다.

    [예 3.6] WBSSL 변경 내용

    $>wbssl version
    WBSSL 2.2.2 05 Aug 2015

  • 관련이슈 : IMS-90114

3.3.12. SSL을 사용하는 경우 Protocols 기본값 변경

  • Protocols의 기본값을 "SSLv2, SSLv3, TLSv1, TLSv1.1, TLSv1.2"에서 "SSLv3, TLSv1, TLSv1.1, TLSv1.2"로 변경하였다.

    [예 3.7] Protocols 변경 내용

    Protocols = "SSLv3, TLSv1, TLSv1.1, TLSv1.2"
    

3.4. 버그 패치

3.4.1. Reverse Proxy 사용 중 클라이언트가 응답 받기 전 미리 연결을 끊은 경우 memory leak 버그 수정

  • Reverse Proxy 사용 중 클라이언트가 응답을 받기 전 연결을 끊은 경우에 대해 Request를 담고 있는 메모리가 해제되지 않는 경우에 즉, errorlog에 "RPROXY : premature client close.."가 남는 경우 memory leak이 발생할 수 있는 문제가 수정되었다.

  • 관련이슈 : IMS-93593

3.4.2. Reverse Proxy를 사용하는 경우 HTH의 CPU 점유율이 높아지는 오류 수정

  • Reverse Proxy를 사용하는 경우 내부 context가 동기화 되지 않은 경우에 발생하며, 반복적인 "HTH0121" 로그가 발생하여 CPU 점유율이 높아지는 오류가 수정되었다.

  • 관련이슈 : IMS-97301

3.4.3. WJPv2를 사용할 때 JEUS로 전달하는 요청 URL 값이 항상 URL decode되어 있는 오류 수정

  • Request uri를 WJPv2로 사용하여 JEUS로 전달할 때 query string을 제외한 WJPv1과 동일한 원래의 request가 전달되도록 수정되었다.

3.4.4. ForceCacheModificationCheck=Y인 경우, directory 요청에 대한 응답을 정상처리하지 못하는 오류 수정

  • ForceCacheModificationCheck=Y로 설정할 때 Location Response Header가 포함되지 않아서 클라이언트(브라우저)가 redirect를 하지 못하는 오류가 수정되었다.

  • 관련이슈 : IMS-97699

3.4.5. Windows-IOCP 적용한 버전에서 응답을 다 보내지 않은 채로 기다리는 오류 수정

  • Windows에서 IOCP를 사용할 때 size가 0인 경우를 체크하지 않고 write event를 호출하여 "HTML: premature client close" 에러 메시지를 남기며 클라이언트 연결이 끊어졌다고 판단하는 버그가 수정되었다.

  • 관련이슈 : IMS-95461, IMS-99321

3.4.6. wsadmin > restat 명령을 사용할 때 JSV(st -j) 통계가 초기화 되지 않는 오류 수정

  • wsadmin에서 restat 명령을 수행하였을 경우 st -j, st -rp, st -rpg 등의 명령어를 통해 확인할 수 있는 통계정보가 초기화되지 않는 오류가 수정되었다.

  • 관련이슈 : IMS-99714

3.4.7. chunked data를 다 받았음에도 불구하고 HTH0473 로그가 발생하며 JSV connection이 끊어지는 오류 수정

  • chunked data를 다 파싱하고 났을 때 더 이상 남은 request body가 없다는 것을 체크하지 못하고 "HTH0473" 로그를 남기며 JEUS와 연결이 끊어지는 오류를 수정하였다.

  • 관련이슈 : IMS-99965

3.4.8. *NODE.CacheMaxFileSize 설정값이 크고, Pipelined Request될 때 HTH0381 로그가 발생하거나 Memory Leak 버그 수정

  • HTH가 caching된 item으로 클라이언트에게 응답할 때 소켓에 다 write하기전에 이미 status를 READY로 변경해 버리는 문제로 인해 "HTH0381" 로그가 syslog에 남을 수 있는 오류를 수정하였다.

  • 관련이슈 : IMS-99701

3.4.9. JSV Response를 compression 하기 위한 과정에서 무한 loop에 빠질 수 있는 오류 수정

  • HTH는 JSV Response를 read() 한후 offset을 옮겨가며 이를 parsing하여 compression을 위해 HTMLS로 넘겨주는데 이때 JSV Response 를 read()한 버퍼가 full 이고, 내부 WJP header/body offset이 정확히 buffer의 끝에 있을 때 HTH가 무한 loop에 빠질 수 있는 오류를 수정하였다.

    참고

    WebtoB 4.1 SP5 Fix#3 이상 WebtoB 4.1 SP8 Fix#1 이하 버전에서 발생하는 오류 현상이다.

  • 관련이슈 : IMS-100466

3.4.10. HTH가 WSM에 로그 메시지를 write할 때 incomplete 상태인 경우 HTH가 restart 될 수 있는 오류 수정

  • HTH에서 WSM에게 로그 메시지를 file에 써 달라고 요청하는 과정에서 한번에 다 못쓰는 경우에 HTH가 Length 계산을 잘못하면서 WSM에게 데이터를 잘못 보내는 오류를 수정하였다.

    참고

    WebtoB 4.1 SP5 Fix#0 이상 WebtoB 4.1 SP8 Fix#1 이하 버전에서 발생하는 오류 현상이다.

  • 관련이슈 : IMS-98890