Looker ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ์ค์น์์๋ HTTPS์ฉ์ผ๋ก ์์ฒด ์๋ช SSL ์ธ์ฆ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ณ ๊ฐ ํธ์คํ ์ธ์คํด์ค์ ํ๋ก๋์ ํ๊ฒฝ์ ๊ฒฝ์ฐ ์ ๋ขฐํ ์ ์๋ ๊ณต๊ธ์ ์ฒด์์ SSL ์ธ์ฆ์๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Looker์์ SSL ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ธ์ฆ์์ ํค๋ก Java ํค ์ ์ฅ์๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ํ์ผ์ด ์์ด์ผ ํฉ๋๋ค.
- ๊ธฐ๋ณธ ์ธ์ฆ์๊ฐ ํฌํจ๋
looker.pem
์ด๋ผ๋ ์ธ์ฆ์ ํ์ผ looker.key
๋ผ๋ ์ฐ๊ฒฐ๋ ํค ํ์ผ- ์ ํ์ ์ผ๋ก
ca.pem
์ด๋ผ๋ ์ค๊ฐ ์ธ์ฆ ๊ธฐ๊ด(CA) ์ฒด์ธ ํ์ผ
.pem
ํ์ผ์ ๋ฃจํธ ์ธ์ฆ์๋ฅผ ํฌํจํ ํ์๊ฐ ์์ต๋๋ค.
์ธ์ฆ์ ์ค์น
์ด๋ฌํ ํ์ผ์ ๋ชจ๋ ๋์ผํ ๋๋ ํฐ๋ฆฌ์ ์์ด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ /home/looker/looker/.ssl
์
๋๋ค.
์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ํ์ฌ ๋๋ ํฐ๋ฆฌ๋ก ๋ง๋ญ๋๋ค.
mkdir /home/looker/looker/.ssl cd /home/looker/looker/.ssl
ํค ์ ์ฅ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ํํ์ฌ
.keystorepass
๋ผ๋ ํ์ผ์ ์ ์ฅํฉ๋๋ค.echo "some_password_here" > .keystorepass
CA ํ์ผ์ด ์์ผ๋ฉด ์ธ์ฆ์ ํ์ผ ๋์ ์ถ๊ฐํฉ๋๋ค.
echo >> looker.pem cat ca.pem >> looker.pem
์ธ์ฆ์์ ํค๋ฅผ
pkcs12
ํค ์ ์ฅ์๋ก ๋ณํํฉ๋๋ค.openssl pkcs12 -export \ -in looker.pem \ -inkey looker.key \ -out importme.p12
๋ด๋ณด๋ด๊ธฐ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
.keystorepass
ํ์ผ์ ์ ๋ ฅํ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.pkcs12 ํค ์ ์ฅ์๋ฅผ Java ํค ์ ์ฅ์๋ก ๋ณํํฉ๋๋ค.
keytool -importkeystore \ -srckeystore importme.p12 \ -destkeystore looker.jks \ -srcstoretype pkcs12 \ -alias 1
์ ํค ์ ์ฅ์ ๋น๋ฐ๋ฒํธ์ pkcs12 ํค ์ ์ฅ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ผ๋ ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
.keystorepass
ํ์ผ์์ ํด๋น ๋น๋ฐ๋ฒํธ๋ฅผ ๊ณ์ ์ฌ์ฉํฉ๋๋ค.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์ ์ํ ํฌํธ ์ ๋ฌ์ ์ถ๊ฐํ ์ค๋น๊ฐ ๋ฉ๋๋ค.