[WebSphere Liberty] securityUtility๋กœ SSL ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ AES ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ์„ค์ • ๊ฐ€์ด๋“œ

WebSphere Liberty์˜ securityUtility ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ์„œ๋ช…๋œ(Self-Signed) SSL ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Keystore ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ AES๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค (Context)

Liberty ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ ํŽธ์˜๋ฅผ ์œ„ํ•ด SSL ์„ค์ •์„ ์ž๋™ํ™”ํ•˜์ง€๋งŒ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ช…์‹œ์ ์ธ ์ธ์ฆ์„œ ๊ด€๋ฆฌ์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณด์•ˆ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. securityUtility๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ฆ์„œ ์ƒ์„ฑ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”(Encoding)๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • Middleware: WebSphere Liberty Profile (WLP)
  • Server Name: s11, s12

1. SSL ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ ์•”ํ˜ธํ™” (Create Certificate)

securityUtility createSSLCertificate ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค์Šคํ† ์–ด(PKCS12)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ --passwordEncoding=aes ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ • ํŒŒ์ผ์— ๋“ค์–ด๊ฐˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด ๊ตฌ๋ฌธ

# ๊ตฌ๋ฌธ: securityUtility createSSLCertificate --server=[์„œ๋ฒ„๋ช…] --password=[ํ‚คํŒจ์Šค์›Œ๋“œ] --validity=[์œ ํšจ๊ธฐ๊ฐ„์ผ์ˆ˜] --passwordEncoding=aes --passwordKey=[์•”ํ˜ธํ™”ํ‚ค]

cd $WLP_HOME/bin
./securityUtility createSSLCertificate --server=s11 --password=passw0rd --validity=7300 --passwordEncoding=aes --passwordKey=passw0rd

์‹คํ–‰ ๊ฒฐ๊ณผ

ํ‚ค ์ €์žฅ์†Œ /sw/was/WebSphere/wlp/usr/servers/s11/resources/security/key.p12์„(๋ฅผ) ์ž‘์„ฑํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„ s11์— ๋Œ€ํ•œ SSL ์ธ์ฆ์„œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. 
์ด ์ธ์ฆ์„œ๋Š” CN=testwas11,OU=s11์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ SubjectDN์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Tip: ์—ฌ๊ธฐ์„œ ์ƒ์„ฑ๋œ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ(key.p12)์€ usr/servers/[์„œ๋ฒ„๋ช…]/resources/security/ ๊ฒฝ๋กœ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„ ์„ค์ • ์ ์šฉ (server.xml)

์œ„์—์„œ ์ƒ์„ฑ๋œ ์ธ์ฆ์„œ๋ฅผ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก server.xml์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถ€๋ถ„์— {aes}... ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<server description="SSL Server">

    <!-- 1. SSL ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” -->
    <featureManager>
        <feature>transportSecurity-1.0</feature>
    </featureManager>

    <!-- 2. Keystore ์ •์˜ (๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์•”ํ˜ธํ™”๋œ ๊ฐ’ ์‚ฌ์šฉ) -->
    <keyStore id="defaultKeyStore" 
              location="key.p12"
              password="{aes}AJS+VEek/Fgo/zp46z8cuIUMTbnMM7sJVmPPbT49n4s6" />

</server>

3. ์•”ํ˜ธํ™” ํ‚ค ๋“ฑ๋ก (bootstrap.properties)

server.xml์— ์ ํžŒ {aes} ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„๊ฐ€ ๋ณตํ˜ธํ™”ํ•˜๋ ค๋ฉด, ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ–ˆ๋˜ Key๋ฅผ ์„œ๋ฒ„์— ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ bootstrap.properties ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ํŒŒ์ผ ์œ„์น˜: usr/servers/[์„œ๋ฒ„๋ช…]/bootstrap.properties
# securityUtility ์‹คํ–‰ ์‹œ --passwordKey ์˜ต์…˜์— ๋„ฃ์—ˆ๋˜ ๊ฐ’
wlp.password.encryption.key=passw0rd
์ฃผ์˜: ์ด ์„ค์ •์ด ๋ˆ„๋ฝ๋˜๋ฉด ์„œ๋ฒ„ ๊ธฐ๋™ ์‹œ CWWKS1704E: ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณตํ˜ธํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

4. ์ธ์ฆ์„œ ๊ฒ€์ฆ (Verification)

์ƒ์„ฑ๋œ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ์ด ์ •์ƒ์ ์ธ์ง€, ์œ ํšจ๊ธฐ๊ฐ„์€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด JDK์— ํฌํ•จ๋œ keytool ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ฆ ๋ช…๋ น์–ด

# keytool -list -v -keystore [ํŒŒ์ผ๊ฒฝ๋กœ] -storetype PKCS12 -storepass [๋น„๋ฐ€๋ฒˆํ˜ธ]
./keytool -list -v -keystore /sw/was/WebSphere/wlp/usr/servers/s12/resources/security/key.p12 -storetype PKCS12 -storepass passw0rd

์ถœ๋ ฅ ๊ฒฐ๊ณผ ๋ถ„์„

ํ‚ค ์ €์žฅ์†Œ ์œ ํ˜•: PKCS12
ํ‚ค ์ €์žฅ์†Œ ์ œ๊ณต์ž: SUN

๋ณ„์นญ ์ด๋ฆ„: default
์ƒ์„ฑ ๋‚ ์งœ: 2024. 6. 12.
ํ•ญ๋ชฉ ์œ ํ˜•: PrivateKeyEntry
์ธ์ฆ์„œ ์ฒด์ธ ๊ธธ์ด: 2

# ์œ ํšจ๊ธฐ๊ฐ„ ํ™•์ธ
์ ํ•ฉํ•œ ์‹œ์ž‘ ๋‚ ์งœ: Wed Jun 12 16:47:57 KST 2024 
์ข…๋ฃŒ ๋‚ ์งœ: Tue Jun 07 16:47:57 KST 2044 (์•ฝ 20๋…„)

# ์†Œ์œ ์ž ๋ฐ ์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ™•์ธ
์†Œ์œ ์ž: CN=testwas11, OU=s12, O=ibm, C=us
์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„: SHA256withRSA
์ฃผ์ฒด ๊ณต์šฉ ํ‚ค ์•Œ๊ณ ๋ฆฌ์ฆ˜: 2048๋น„ํŠธ RSA ํ‚ค

Next Step:
์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ(Self-Signed)๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” CSR์„ ์ƒ์„ฑํ•˜์—ฌ ๊ณต์ธ ์ธ์ฆ๊ธฐ๊ด€(CA)์˜ ์„œ๋ช…์„ ๋ฐ›์€ ํ›„ keytool -import ๋ช…๋ น์–ด๋กœ ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[JBoss EAP 7] ๋ณด์•ˆ ํ—ค๋” ์ˆจ๊ธฐ๊ธฐ: Server ๋ฐ X-Powered-By ์ •๋ณด ๋…ธ์ถœ ๋ฐฉ์ง€ (Undertow Filter ์„ค์ •)

JBoss EAP 7.4 (Undertow)์˜ HTTP ์‘๋‹ต ํ—ค๋”์— ๋…ธ์ถœ๋˜๋Š” ์„œ๋ฒ„ ๋ฒ„์ „ ์ •๋ณด(Server: JBoss-EAP/7, X-Powered-By: JSP/2.3)๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. CLI ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ JSP ์„ค์ • ๋ณ€๊ฒฝ๊ณผ ํ•„ํ„ฐ(Filter) ์ ์šฉ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ ํ˜„์ƒ (Issue)

๊ธฐ๋ณธ ์„ค์ • ์ƒํƒœ์—์„œ JBoss EAP 7.4๋Š” ์‘๋‹ต ํ—ค๋”์— ๊ตฌ์ฒด์ ์ธ ๋ฏธ๋“ค์›จ์–ด ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณต๊ฒฉ์ž์—๊ฒŒ ์„œ๋ฒ„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‹จ์„œ๊ฐ€ ๋˜๋ฏ€๋กœ ๋ณด์•ˆ ์ทจ์•ฝ์ ์œผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.

๋…ธ์ถœ๋˜๋Š” ํ—ค๋” ์˜ˆ์‹œ

HTTP/1.1 200 OK
X-Powered-By: Undertow/1
X-Powered-By: JSP/2.3
Server: JBoss-EAP/7
...

2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (Resolution Plan)

์กฐ์น˜๋Š” ํฌ๊ฒŒ ๋‘ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ① JSP ์—”์ง„์ด ์ž๋™์œผ๋กœ ๋ถ™์ด๋Š” ํ—ค๋” ๋น„ํ™œ์„ฑํ™”, ② Undertow ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Server ํ—ค๋” ๋ฎ์–ด์“ฐ๊ธฐ์ž…๋‹ˆ๋‹ค.

Step 1: X-Powered-By (JSP) ๋น„ํ™œ์„ฑํ™”

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์—์„œ JSP ์—”์ง„์ด ํ•ด๋‹น ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

[JBoss CLI ๋ช…๋ น์–ด]

# JSP ์„ค์ •์˜ x-powered-by ์†์„ฑ์„ false๋กœ ๋ณ€๊ฒฝ
/subsystem=undertow/servlet-container=default/setting=jsp:write-attribute(name=x-powered-by,value=false)

# ์„ค์ • ์ ์šฉ์„ ์œ„ํ•œ ๋ฆฌ๋กœ๋“œ (ํ•„์š”์‹œ)
reload
ํ™•์ธ: ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ๋„ Configuration > Subsystems > Undertow > Servlet Container > JSP ํ•ญ๋ชฉ์—์„œ X-Powered-By ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ํ•ด์ œ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 2: Server ํ—ค๋” ๋ณ€๊ฒฝ/์‚ญ์ œ (Undertow Filter)

Server ํ—ค๋”๋Š” ์—”์ง„ ๋ ˆ๋ฒจ์—์„œ ๋ถ™๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ์•„์˜ˆ ์‚ญ์ œ๊ฐ€ ์–ด๋ ต๋‹ค๋ฉด, ํ•„ํ„ฐ(Filter)๋ฅผ ํ†ตํ•ด ๋ฌด์˜๋ฏธํ•œ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ๋Š”(Override) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

[JBoss CLI ๋ช…๋ น์–ด]

# 1. ํ—ค๋” ๋ณ€๊ฒฝ์šฉ ํ•„ํ„ฐ ์ƒ์„ฑ (์ด๋ฆ„: server-header, ๊ฐ’: "Apache" ๋˜๋Š” ๋นˆ ๊ฐ’)
/subsystem=undertow/configuration=filter/response-header=server-header:add(header-name="Server", header-value="Apache")

# 2. X-Powered-By (Undertow) ํ—ค๋” ์ œ๊ฑฐ ํ•„ํ„ฐ ์ƒ์„ฑ (ํ•„์š” ์‹œ)
/subsystem=undertow/configuration=filter/response-header=x-powered-by-header:add(header-name="X-Powered-By", header-value="Unknown")

# 3. ์ƒ์„ฑํ•œ ํ•„ํ„ฐ๋ฅผ ๊ธฐ๋ณธ ํ˜ธ์ŠคํŠธ(default-host)์— ์ ์šฉ
/subsystem=undertow/server=default-server/host=default-host/filter-ref=server-header:add
/subsystem=undertow/server=default-server/host=default-host/filter-ref=x-powered-by-header:add
Tip: header-value์— ๋นˆ ๊ฐ’("")์„ ๋„ฃ๊ฑฐ๋‚˜ ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„ ์ด๋ฆ„("Webserver")์„ ๋„ฃ์–ด ๊ณต๊ฒฉ์ž์—๊ฒŒ ํ˜ผ๋™์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์กฐ์น˜ ๊ฒฐ๊ณผ ํ™•์ธ (Verification)

์„ค์ • ์ ์šฉ ํ›„ curl ๋ช…๋ น์–ด๋‚˜ ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์‘๋‹ต ํ—ค๋”๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์ „ํ›„ ๋น„๊ต

ํ—ค๋”(Header) ๋ณ€๊ฒฝ ์ „ (Before) ๋ณ€๊ฒฝ ํ›„ (After)
Server JBoss-EAP/7 Apache (์„ค์ •ํ•œ ๊ฐ’)
X-Powered-By JSP/2.3, Undertow/1 (์‚ญ์ œ๋จ) ๋˜๋Š” Unknown
Security Header Verification

[๊ทธ๋ฆผ] ์กฐ์น˜ ํ›„ ํ—ค๋” ์ •๋ณด ๋…ธ์ถœ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

[WebSphere] native_stderr ๋กœ๊ทธ ๋น„๋Œ€ํ™” ํ•ด๊ฒฐ: Verbose GC ๋กœ๊ทธ ๋ถ„๋ฆฌ ๋ฐ ๋กœํ…Œ์ด์…˜ ์„ค์ •

WebSphere์˜ native_stderr.log ํŒŒ์ผ์—๋Š” ๋กœํ…Œ์ด์…˜(Rotation) ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Verbose GC๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ๋ฌดํ•œ์ • ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด JVM ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ GC ๋กœ๊ทธ๋ฅผ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์ˆœํ™˜์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ์›์ธ ๋ถ„์„ (Root Cause)

WebSphere๋Š” SystemOut.log์™€ SystemErr.log์— ๋Œ€ํ•ด์„œ๋Š” ์‹œ๊ฐ„/ํฌ๊ธฐ ๊ธฐ๋ฐ˜์˜ ๋กœ๊ทธ ์ˆœํ™˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, JVM ํ”„๋กœ์„ธ์Šค ์ž์ฒด์˜ ์ถœ๋ ฅ์„ ๋‹ด๋Š” native ๋กœ๊ทธ๋Š” WAS๊ฐ€ ์ œ์–ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ์ : ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ "Verbose garbage collection"์„ ์ฒดํฌํ•˜๋ฉด, GC ์ˆ˜ํ–‰ ๊ธฐ๋ก์ด native_stderr.log์— ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ: ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํŒŒ์ผ์ด GB ๋‹จ์œ„๋กœ ์ปค์ง€๋ฉฐ, ๋””์Šคํฌ Full ์žฅ์• ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (3.10.0-957.el7.x86_64)
  • WAS: WebSphere Application Server v8.5 / 9.0
  • JDK: IBM JDK (WebSphere ๊ธฐ๋ณธ)

2. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: GC ๋กœ๊ทธ ๋ถ„๋ฆฌ ์„ค์ •

ํ•ด๊ฒฐ์˜ ํ•ต์‹ฌ์€ native ๋กœ๊ทธ์— GC ๋‚ด์šฉ์„ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ , ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋นผ๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” JDK ๋ฒค๋”์— ๋”ฐ๋ผ ์˜ต์…˜์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Step 1: ๊ธฐ๋ณธ Verbose GC ๋น„ํ™œ์„ฑํ™”

JVM ์˜ต์…˜์œผ๋กœ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด, ์ฝ˜์†”์˜ ์ฒดํฌ๋ฐ•์Šค ์˜ต์…˜์€ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฝ๋กœ: ์„œ๋ฒ„ > ์„œ๋ฒ„ ์œ ํ˜• > WebSphere Application Server > [์„œ๋ฒ„๋ช…] > Java ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ > ํ”„๋กœ์„ธ์Šค ์ •์˜ > Java ๊ฐ€์ƒ ๋จธ์‹ 
  • ์กฐ์น˜: Verbose garbage collection ์ฒดํฌ๋ฐ•์Šค ํ•ด์ œ (Uncheck)
Disable Verbose GC Checkbox

[๊ทธ๋ฆผ] ๊ธฐ๋ณธ Verbose GC ์˜ต์…˜ ํ•ด์ œ

Step 2: ์ผ๋ฐ˜ JVM ์ธ์ˆ˜(Generic JVM arguments) ์ถ”๊ฐ€

๊ฐ™์€ ํ™”๋ฉด์˜ Generic JVM arguments ์ž…๋ ฅ๋ž€์— ์•„๋ž˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Case A: IBM JDK ์‚ฌ์šฉ ์‹œ (WebSphere ๊ธฐ๋ณธ)

IBM JDK๋Š” -Xverbosegclog ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ํŒŒ์ผ ๊ฒฝ๋กœ์™€ ๋กœํ…Œ์ด์…˜ ๊ทœ์น™์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

# ๊ตฌ๋ฌธ: -Xverbosegclog:[๊ฒฝ๋กœ/ํŒŒ์ผ๋ช…][,X,Y]
# X: ํŒŒ์ผ ๊ฐœ์ˆ˜, Y: ํŒŒ์ผ๋‹น GC ์‚ฌ์ดํด ์ˆ˜

# ์˜ˆ์‹œ 1: ๋‚ ์งœ/PID ํฌํ•จํ•˜์—ฌ ๋‹จ์ผ ํŒŒ์ผ ์ƒ์„ฑ (๊ฐ€์žฅ ์ผ๋ฐ˜์ )
-Xverbosegclog:${SERVER_LOG_ROOT}/gc.%Y%m%d.%H%M%S.%pid.txt

# ์˜ˆ์‹œ 2: 10,000 ์‚ฌ์ดํด๋งˆ๋‹ค ํŒŒ์ผ ๊ต์ฒด, ์ด 10๊ฐœ ํŒŒ์ผ ์œ ์ง€ (๋กœํ…Œ์ด์…˜)
-Xverbosegclog:${SERVER_LOG_ROOT}/verbosegc.log,10,10000

Case B: Oracle/HotSpot JDK ์‚ฌ์šฉ ์‹œ

๋“œ๋ฌผ์ง€๋งŒ Solaris๋‚˜ ํŠน์ • ํ™˜๊ฒฝ์—์„œ HotSpot ๊ณ„์—ด JDK๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

-verbose:gc
-Xloggc:${SERVER_LOG_ROOT}/verbosegc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=20M
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
Tip: ${SERVER_LOG_ROOT} ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ ๋Œ€์‹  ๊ฐ ์„œ๋ฒ„์˜ ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„๊ฐ€๋ฏ€๋กœ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

3. ์ ์šฉ ํ™•์ธ (Verification)

  1. ์„ค์ • ์ €์žฅ ํ›„ ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ps -ef | grep java ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ–ˆ์„ ๋•Œ, ์ถ”๊ฐ€ํ•œ ์˜ต์…˜์ด ์ ์šฉ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ(logs/[์„œ๋ฒ„๋ช…]/)์— gc...txt ๋˜๋Š” ์„ค์ •ํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
GC Log File Created

Next Step:
๋ถ„๋ฆฌ๋œ GC ๋กœ๊ทธ ํŒŒ์ผ์€ IBM GCMV (Garbage Collection and Memory Visualizer) ๋„๊ตฌ์— ๋„ฃ์–ด ๋ถ„์„ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ํŠœ๋‹ ํฌ์ธํŠธ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[WebSphere] Log4j ๋ณด์•ˆ ์ทจ์•ฝ์ (Log4Shell) ๊ธด๊ธ‰ ๋Œ€์‘: kc.war ๋ฐ uddi.ear ์กฐ์น˜ ๊ฐ€์ด๋“œ

Apache Log4j ์ทจ์•ฝ์ (CVE-2021-44228 ๋“ฑ)์ด IBM WebSphere Application Server(WAS)์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. WAS 9.0์˜ ๊ด€๋ฆฌ ์ฝ˜์†” ๋„์›€๋ง(kc.war)๊ณผ ์ „ ๋ฒ„์ „์˜ UDDI ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(uddi.ear)์— ํฌํ•จ๋œ ์ทจ์•ฝํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ž„์‹œ ์กฐ์น˜(Mitigation) ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1. ์˜ํ–ฅ๋ฐ›๋Š” ์ œํ’ˆ ๋ฐ ๋ฒ„์ „ (Affected Products)

์‚ฌ์‹ค์ƒ ํ˜„์žฌ ์šด์˜ ์ค‘์ธ ๋Œ€๋ถ€๋ถ„์˜ WebSphere ๋ฒ„์ „์ด ์ง๊ฐ„์ ‘์ ์ธ ์˜ํ–ฅ๊ถŒ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ œํ’ˆ (Product) ์˜ํ–ฅ ๋ฒ„์ „ (Versions)
WebSphere Application Server (Traditional) 9.0, 8.5, 8.0, 7.0
WebSphere Liberty Continuous Delivery (All)

2. ์ทจ์•ฝ์  ์ƒ์„ธ ๋ฐ ์กฐ์น˜ ๊ฐ€์ด๋“œ (Remediation)

WAS ์—”์ง„ ์ž์ฒด๋ณด๋‹ค๋Š” ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋ฉด ๊ณผ๊ฐํ•˜๊ฒŒ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

Case A: WAS 9.0 - kc.war (๊ด€๋ฆฌ ์ฝ˜์†” ๋„์›€๋ง)

WAS 9.0 ๊ด€๋ฆฌ ์ฝ˜์†”์˜ '๋„์›€๋ง(Knowledge Center)' ๊ธฐ๋Šฅ์— Log4j 2.x ์ทจ์•ฝ ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ: WAS 9.0 ์‚ฌ์šฉ์ž
  • ์กฐ์น˜ ๋ฐฉ๋ฒ•: ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ ์‚ญ์ œ
# 1. ๋ฐฐํฌ๋œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ฑฐ
rm -f [WAS_HOME]/systemApps/isclite.ear/kc.war/WEB-INF/lib/log4j*.jar

# 2. ์„ค์น˜ ๊ฐ€๋Šฅ ์•ฑ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์›๋ณธ ์•ฑ ์ œ๊ฑฐ (์žฌ์„ค์น˜ ๋ฐฉ์ง€)
rm -rf [WAS_HOME]/installableApps/kc.war

# 3. ์„œ๋ฒ„ ์žฌ๊ธฐ๋™
./stopServer.sh server1 && ./startServer.sh server1
์ฃผ์˜: ํ–ฅํ›„ 9.0.5.11 ์ด์ „์˜ ํ”ฝ์ŠคํŒฉ์„ ์ ์šฉํ•˜๋ฉด ์‚ญ์ œํ•œ ํŒŒ์ผ์ด ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํŒจ์น˜ ํ›„ ๋‹ค์‹œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Case B: ์ „ ๋ฒ„์ „ - uddi.ear (UDDI ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ)

UDDI(Universal Description, Discovery, and Integration) ์„œ๋น„์Šค์— Log4j ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ: WAS 7.0 ~ 9.0 ์ „์ฒด
  • ์กฐ์น˜ ๋ฐฉ๋ฒ•: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒŒ์ผ ์‚ญ์ œ
# ๋ฏธ์‚ฌ์šฉ ์‹œ (๊ถŒ์žฅ)
rm -f [WAS_HOME]/installableApps/uddi.ear

# ์‚ฌ์šฉ ์ค‘์ผ ๊ฒฝ์šฐ (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ต์ฒด/์‚ญ์ œ ํ›„ ์žฌ๋ฐฐํฌ ํ•„์š”)
# uddi.ear ์••์ถ• ํ•ด์ œ -> log4j*.jar ์‚ญ์ œ -> ๋‹ค์‹œ ์••์ถ• -> Redeploy

3. Log4j 1.x ๊ด€๋ จ ์ถ”๊ฐ€ ์กฐ์น˜ (CVE-2021-4104)

Log4j 1.x ๋ฒ„์ „์€ Log4Shell(RCE) ์ทจ์•ฝ์ ์˜ ์ง์ ‘์ ์ธ ๋Œ€์ƒ์€ ์•„๋‹ˆ์ง€๋งŒ, JMSAppender๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์œ ์‚ฌํ•œ ๊ณต๊ฒฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (WAS ๊ธฐ๋ณธ ์„ค์ •์—๋Š” JMSAppender๊ฐ€ ์—†์œผ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)

์กฐ์น˜ ๋ฐฉ๋ฒ• (JMSAppender ์ œ๊ฑฐ)

Log4j 1.x๋Š” ๋” ์ด์ƒ ๋ณด์•ˆ ํŒจ์น˜๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์œผ๋ฏ€๋กœ(EOL), ์ทจ์•ฝํ•œ ํด๋ž˜์Šค ํŒŒ์ผ๋งŒ ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

# ์‹œ์Šคํ…œ ์ „์ฒด์—์„œ log4j-1.2.x.jar ํŒŒ์ผ์„ ์ฐพ์•„ JMSAppender ํด๋ž˜์Šค ์ œ๊ฑฐ
zip -q -d log4j-1.2.17.jar org/apache/log4j/net/JMSAppender.class

4. ์ฐธ๊ณ  ์ž๋ฃŒ (Reference)

Summary:
WAS ์šด์˜ํŒ€์€ kc.war์™€ uddi.ear ๋‚ด์˜ log4j ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ , ๊ฐœ๋ฐœํŒ€์€ ๋ฐฐํฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(WAR/EAR) ๋‚ด์— ์ทจ์•ฝํ•œ Log4j ๋ฒ„์ „์ด ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ๋นŒ๋“œ ์˜์กด์„ฑ์„ ์ ๊ฒ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[IBM HTTPServer] SSL ์ธ์ฆ์„œ ์ ์šฉ ๊ฐ€์ด๋“œ: PEM → P12 → KDB ๋ณ€ํ™˜ ๋ฐ gskcapicmd ์‚ฌ์šฉ๋ฒ•

์ผ๋ฐ˜์ ์ธ ์ธ์ฆ์„œ ํŒŒ์ผ(PEM/Key)์„ IBM HTTP Server(IHS)์—์„œ ์‚ฌ์šฉํ•˜๋Š” CMS ํ‚ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(KDB) ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. OpenSSL์„ ์ด์šฉํ•ด P12๋กœ 1์ฐจ ๋ณ€ํ™˜ ํ›„, IBM GSKit(gskcapicmd)์„ ์ด์šฉํ•ด KDB๋กœ ์ตœ์ข… ๋ณ€ํ™˜ ๋ฐ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ๋ฐ ํ”„๋กœ์„ธ์Šค (Workflow)

IHS๋Š” OpenSSL ๊ธฐ๋ฐ˜์ด ์•„๋‹Œ IBM ๊ณ ์œ ์˜ ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(GSKit)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€ํ™˜ ๊ณผ์ •์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

  • Step 1: .key + .pem.p12 (OpenSSL ์‚ฌ์šฉ)
  • Step 2: .p12.kdb (gskcapicmd ์‚ฌ์šฉ)

Test Environment

  • OS: Linux / Unix
  • Web Server: IBM HTTP Server v9.0 (v8.5 ์ด์ƒ ๋™์ผ)
  • Tool: OpenSSL, gskcapicmd (IHS bin ํด๋” ๋‚ด์žฅ)

1. PEM์„ P12๋กœ ๋ณ€ํ™˜ (OpenSSL)

๊ฐœ์ธํ‚ค(Private Key)์™€ ์ธ์ฆ์„œ(Certificate)๋ฅผ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€ ํฌ๋งท์ธ PKCS#12(.p12)๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

# ๊ตฌ๋ฌธ: openssl pkcs12 -export -inkey [๊ฐœ์ธํ‚ค] -in [์ธ์ฆ์„œ] -out [์ถœ๋ ฅํŒŒ์ผ๋ช…]
openssl pkcs12 -export -inkey Wildcard.test.co.kr.key -in Wildcard.test.co.kr.pem -out Wildcard.test.co.kr.p12
์ฃผ์˜ (Password):
๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ Export Password๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ KDB๋กœ ์ž„ํฌํŠธํ•  ๋•Œ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2. P12๋ฅผ KDB๋กœ ๋ณ€ํ™˜ (GSKit)

IHS์˜ bin ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” gskcapicmd(๋˜๋Š” gskcmd)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

2-1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (ํ•„์ˆ˜)

GSKit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ์žก์•„์ฃผ์–ด์•ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

# IHS ์„ค์น˜ ๊ฒฝ๋กœ ์˜ˆ์‹œ (/sw/web/IHS9)
export LD_LIBRARY_PATH=/sw/web/IHS9/lib:$LD_LIBRARY_PATH
cd /sw/web/IHS9/bin

2-2. ์‹ ๊ทœ KDB ์ƒ์„ฑ (์—†๋Š” ๊ฒฝ์šฐ)

๊ธฐ์กด KDB๊ฐ€ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. -stash ์˜ต์…˜์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํŒŒ์ผ(.sth)๋กœ ์ €์žฅํ•˜์—ฌ ์›น ์„œ๋ฒ„ ๊ธฐ๋™ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.

./gskcapicmd -keydb -create -db key.kdb -pw [KDBํŒจ์Šค์›Œ๋“œ] -type cms -stash

2-3. P12 ํŒŒ์ผ ์ž„ํฌํŠธ (Import)

์ƒ์„ฑ๋œ(๋˜๋Š” ๊ธฐ์กด) KDB ํŒŒ์ผ์— ์œ„์—์„œ ๋งŒ๋“  P12 ์ธ์ฆ์„œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.

./gskcapicmd -cert -import \
-db /sw/img/Wildcard.test.co.kr.p12 -pw [P12ํŒจ์Šค์›Œ๋“œ] \
-target key.kdb -target_pw [KDBํŒจ์Šค์›Œ๋“œ] \
-label "*.test.co.kr"
์ฐธ๊ณ  (Export vs Import):
์งˆ๋ฌธํ•˜์‹  ๋‚ด์šฉ ์ค‘ -export๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ P12๋ฅผ KDB๋กœ ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‹ค๋ฌด์—์„œ๋Š” ๊ธฐ์กด KDB์— ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€(Import)ํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ -import ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

3. ๊ธฐ๋ณธ ์ธ์ฆ์„œ ์„ค์ • ๋ฐ ๊ฒ€์ฆ

KDB ์•ˆ์— ์—ฌ๋Ÿฌ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์–ด๋–ค ์ธ์ฆ์„œ๋ฅผ ๋ฉ”์ธ์œผ๋กœ ์‚ฌ์šฉํ• ์ง€ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ธ์ฆ์„œ ์ง€์ • (Set Default)

./gskcapicmd -cert -setdefault -db key.kdb -pw [KDBํŒจ์Šค์›Œ๋“œ] -label "*.test.co.kr"

๊ฒ€์ฆ (List & Details)

KDB ๋‚ด์˜ ์ธ์ฆ์„œ ๋ชฉ๋ก๊ณผ ์œ ํšจ๊ธฐ๊ฐ„์„ ํ™•์ธํ•˜์—ฌ ์ž‘์—…์ด ์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ๋Š”์ง€ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.

# ์ธ์ฆ์„œ ๋ชฉ๋ก ํ™•์ธ (Default๋Š” * ๋˜๋Š” > ํ‘œ์‹œ๊ฐ€ ๋ถ™์Œ)
./gskcapicmd -cert -list -db key.kdb -pw [KDBํŒจ์Šค์›Œ๋“œ]

# ํŠน์ • ์ธ์ฆ์„œ ์ƒ์„ธ ์ •๋ณด ํ™•์ธ
./gskcapicmd -cert -details -db key.kdb -pw [KDBํŒจ์Šค์›Œ๋“œ] -label "*.test.co.kr"

Next Step:
key.kdb ํŒŒ์ผ๊ณผ key.sth(Stash) ํŒŒ์ผ์„ httpd.conf์˜ KeyFile ๊ฒฝ๋กœ์— ์œ„์น˜์‹œํ‚ค๊ณ  IHS๋ฅผ ์žฌ๊ธฐ๋™ํ•˜๋ฉด SSL ์ ์šฉ์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

[WebSphere] ๋ณด์•ˆ ๊ฐ์‚ฌ ๋Œ€์‘: NCSA Access Log ํ™œ์„ฑํ™” ๋ฐ ๋กœ๊ทธ ํฌ๋งท(User-Agent, Time) ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

WebSphere v8.5 ํ™˜๊ฒฝ์—์„œ ๋ณด์•ˆ ๊ฐ์‚ฌ ๋ฐ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ์œ„ํ•ด NCSA Access Log๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ „์—ญ ์„ค์ •๊ณผ ์ „์†ก ์ฒด์ธ(Transport Chain)๋ณ„ ์„ค์ •์„ ๋ชจ๋‘ ์ ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, accessLogFormat ์†์„ฑ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ IP, ์ˆ˜ํ–‰ ์‹œ๊ฐ„, User-Agent ๋“ฑ์„ ๊ธฐ๋กํ•˜๋„๋ก ํฌ๋งท์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

0. ๋ฐฐ๊ฒฝ ๋ฐ ํ•„์š”์„ฑ (Context)

WAS ์•ž๋‹จ์— ์›น ์„œ๋ฒ„(Web Server)๊ฐ€ ์žˆ๋‹ค๋ฉด ์›น ์„œ๋ฒ„ ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•˜๋ฉด ๋˜์ง€๋งŒ, WAS๋กœ ์ง์ ‘ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด๋‚˜ ๋‚ด๋ถ€ ํ†ต์‹ , ํ˜น์€ ์ƒ์„ธํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” WAS ์ž์ฒด์˜ Access Log๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. WebSphere๋Š” NCSA ํ‘œ์ค€ ํฌ๋งท์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • Version: WebSphere Application Server v8.5

1. ์ „์—ญ ๋กœ๊น… ์„œ๋น„์Šค ํ™œ์„ฑํ™” (Global Setting)

๊ฐ€์žฅ ๋จผ์ € ์„œ๋ฒ„ ์ฐจ์›์—์„œ ๋กœ๊น… ์„œ๋น„์Šค๋ฅผ ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ Servers > Server Types > WebSphere application servers > [์„œ๋ฒ„๋ช…] ํด๋ฆญ
  2. ์šฐ์ธก ํ•˜๋‹จ์˜ Troubleshooting ์„น์…˜์—์„œ NCSA access and HTTP error logging ํด๋ฆญ
  3. ์„ค์ • ์ฒดํฌ:
    • Enable logging service at server start-up (์„œ๋ฒ„ ๊ธฐ๋™ ์‹œ ์„œ๋น„์Šค ํ™œ์„ฑํ™”)
    • Enable access logging (์•ก์„ธ์Šค ๋กœ๊น… ํ™œ์„ฑํ™”)
NCSA Logging Global Setting

2. ์ „์†ก ์ฒด์ธ๋ณ„ ๋กœ๊น… ํ™œ์„ฑํ™” (Chain Setting)

์ „์—ญ ์„ค์ •์„ ํ–ˆ๋”๋ผ๋„, ์‹ค์ œ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” ์ „์†ก ์ฒด์ธ(Transport Chain)์—์„œ ๋กœ๊น…์„ ์ผœ์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ๊ฐ€ ๋‚จ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ(9080, 9443 ๋“ฑ)์— ํ•ด๋‹นํ•˜๋Š” ์ฒด์ธ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ๊ฒฝ๋กœ

[์„œ๋ฒ„๋ช…] > Web Container Settings > Web container transport chains

์„ค์ • ๋ฐฉ๋ฒ•

์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฒด์ธ(WCInboundDefault, HttpQueueInboundDefault ๋“ฑ)์„ ์„ ํƒํ•˜์—ฌ ์•„๋ž˜ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

  1. ์ฒด์ธ ์ด๋ฆ„ ํด๋ฆญ (์˜ˆ: WCInboundDefault)
  2. HTTP inbound channel (HTTP_2) ํด๋ฆญ
  3. Enable logging ์ฒดํฌ๋ฐ•์Šค ์„ ํƒ
Chain Selection Enable Logging Checkbox
Tip: HTTPS(SSL) ์š”์ฒญ์— ๋Œ€ํ•œ ๋กœ๊ทธ๋„ ๋‚จ๊ธฐ๋ ค๋ฉด WCInboundDefaultSecure ์ฒด์ธ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3. ๋กœ๊ทธ ํฌ๋งท ์ปค์Šคํ„ฐ๋งˆ์ด์ง• (Custom Properties)

๊ธฐ๋ณธ ํฌ๋งท(Common Log Format)์€ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด๋‚˜ ์„ธ์…˜ ID, User-Agent ๋“ฑ์„ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ •์˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์ถ”๊ฐ€ ์œ„์น˜

์œ„์˜ HTTP inbound channel (HTTP_2) ์„ค์ • ํ™”๋ฉด์—์„œ ์šฐ์ธก์˜ Custom properties (์‚ฌ์šฉ์ž ์ •์˜ ํŠน์„ฑ) ๋ฉ”๋‰ด๋กœ ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ๊ฐ’ (Key & Value)

  • Name: accessLogFormat
  • Value: (์•„๋ž˜ ์˜ˆ์‹œ ์ค‘ ์„ ํƒ)
# ์˜ˆ์‹œ 1: ํ‘œ์ค€ ํ™•์žฅ ํฌ๋งท (IP, ์‹œ๊ฐ„, ์š”์ฒญ, ์ƒํƒœ, ํฌ๊ธฐ, ์ˆ˜ํ–‰์‹œ๊ฐ„)
%h %u %t "%r" %s %b %D

# ์˜ˆ์‹œ 2: ์ „์ฒด ์ •๋ณด ํฌํ•จ (Referer, User-Agent, SessionID ํฌํ•จ)
%h %u %t "%r" %s %b %D "%{Referer}i" "%{User-agent}i" %{JSESSIONID}C
Custom Properties List

Setting accessLogFormat

4. ์ฃผ์š” ํฌ๋งท ์ง€์‹œ์–ด ์„ค๋ช…

์ง€์‹œ์–ด ์„ค๋ช…
%h ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ (Host)
%t ์š”์ฒญ ์‹œ๊ฐ„ (Time)
%r ์š”์ฒญ ๋ผ์ธ (Request Line) - Method, URI, Protocol
%s ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ (Status Code, ์˜ˆ: 200, 404, 500)
%D ์š”์ฒญ ์ฒ˜๋ฆฌ ์†Œ์š” ์‹œ๊ฐ„ (๋งˆ์ดํฌ๋กœ์ดˆ ๋‹จ์œ„, ์„ฑ๋Šฅ ๋ถ„์„ ์‹œ ์ค‘์š”)
%{Header}i ํŠน์ • ์š”์ฒญ ํ—ค๋” ๊ฐ’ (์˜ˆ: %{User-Agent}i)
%{Cookie}C ํŠน์ • ์ฟ ํ‚ค ๊ฐ’ (์˜ˆ: %{JSESSIONID}C)

Next Step:
๋ชจ๋“  ์„ค์ •์„ ๋งˆ์นœ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ์„œ๋ฒ„๋ฅผ ์žฌ๊ธฐ๋™ํ•ด์•ผ ๋กœ๊ทธ๊ฐ€ ๋‚จ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. logs/[์„œ๋ฒ„๋ช…]/http_access.log ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

[WebSphere] TLS 1.2 ์ „ํ™˜ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: ๋ฒ„์ „๋ณ„ ์ง€์› ํ˜„ํ™ฉ ๋ฐ WAS/IHS/Plugin ํ•„์ˆ˜ ์„ค์ •

WebSphere Application Server v7.0, v8.0, v8.5 ํ™˜๊ฒฝ์—์„œ TLS 1.2 ํ”„๋กœํ† ์ฝœ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์š”๊ตฌ ์‚ฌํ•ญ(Fix Pack, JDK)์„ ํ™•์ธํ•˜๊ณ , WAS, IHS, Plugin ๊ฐ ๊ณ„์ธต๋ณ„ ํ•„์ˆ˜ ์„ค์ • ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—ฐ๊ฒฐ ์‹œ ๋ฐœ์ƒํ•˜๋Š” GSK_ERROR_SOCKET_CLOSED ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฒ•์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

1. ๋ฒ„์ „๋ณ„ TLS 1.2 ์ง€์› ํ˜„ํ™ฉ (Prerequisites)

TLS 1.2๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด WAS ๋ฒ„์ „์— ๋”ฐ๋ฅธ ์ตœ์†Œ ํ”ฝ์ŠคํŒฉ(Fix Pack)๊ณผ JDK ๋ฒ„์ „์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WAS Version Minimum Fix Pack Required SDK Version
v7.0 7.0.0.23 ์ด์ƒ SDK 6 SR10 FP1 ์ด์ƒ
v8.0 8.0.0.3 ์ด์ƒ SDK 6.0.1 (J9 2.6) SR1 FP1 ์ด์ƒ
v8.5 8.5.0.0 (๊ธฐ๋ณธ ์ง€์›) SDK 6.0.1 (J9 2.6) SR2 ์ด์ƒ
์ฃผ์˜ (v7.0 ์ œํ•œ์‚ฌํ•ญ):
WAS v7.0์€ Java ๋ ˆ๋ฒจ์—์„œ๋Š” TLS 1.2๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ, ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” Web Server Plugin(GSKit V7 ์‚ฌ์šฉ)์€ TLS 1.2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ v7.0 ํ™˜๊ฒฝ์—์„œ ์›น ์„œ๋ฒ„ ์—ฐ๋™ ๊ตฌ๊ฐ„๊นŒ์ง€ TLS 1.2๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด Plugin ๋ชจ๋“ˆ ์—…๊ทธ๋ ˆ์ด๋“œ ํ˜น์€ ์•„ํ‚คํ…์ฒ˜ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. WAS ์„ค์ • (Application Server)

๊ด€๋ฆฌ ์ฝ˜์†”์—์„œ SSL ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ , ๊ด€๋ฆฌ ๋ช…๋ น(stop/sync) ์ˆ˜ํ–‰์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ์„ค์ • ํŒŒ์ผ๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1) ๊ด€๋ฆฌ ์ฝ˜์†” ์„ค์ • (QoP)

Security > SSL certificate and key management > SSL configurations ๋ฉ”๋‰ด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. CellDefaultSSLSettings, NodeDefaultSSLSettings ๋“ฑ ์‚ฌ์šฉ ์ค‘์ธ ๋ชจ๋“  ์„ค์ •์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ค์ • ์ด๋ฆ„ ํด๋ฆญ (์˜ˆ: CellDefaultSSLSettings)
  2. ์šฐ์ธก์˜ Quality of protection (QoP) settings ํด๋ฆญ
  3. Protocol ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์—์„œ TLSv1.2 ์„ ํƒ
  4. ์ €์žฅ (Save)

2) ssl.client.props ์ˆ˜์ • (์ค‘์š”)

์ด ์„ค์ •์„ ํ•˜์ง€ ์•Š์œผ๋ฉด WAS๊ฐ€ TLS 1.2๋กœ ์ „ํ™˜๋œ ํ›„, stopNode๋‚˜ syncNode ๊ฐ™์€ ๊ด€๋ฆฌ ๋ช…๋ น์–ด๊ฐ€ ๊ตฌํ˜• ํ”„๋กœํ† ์ฝœ๋กœ ํ†ต์‹ ์„ ์‹œ๋„ํ•˜์—ฌ ์‹คํŒจํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ ํŒŒ์ผ:
    • [PROFILE_HOME]/properties/ssl.client.props
# ํŒŒ์ผ ๋‚ด ํ•ด๋‹น ๋ผ์ธ ์ˆ˜์ •
com.ibm.ssl.protocol=TLSv1.2

3) ์žฌ๊ธฐ๋™ ๋ฐ ๋™๊ธฐํ™”

์„ค์ • ์ ์šฉ์„ ์œ„ํ•ด DMGR๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์žฌ๊ธฐ๋™ํ•ฉ๋‹ˆ๋‹ค.

# 1. ๋…ธ๋“œ ๋ฐ DMGR ์ค‘์ง€
./stopNode.sh
./stopManager.sh

# 2. DMGR ๊ธฐ๋™
./startManager.sh

# 3. ๋…ธ๋“œ ๋™๊ธฐํ™” (์ˆ˜๋™ ๋™๊ธฐํ™” ๊ถŒ์žฅ)
./syncNode.sh [Dmgr_Host] [Dmgr_SOAP_Port] -username [ID] -password [PW]

# 4. ๋…ธ๋“œ ๊ธฐ๋™
./startNode.sh

3. Web Server (IHS) ์„ค์ •

IBM HTTP Server์˜ httpd.conf ํŒŒ์ผ์—์„œ SSL ์„ค์ •์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

<VirtualHost *:443>
    SSLEnable
    
    # TLS 1.2 ํ™œ์„ฑํ™”
    SSLProtocolEnable TLSv12
    
    # ์ทจ์•ฝํ•œ ํ•˜์œ„ ํ”„๋กœํ† ์ฝœ ๋น„ํ™œ์„ฑํ™”
    SSLProtocolDisable SSLv2 SSLv3 TLSv10 TLSv11
</VirtualHost>

4. Plugin ์„ค์ • (Troubleshooting)

WAS์™€ IHS๋ฅผ ๋ชจ๋‘ TLS 1.2๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ๋„ http_plugin.log์— GSK_ERROR_SOCKET_CLOSED (gsk rc = 420) ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์—ฐ๊ฒฐ์ด ์•ˆ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณด์•ˆ ์ˆ˜์ค€์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: StrictSecurity ์ ์šฉ

plugin-cfg.xml ํŒŒ์ผ์˜ ์ตœ์ƒ๋‹จ Config ํƒœ๊ทธ์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<Config StrictSecurity="true">
    <Log LogLevel="Error" Name="..." />
    ...
</Config>
Tip: StrictSecurity="true" ์„ค์ •์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด WAS์™€ ํ†ต์‹ ํ•  ๋•Œ TLS ํ”„๋กœํ† ์ฝœ์„ ์—„๊ฒฉํ•˜๊ฒŒ ์ค€์ˆ˜ํ•˜๋„๋ก ๊ฐ•์ œํ•˜์—ฌ, TLS 1.2 ํ•ธ๋“œ์‰์ดํฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

5. ๊ฒ€์ฆ (Verification)

openssl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ TLS 1.2๋งŒ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

# TLS 1.2 ์ ‘์† ์„ฑ๊ณต ํ™•์ธ
openssl s_client -connect [Host]:9443 -tls1_2

# TLS 1.0 ์ ‘์† ์‹คํŒจ ํ™•์ธ (ํ•ธ๋“œ์‰์ดํฌ ์—๋Ÿฌ๊ฐ€ ๋‚˜์•ผ ์ •์ƒ)
openssl s_client -connect [Host]:9443 -tls1

[WebSphere Liberty] installUtility ์‚ฌ์šฉ๋ฒ• ์™„๋ฒฝ ๊ฐ€์ด๋“œ: Feature ๊ฒ€์ƒ‰, ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋กœ์ปฌ ์ €์žฅ์†Œ ๊ตฌ์„ฑ

WebSphere Liberty์˜ ๊ธฐ๋Šฅ(Feature)์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ์ธ installUtility์˜ ํ•ต์‹ฌ ์‚ฌ์šฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ IBM ์ €์žฅ์†Œ์—์„œ ๊ธฐ๋Šฅ์„ ๊ฒ€์ƒ‰/๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, ์‚ฌ๋‚ด ํ์‡„๋ง ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋กœ์ปฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Local Repository) ์„ค์ • ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7.2
  • Middleware: IBM Liberty Core 20.0.0.6
  • Tool: installUtility (Located in $WLP_HOME/bin)

1. Feature ๊ฒ€์ƒ‰ ๋ฐ ๋‹ค์šด๋กœ๋“œ (Basic Usage)

IBM์˜ ๊ณต์ธ ์ €์žฅ์†Œ(IBM WebSphere Liberty Repository)์— ์—ฐ๊ฒฐํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ฐพ๊ฑฐ๋‚˜ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๊ฒ€์ƒ‰ (Find)

์„ค์น˜ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์˜ ์ •ํ™•ํ•œ ์ด๋ฆ„์„ ๋ชจ๋ฅผ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

# ๊ตฌ๋ฌธ: installUtility find [๊ฒ€์ƒ‰์–ด]
installUtility find jsp --type=feature

๊ธฐ๋Šฅ ๋‹ค์šด๋กœ๋“œ (Download)

์„œ๋ฒ„์— ๋ฐ”๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , ํŒŒ์ผ(ESA) ํ˜•ํƒœ๋กœ ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ๋“ค์€ ๋‚˜์ค‘์— ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

# ๊ตฌ๋ฌธ: installUtility download [๊ธฐ๋Šฅ๋ช…] --location=[๊ฒฝ๋กœ]
installUtility download jsp-2.3 --location=/SW/img/LibertyUtility --acceptLicense

2. ๋กœ์ปฌ ์ €์žฅ์†Œ ๊ตฌ์„ฑ (Repository Configuration)

์ธํ„ฐ๋„ท์ด ์ฐจ๋‹จ๋œ ์„œ๋ฒ„๋‚˜, ์‚ฌ๋‚ด ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ €์žฅ์†Œ๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์œ„์น˜

Liberty ์„ค์น˜ ๊ฒฝ๋กœ ๋‚ด์˜ etc ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์œ„์น˜: ${wlp.install.dir}/etc/repositories.properties

์„ค์ • ๋‚ด์šฉ (repositories.properties)

๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„๋‘” Feature ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•œ ๊ฒฝ๋กœ๋ฅผ url๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

# Local Repository Path Configuration
# ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ ๋˜๋Š” ์‚ฌ๋‚ด ์›น ์„œ๋ฒ„ URL ์ง€์ • ๊ฐ€๋Šฅ
local-rep.url=/SW/img/LibertyUtility
Tip: useDefaultRepository=false ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด IBM ๊ณต์ธ ์ €์žฅ์†Œ ์ ‘์†์„ ์ฐจ๋‹จํ•˜๊ณ  ๋กœ์ปฌ ์ €์žฅ์†Œ๋งŒ ๋ฐ”๋ผ๋ณด๊ฒŒ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์„ค์ • ๊ฒ€์ฆ (Verification)

์ž‘์„ฑํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •์ด ์ •์ƒ์ ์œผ๋กœ ์ธ์‹๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํ™•์ธ (viewSettings)

ํ˜„์žฌ ์ ์šฉ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ชฉ๋ก๊ณผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

installUtility viewSettings

(์ถœ๋ ฅ ๊ฒฐ๊ณผ์—์„œ local-rep.url์ด ๋ชฉ๋ก์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ)

์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ (testConnection)

์ง€์ •ํ•œ ๊ฒฝ๋กœ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์ตœ์ข… ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

# ํŠน์ • ์ €์žฅ์†Œ ํ…Œ์ŠคํŠธ
installUtility testConnection local-rep

# ๋˜๋Š” ์ „์ฒด ํ…Œ์ŠคํŠธ
installUtility testConnection --all

4. ์ฐธ๊ณ  ์ž๋ฃŒ (References)

  • IBM Knowledge Center: installUtility command reference
  • IBM Fix Central: Download Liberty Features (Offline)
    (Fix Central์—์„œ wlp-featureRepo ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์œผ๋ฉด ์ „์ฒด ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ํ•œ ๋ฒˆ์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

Next Step:
๋กœ์ปฌ ์ €์žฅ์†Œ ๊ตฌ์„ฑ์ด ๋๋‚ฌ๋‹ค๋ฉด, installUtility install [๊ธฐ๋Šฅ๋ช…] ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์—†์ด๋„ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์„œ๋ฒ„์— ์ฆ‰์‹œ ์„ค์น˜ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

[WebSphere] WAS v9.0 CLI ์„ค์น˜ ์™„๋ฒฝ ๊ฐ€์ด๋“œ: IM, WAS, IHS, Plugin ๋ฐ JDK 8 ๋™์‹œ ์„ค์น˜

CentOS 7 ํ™˜๊ฒฝ์—์„œ GUI ์—†์ด imcl ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WebSphere v9.0.5.1์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. v9.0๋ถ€ํ„ฐ ๋ณ€๊ฒฝ๋œ ์ •์ฑ…์— ๋”ฐ๋ผ JDK 8์„ ๋ฐ˜๋“œ์‹œ ํ•จ๊ป˜ ์„ค์น˜ํ•ด์•ผ ํ•จ์„ ๊ฐ•์กฐํ•˜๋ฉฐ, WAS, IHS, Plugin ์„ค์น˜ ๋ฐ ํŒจ์น˜ ์ ์šฉ ๋ช…๋ น์–ด๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: CentOS 7 (3.10.0-957.el7.x86_64)
  • Installer: IBM Installation Manager (IM) 1.8.x ์ด์ƒ
  • Target Version: WebSphere Application Server 9.0.5.1

1. Installation Manager (IM) ์„ค์น˜

IBM ์ œํ’ˆ๊ตฐ์„ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ธ IM์„ ๋จผ์ € ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. -repositories์—๋Š” repository.config ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋ช…๋ น์–ด

# ์„ค์น˜ ๊ฒฝ๋กœ๋กœ ์ด๋™
cd /sw/img/im

# IM ์„ค์น˜ ์‹คํ–‰
./imcl install com.ibm.cic.agent \
-repositories "/sw/img/im/repository.config" \
-installationDirectory "/sw/IBM/InstallationManager/eclipse" \
-sharedResourcesDirectory "/sw/IBM/IMShared" \
-acceptLicense \
-showProgress -sP
Tip (ํŒจํ‚ค์ง€ ID ํ™•์ธ):
์„ค์น˜ํ•˜๋ ค๋Š” ์ œํ’ˆ์˜ ์ •ํ™•ํ•œ ID(์˜ˆ: com.ibm.websphere...)๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด ์„ค์น˜ ๋ฏธ๋””์–ด ๋‚ด์˜ Offerings ํด๋”๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ./imcl listAvailablePackages -repositories [๊ฒฝ๋กœ] ๋ช…๋ น์–ด๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. WebSphere Application Server (WAS) ์„ค์น˜

์ค‘์š”: WAS v9.0์€ ๊ธฐ๋ณธ JDK๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ com.ibm.websphere.BASE... ํŒจํ‚ค์ง€์™€ com.ibm.java.jdk.v8... ํŒจํ‚ค์ง€๋ฅผ ๋™์‹œ์— ์ง€์ •ํ•˜์—ฌ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋ช…๋ น์–ด (Base + JDK 8)

์„ค์น˜ ๋„๊ตฌ(tools) ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

cd /sw/IBM/InstallationManager/eclipse/tools

# WAS ๋ฐ JDK ๋™์‹œ ์„ค์น˜
./imcl install com.ibm.websphere.BASE.v90_9.0.5001.20190828_0616 \
com.ibm.java.jdk.v8_8.0.5041.20190924_1031 \
-repositories "/sw/img/base","/sw/img/sdk" \
-installationDirectory "/sw/was/AppServer9" \
-sharedResourcesDirectory "/sw/IBM/IMShared" \
-acceptLicense \
-properties cic.selector.nl=ko \
-showProgress -sP

Fix Pack ์—…๋ฐ์ดํŠธ (Optional)

์„ค์น˜ ํ›„ ํŠน์ • ํ”ฝ์ŠคํŒฉ(์˜ˆ: 9.0.5.3)์œผ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

./imcl install com.ibm.websphere.BASE.v90_9.0.5003.20200226_0941 \
-repositories "/sw/img/fixwas" \
-installationDirectory "/sw/was/AppServer9" \
-acceptLicense -sP

3. IBM HTTP Server (IHS) ์„ค์น˜

์›น ์„œ๋ฒ„์ธ IHS๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JDK ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. user.ihs.httpPort ์†์„ฑ์œผ๋กœ ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# IHS ๋ฐ JDK ๋™์‹œ ์„ค์น˜
./imcl install com.ibm.websphere.IHS.v90_9.0.5001.20190828_0616 \
com.ibm.java.jdk.v8_8.0.5041.20190924_1031 \
-repositories "/sw/img/ihs","/sw/img/sdk" \
-installationDirectory "/sw/web/IHS9" \
-sharedResourcesDirectory "/sw/IBM/IMShared" \
-acceptLicense \
-properties user.ihs.httpPort="80" \
-showProgress -sP

4. Web Server Plugin (PLG) ์„ค์น˜

WAS์™€ ์›น ์„œ๋ฒ„๋ฅผ ์—ฐ๋™ํ•ด์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

# Plugin ๋ฐ JDK ๋™์‹œ ์„ค์น˜
./imcl install com.ibm.websphere.PLG.v90_9.0.5001.20190828_0616 \
com.ibm.java.jdk.v8_8.0.5041.20190924_1031 \
-repositories "/sw/img/plg","/sw/img/sdk" \
-installationDirectory "/sw/web/Plugins9" \
-sharedResourcesDirectory "/sw/IBM/IMShared" \
-acceptLicense \
-showProgress -sP

5. ์„ค์น˜ ๊ฒ€์ฆ (Verification)

๋ชจ๋“  ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก๊ณผ ์ƒ์„ธ ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก ํ™•์ธ

# IM ๋ช…๋ น์–ด๋กœ ํ™•์ธ
./imcl listInstalledPackages

์ƒ์„ธ ๋ฒ„์ „ ๋ฆฌํฌํŠธ ํ™•์ธ

WAS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ ์ƒ์„ธ ๋ฆฌํฌํŠธ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

# WAS ํ™ˆ์˜ bin ๋””๋ ‰ํ† ๋ฆฌ
/sw/was/AppServer9/bin/versionInfo.sh

Next Step:
์—”์ง„ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ manageprofiles.sh ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•  ํ”„๋กœํŒŒ์ผ(Profile)์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[Windows 10] Microsoft Edge ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ์—”์ง„ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ• (Bing -> Google/Naver)

Windows 10 Edge ๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์†Œ ํ‘œ์‹œ์ค„์—์„œ ๊ฒ€์ƒ‰ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„(Bing)์„ Google, Naver, Daum ๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ๋ฉ”๋‰ด ๊นŠ์ˆ™์ด ๋“ค์–ด๊ฐˆ ํ•„์š” ์—†์ด ๋‹จ์ถ• URL๋กœ ํ•œ ๋ฒˆ์— ์ด๋™ํ•˜๋Š” ํŒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

Test Environment

  • OS: Windows 10
  • Browser: Microsoft Edge (Chromium ๊ธฐ๋ฐ˜ ์ตœ์‹  ๋ฒ„์ „)

Method A: ๋‹จ์ถ• URL๋กœ ํ•œ ๋ฒˆ์— ์ด๋™ (์ถ”์ฒœ)

๋ณต์žกํ•œ ๋ฉ”๋‰ด๋ฅผ ์ฐพ์•„๋“ค์–ด๊ฐˆ ํ•„์š” ์—†์ด, ์ฃผ์†Œ์ฐฝ์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์„ค์ • ํ™”๋ฉด์œผ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

Tip: ์•„๋ž˜ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ Edge ์ฃผ์†Œ์ฐฝ์— ๋ถ™์—ฌ๋„ฃ์œผ์„ธ์š”.
edge://settings/search

Method B: ์„ค์ • ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•œ ์ด๋™

๋‹จ์ถ• URL์ด ๊ธฐ์–ต๋‚˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ •์„์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

1. ์„ค์ • ๋ฉ”๋‰ด ์ง„์ž…

  1. Edge ๋ธŒ๋ผ์šฐ์ € ์šฐ์ธก ์ƒ๋‹จ์˜ ์  ์„ธ ๊ฐœ(...) ๋ฒ„ํŠผ ํด๋ฆญ
  2. ์„ค์ •(Settings) ํด๋ฆญ

2. ๊ฐœ์ธ ์ •๋ณด ๋ฐ ์„œ๋น„์Šค ์„ค์ •

  1. ์ขŒ์ธก ๋ฉ”๋‰ด์—์„œ '๊ฐœ์ธ ์ •๋ณด, ๊ฒ€์ƒ‰ ๋ฐ ์„œ๋น„์Šค(Privacy, search, and services)' ์„ ํƒ
  2. ์Šคํฌ๋กค์„ ๋งจ ์•„๋ž˜๋กœ ๋‚ด๋ ค '์ฃผ์†Œ ํ‘œ์‹œ์ค„ ๋ฐ ๊ฒ€์ƒ‰(Address bar and search)' ํด๋ฆญ
Edge Privacy Settings

3. ๊ฒ€์ƒ‰ ์—”์ง„ ๋ณ€๊ฒฝ (Change Engine)

์„ค์ • ํ™”๋ฉด์— ์ง„์ž…ํ–ˆ๋‹ค๋ฉด, ์›ํ•˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์†Œ ํ‘œ์‹œ์ค„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„: ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜์—ฌ Google, Naver ๋“ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ ํƒญ์—์„œ์˜ ๊ฒ€์ƒ‰ ์ƒ์ž ๋“ฑ...: '๊ฒ€์ƒ‰ ์ƒ์ž(๊ถŒ์žฅ)' ๋Œ€์‹  '์ฃผ์†Œ ํ‘œ์‹œ์ค„'์„ ์„ ํƒํ•˜๋ฉด ์ƒˆ ํƒญ์—์„œ๋„ ๋ณ€๊ฒฝํ•œ ์—”์ง„์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
Change Search Engine
์ฐธ๊ณ : ๋งŒ์•ฝ ๋ชฉ๋ก์— ์›ํ•˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„(์˜ˆ: Naver)์ด ์—†๋‹ค๋ฉด, '๊ฒ€์ƒ‰ ์—”์ง„ ๊ด€๋ฆฌ' ๋ฉ”๋‰ด๋กœ ๋“ค์–ด๊ฐ€์„œ ํ•ด๋‹น ์‚ฌ์ดํŠธ(naver.com)๋ฅผ ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๋’ค ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.