적절한 HTTPS를 위한 SSL 인증서 구성

Looker 애플리케이션의 기본 설치는 HTTPS용 자체 서명 SSL 인증서를 사용합니다. 프로덕션 환경의 경우 신뢰할 수 있는 공급업체의 SSL 인증서를 설치하는 것이 좋습니다.

Looker에서 SSL 인증서를 사용하려면 인증서와 키를 사용하여 자바 키 저장소를 만들어야 합니다.

다음 파일이 있어야 합니다.

  • 기본 인증서가 포함된 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 키 저장소를 자바 키 저장소로 변환:

    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 백업 실행, 다양한 형식의 인증 요청, 라이선스 확인 서버와 통신하는 등의 작업이 포함됩니다.

자바는 디스크에 있는 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 프로토콜 사용 중지

보안 규정 준수를 위해 안전하지 않은 TLS를 삭제해야 하는 경우 $JAVA_HOME/lib/security/java.security 파일에 none jdk.tls.disabledAlgorithms=SSLv2Hello, SSLv3, TLSv1, TLSv1.1, 3DES_EDE_CBC를 추가하세요.

다음 단계

SSL 인증서를 설정하면 안전한 URL을 위해 포트 전달을 추가할 수 있습니다.