적절한 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을 위한 포트 전달을 추가할 준비가 됩니다.