์ ์ ˆํ•œ HTTPS๋ฅผ ์œ„ํ•ด SSL ์ธ์ฆ์„œ ๊ตฌ์„ฑ

Looker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์„ค์น˜์—์„œ๋Š” HTTPS์šฉ์œผ๋กœ ์ž์ฒด ์„œ๋ช… SSL ์ธ์ฆ์„œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ ํ˜ธ์ŠคํŒ… ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ธ‰์—…์ฒด์—์„œ SSL ์ธ์ฆ์„œ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Looker์—์„œ SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ธ์ฆ์„œ์™€ ํ‚ค๋กœ Java ํ‚ค ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ looker.pem์ด๋ผ๋Š” ์ธ์ฆ์„œ ํŒŒ์ผ
  • looker.key๋ผ๋Š” ์—ฐ๊ฒฐ๋œ ํ‚ค ํŒŒ์ผ
  • ์„ ํƒ์ ์œผ๋กœ ca.pem์ด๋ผ๋Š” ์ค‘๊ฐ„ ์ธ์ฆ ๊ธฐ๊ด€(CA) ์ฒด์ธ ํŒŒ์ผ

.pem ํŒŒ์ผ์— ๋ฃจํŠธ ์ธ์ฆ์„œ๋ฅผ ํฌํ•จํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ธ์ฆ์„œ ์„ค์น˜

์ด๋Ÿฌํ•œ ํŒŒ์ผ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ /home/looker/looker/.ssl์ž…๋‹ˆ๋‹ค.

  1. ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    mkdir /home/looker/looker/.ssl
    cd /home/looker/looker/.ssl
    
  2. ํ‚ค ์ €์žฅ์†Œ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•˜์—ฌ .keystorepass๋ผ๋Š” ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

    echo "some_password_here" > .keystorepass
    
  3. CA ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์ธ์ฆ์„œ ํŒŒ์ผ ๋์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    echo >> looker.pem
    cat ca.pem >> looker.pem
    
  4. ์ธ์ฆ์„œ์™€ ํ‚ค๋ฅผ pkcs12 ํ‚ค ์ €์žฅ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    openssl pkcs12 -export \
        -in looker.pem       \
        -inkey looker.key    \
        -out importme.p12
    
  5. ๋‚ด๋ณด๋‚ด๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. .keystorepass ํŒŒ์ผ์— ์ž…๋ ฅํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  6. pkcs12 ํ‚ค ์ €์žฅ์†Œ๋ฅผ Java ํ‚ค ์ €์žฅ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    keytool -importkeystore     \
        -srckeystore importme.p12 \
        -destkeystore looker.jks  \
        -srcstoretype pkcs12      \
        -alias 1
    
  7. ์ƒˆ ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ pkcs12 ํ‚ค ์ €์žฅ์†Œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. .keystorepass ํŒŒ์ผ์—์„œ ํ•ด๋‹น ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  8. looker.jar์™€ ๊ฐ™์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์— lookerstart.cfg๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ Looker๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ํ•„์ˆ˜ Looker ์˜ต์…˜์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

LOOKERARGS="--ssl-keystore=/home/looker/looker/.ssl/looker.jks --ssl-keystore-pass-file=/home/looker/looker/.ssl/.keystorepass"

์ธ์ฆ์„œ ๊ฒ€์ฆ

Looker๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ธ์ฆ์„œ๊ฐ€ OpenSSL s_client์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

openssl s_client -connect localhost:9999

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด looker.yourdomain.com์ธ ๊ฒฝ์šฐ ์ถœ๋ ฅ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

subject=/OU=Domain Control Validated/CN=looker.yourdomain.com

๋˜ ๋‹ค๋ฅธ ํ™•์ธ ๋ฐฉ๋ฒ•์€ wget์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. HTTPS๋ฅผ ํ†ตํ•ด Looker ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Looker์—์„œ๋Š” ์ธ์ฆ์„œ ์ผ๋ฐ˜ ์ด๋ฆ„ self-signed.looker.com์ด ์ถœ๋ ฅ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

$ wget https://looker.yourdomain.com:9999
--2014-12-31 12:06:03--  https://looker.yourdomain.com:9999/
Resolving looker.yourdomain.com (looker.yourdomain.com)... 192.168.23.66
Connecting to looker.yourdomain.com (looker.yourdomain.com)|192.168.23.66|:9999... connected.
ERROR: cannot verify looker.yourdomain.com's certificate, issued by '/CN=self-signed.looker.com':
  Self-signed certificate encountered.
    ERROR: certificate common name 'self-signed.looker.com' doesn't match requested host name 'looker.yourdomain.com'.
To connect to looker.yourdomain.com insecurely, use `--no-check-certificate'.

์ธ์ฆ ๊ธฐ๊ด€์˜ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Looker์—์„œ ์ธ์ฆ์„œ ์ผ๋ฐ˜ ์ด๋ฆ„์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Looker์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” DNS ์ด๋ฆ„ ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ์™€์ผ๋“œ ์นด๋“œ ์ธ์ฆ์„œ์™€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ '์‹ค์ œ'(์ž์ฒด ์„œ๋ช…๋˜์ง€ ์•Š์€) ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

$ wget https://looker.yourdomain.com:9999
--2014-12-31 12:06:47--  https://looker.yourdomain.com:9999/
Resolving looker.yourdomain.com (looker.yourdomain.com)... 10.10.10.10
Connecting to looker.yourdomain.com (looker.yourdomain.com)|10.10.10.10|:9999... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://looker.yourdomain.com:9999/login [following]
--2014-12-31 12:06:48--  https://looker.yourdomain.com:9999/login
Connecting to looker.yourdomain.com (looker.yourdomain.com)|10.10.10.10|:9999... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3491 (3.4K) [text/html]
Saving to: 'index.html'

100%[====================================================>] 3,491       --.-K/s   in 0.07s

2014-12-31 12:06:48 (50.5 KB/s) - 'index.html' saved [3491/3491]

CA ๋ฒˆ๋“ค์— ๋Œ€ํ•œ ์‚ฌ์ดํŠธ ์ธ์ฆ์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

Looker 5.18์—์„œ Looker๋Š” ์ž๋ฐ” ์ธ์ฆ ๊ธฐ๊ด€(CA) ๋ฃจํŠธ ์ธ์ฆ์„œ ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Looker๋Š” CA ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ Looker ์„œ๋ฒ„์—์„œ ์•„์›ƒ๋ฐ”์šด๋“œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ํ†ต์‹ ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ์‹ ๋ขฐ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์•„์›ƒ๋ฐ”์šด๋“œ ์›นํ›… ์š”์ฒญ, S3 ๋ฐฑ์—… ์ˆ˜ํ–‰, ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ์ธ์ฆ ์š”์ฒญ, ๋ผ์ด์„ ์Šค ํ™•์ธ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Java๋Š” ๋””์Šคํฌ์— ์žˆ๋Š” CA ๋ฒˆ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ณ ๊ฐ ํ˜ธ์ŠคํŒ… Looker ์ธ์Šคํ„ด์Šค์˜ ๊ด€๋ฆฌ์ž๋Š” CA ๋ฒˆ๋“ค์—์„œ ์ธ์ฆ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CA ๋ฒˆ๋“ค์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด Looker์˜ test_ssl_cert_validation ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„์›ƒ๋ฐ”์šด๋“œ HTTP ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค ๋•Œ Looker๊ฐ€ ์„œ๋ฒ„ ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ…Œ์ŠคํŠธํ•  URL ๋ชฉ๋ก์ด ํฌํ•จ๋œ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ํ•œ ์ค„์— URL ํ•˜๋‚˜์”ฉ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://www.google.com
https://looker.com
https://wrong.host.badssl.com/

์ด ํŒŒ์ผ์˜ ์ด๋ฆ„์ด hosts์ธ ๊ฒฝ์šฐ test_ssl_cert_validation์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

$ ./looker test_ssl_cert_validation hosts

test_ssl_cert_validation์˜ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Using CA file from .../jre/lib/security/cacerts

Attempting connection to https://www.google.com
Certificate verified successfully, connection returned with:
HTTP/1.1 200 OK

Attempting connection to https://looker.com
Certificate verified successfully, connection returned with:
HTTP/1.1 200 OK

Attempting connection to https://wrong.host.badssl.com/
Error connecting to https://wrong.host.badssl.com/: OpenSSL::SSL::SSLError: hostname
"wrong.host.badssl.com" does not match the server certificate

Summary:
Successes: 3, Redirects: 0, Failures: 1

์•ˆ์ „ํ•˜์ง€ ์•Š์€ SSL ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ ์ค‘์ง€

Looker์— ๋Œ€ํ•œ ์ธ๋ฐ”์šด๋“œ TSL1.0 ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  • ๋‹ค์Œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ๊ณผ ๊ฐ™์ด Nginx ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ssl_protocols ์ค„์„ ์ˆ˜์ •ํ•˜๊ณ  TLSv1 ์˜ต์…˜์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

       ssl-protocols: "TLSv1.2 TLSv1.3"
    
  • TLS ๋˜๋Š” SSL ํ”„๋กœํ† ์ฝœ์„ ์ข…๋ฃŒํ•˜๋Š” ํ”„๋ก์‹œ ๋˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ Looker ์•ž์— ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Looker ์ˆ˜์ค€์—์„œ SSL์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

SSL ์ธ์ฆ์„œ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋” ๊น”๋”ํ•œ URL์„ ์œ„ํ•œ ํฌํŠธ ์ „๋‹ฌ์„ ์ถ”๊ฐ€ํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.