1 인증서 사용

개요

Zabbix는 공용 또는 사내 인증 기관(CA)에서 서명한 PEM 형식의 RSA 인증서를 사용할 수 있습니다.

인증서 검증은 미리 구성된 CA 인증서를 통해 수행됩니다. 선택적으로 인증서 폐기 목록(CRL)을 사용할 수 있습니다.

각 Zabbix 구성 요소는 하나의 인증서만 구성할 수 있습니다.

내부 CA 설정 및 운영, 인증서 요청 생성 및 서명, 인증서 폐기에 대한 자세한 정보는 OpenSSL PKI Tutorial v2.0과 같은 튜토리얼을 참조하십시오.

인증서 확장을 신중히 고려하고 테스트하십시오. 자세한 내용은 X.509 v3 인증서 확장 사용의 제한 사항을 참조하십시오.

인증서 구성 매개변수

Zabbix 구성 요소에서 인증서를 설정하기 위해 다음 구성 매개변수가 지원됩니다.

매개변수 필수 설명
TLSCAFile 피어 인증서 검증을 위한 최상위 CA(s) 인증서가 포함된 파일의 전체 경로.
여러 멤버가 있는 인증서 체인을 사용하는 경우, 하위 수준 CA(s) 인증서를 먼저 배치하고, 이어서 상위 수준 CA(s) 인증서를 배치하여 순서를 정합니다.
여러 CA의 인증서를 단일 파일에 포함할 수 있습니다.
TLSCRLFile 아니요 인증서 폐기 목록(CRL)이 포함된 파일의 전체 경로.
TLSCertFile 인증서가 포함된 파일의 전체 경로.
여러 멤버가 있는 인증서 체인을 사용하는 경우, 서버, 프록시 또는 에이전트 인증서를 먼저 배치하고, 이어서 하위 수준 CA(s) 인증서, 마지막으로 상위 수준 CA(s) 인증서 순서로 배치합니다.
TLSKeyFile 개인 키가 포함된 파일의 전체 경로.
적절한 액세스 권한을 설정하여 이 파일이 Zabbix 사용자에 의해서만 읽을 수 있도록 해야 합니다.
TLSServerCertIssuer 아니요 허용된 서버 인증서 발급자.
TLSServerCertSubject 아니요 허용된 서버 인증서 주체.

설정 예시

필요한 인증서를 설정한 후 Zabbix 구성 요소가 인증서 기반 암호화를 사용하도록 구성합니다.

다음은 구성을 위한 자세한 단계입니다:

Zabbix server

1. CA 인증서 파일을 준비합니다.

피어 인증서를 검증하기 위해, Zabbix server는 최상위 자체 서명된 루트 CA 인증서가 포함된 파일에 접근할 수 있어야 합니다. 예를 들어, 두 개의 독립적인 루트 CA의 인증서가 필요한 경우, 이를 /home/zabbix/zabbix_ca_file.crt에 위치한 파일에 배치합니다:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
            ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            ...
-----BEGIN CERTIFICATE-----
MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
....
9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
-----END CERTIFICATE-----
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
            ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ....
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            ....       
-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
...
vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
-----END CERTIFICATE-----

2. Zabbix server 인증서/인증서 체인을 파일에 배치합니다. 예를 들어 /home/zabbix/zabbix_server.crt에 배치합니다. 첫 번째 인증서는 Zabbix server 인증서이고, 그 다음에 중간 CA 인증서가 이어집니다:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Basic Constraints: 
                CA:FALSE
            ...
-----BEGIN CERTIFICATE-----
MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
...
h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
-----END CERTIFICATE-----
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
            ...
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE, pathlen:0
        ...
-----BEGIN CERTIFICATE-----
MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
...
dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
-----END CERTIFICATE-----

인증서 검증 과정에 영향을 주지 않도록 클라이언트와 서버 인증서 모두에 위에 언급된 속성만 사용하세요. 예를 들어, X509v3 Subject Alternative Name 또는 Netscape Cert Type 확장이 사용되면 OpenSSL이 암호화된 연결 설정에 실패할 수 있습니다. 자세한 정보는 X.509 v3 인증서 확장 사용 제한 사항을 참조하세요.

3. Zabbix server 개인 키를 파일에 배치합니다. 예를 들어 /home/zabbix/zabbix_server.key에 배치합니다:

-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
...
IJLkhbybBYEf47MLhffWa7XvZTY=
-----END PRIVATE KEY-----

4. Zabbix server 구성 파일에서 TLS 구성 매개변수를 편집합니다:

TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbix proxy

1. Zabbix server 섹션에서 설명한 대로 최상위 CA 인증서, Zabbix proxy 인증서/인증서 체인, 개인 키가 포함된 파일을 준비합니다. 그런 다음 Zabbix proxy 구성 파일에서 TLSCAFile, TLSCertFile, TLSKeyFile 매개변수를 적절히 편집합니다.

2. Zabbix proxy 구성 파일에서 추가 TLS 매개변수를 편집합니다:

  • 활성 프록시의 경우: TLSConnect=cert
  • 수동 프록시의 경우: TLSAccept=cert

프록시 보안을 개선하려면 TLSServerCertIssuerTLSServerCertSubject 매개변수도 설정할 수 있습니다. 자세한 내용은 허용된 인증서 발급자 및 주체 제한을 참조하세요.

최종 프록시 구성 파일의 TLS 매개변수는 다음과 같이 나타날 수 있습니다:

TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_proxy.crt
TLSKeyFile=/home/zabbix/zabbix_proxy.key

3. Zabbix 프런트엔드에서 이 프록시의 암호화를 구성합니다:

  • Administration → Proxies로 이동합니다.
  • 프록시를 선택하고 Encryption 탭을 클릭합니다.

아래 예시에서 IssuerSubject 필드가 채워져 있습니다. 이러한 필드를 사용하는 이유와 방법에 대한 자세한 내용은 허용된 인증서 발급자 및 주체 제한을 참조하세요.

활성 프록시의 경우:

수동 프록시의 경우:

Zabbix agent

1. Zabbix server 섹션에서 설명된 대로 최상위 CA 인증서, Zabbix agent 인증서/인증서 체인, 개인 키가 포함된 파일을 준비합니다. 그런 다음 Zabbix agent 구성 파일에서 TLSCAFile, TLSCertFile, TLSKeyFile 매개변수를 적절히 편집합니다.

2. Zabbix agent 구성 파일에서 추가 TLS 매개변수를 편집합니다:

  • 활성 agent의 경우: TLSConnect=cert
  • 수동 agent의 경우: TLSAccept=cert

agent 보안을 향상시키려면 TLSServerCertIssuerTLSServerCertSubject 매개변수를 설정할 수 있습니다. 자세한 정보는 허용되는 인증서 발급자 및 주체 제한을 참조하세요.

최종 agent 구성 파일의 TLS 매개변수는 다음과 같을 수 있습니다. 이 예시는 호스트가 프록시에 의해 모니터링되므로 인증서 Subject로 지정되었다고 가정합니다:

TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_agentd.crt
TLSKeyFile=/home/zabbix/zabbix_agentd.key

3. 이 agent에 의해 모니터링되는 호스트에 대해 Zabbix 프론트엔드에서 암호화를 구성합니다.

  • 이동: Data collection → Hosts.
  • 호스트를 선택하고 Encryption 탭을 클릭합니다.

아래 예시에서 IssuerSubject 필드가 채워져 있습니다. 이러한 필드를 사용하는 이유와 방법에 대한 자세한 정보는 허용되는 인증서 발급자 및 주체 제한을 참조하세요.

Zabbix web service

1. Zabbix server 섹션에서 설명한 대로 최상위 CA 인증서, Zabbix web service 인증서/인증서 체인, 개인 키가 포함된 파일을 준비합니다. 그런 다음 Zabbix web service 구성 파일에서 TLSCAFile, TLSCertFile, TLSKeyFile 매개변수를 그에 따라 편집합니다.

2. Zabbix web service 구성 파일에서 추가 TLS 매개변수를 편집합니다: TLSAccept=cert

최종 web service 구성 파일의 TLS 매개변수는 다음과 같을 수 있습니다:

TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key

3. Zabbix server 구성 파일에서 WebServiceURL 매개변수를 편집하여 TLS로 구성된 Zabbix web service에 연결하도록 Zabbix server를 구성합니다:

WebServiceURL=https://example.com:443/report

허용된 인증서 발급자 및 주체 제한

두 Zabbix 구성 요소(예: 서버와 에이전트)가 TLS 연결을 설정할 때, 서로의 인증서를 검증합니다. 피어 인증서가 신뢰할 수 있는 CA(TLSCAFile에 사전 구성된 최상위 인증서 포함)에 의해 서명되고, 유효하며, 만료되지 않았고, 기타 검사를 통과하면 구성 요소 간의 통신이 진행될 수 있습니다. 이 가장 간단한 경우에는 인증서 발급자와 주체가 검증되지 않습니다.

그러나 이는 위험을 초래합니다: 유효한 인증서를 가진 누구나 다른 사람으로 위장할 수 있습니다(예: 호스트 인증서가 서버로 위장하는 데 사용될 수 있음). 이는 인증서가 전용 사내 CA에 의해 서명되고 위장 위험이 낮은 소규모 환경에서는 허용될 수 있지만, 더 크거나 보안에 민감한 환경에서는 충분하지 않을 수 있습니다.

최상위 CA가 Zabbix에서 허용되지 않아야 할 인증서를 발급하거나 위장 위험을 줄이고 싶다면, 발급자와 주체를 지정하여 허용되는 인증서를 제한할 수 있습니다.

예를 들어, Zabbix 프록시 구성 파일에서 다음과 같이 지정할 수 있습니다:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

이러한 설정을 사용하면, 활성 프록시는 다른 발급자나 주체를 가진 인증서를 사용하는 Zabbix 서버와 통신하지 않습니다. 마찬가지로, 수동 프록시는 그러한 서버의 요청을 수락하지 않습니다.

IssuerSubject 문자열 매칭 규칙

IssuerSubject 문자열 매칭 규칙은 다음과 같습니다:

  • IssuerSubject 문자열은 독립적으로 확인됩니다. 둘 다 선택사항입니다.
  • 지정되지 않은 문자열은 모든 문자열이 허용됨을 의미합니다.
  • 문자열은 있는 그대로 비교되며 정확히 일치해야 합니다.
  • UTF-8 문자가 지원됩니다. 하지만 와일드카드(*)나 정규 표현식은 지원되지 않습니다.
  • 다음 RFC 4514 요구 사항이 구현됩니다 - 이스케이프가 필요한 문자들('\' 백슬래시, U+005C 사용):
    • 문자열의 어느 위치에서나: '"' (U+0022), '+' (U+002B), ',' (U+002C), ';' (U+003B), '<' (U+003C), '>' (U+003E), '\\' (U+005C);
    • 문자열의 시작 부분: 공백 (' ', U+0020) 또는 숫자 기호 ('#', U+0023);
    • 문자열의 끝 부분: 공백 (' ', U+0020).
  • 널 문자 (U+0000)는 지원되지 않습니다. 널 문자가 발견되면 매칭이 실패합니다.
  • RFC 4517RFC 4518 표준은 지원되지 않습니다.

예를 들어, IssuerSubject 조직(O) 문자열에 뒤따르는 공백이 있고 Subject 조직 단위(OU) 문자열에 큰따옴표가 포함된 경우, 이러한 문자들은 이스케이프되어야 합니다:

TLSServerCertIssuer=CN=Signing CA,OU=Development head,O=\ Example SIA\ ,DC=example,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group \"5\",O=\ Example SIA\ ,DC=example,DC=com
필드 순서 및 서식

Zabbix는 RFC 4514의 권장사항을 따르며, 이는 최하위 레벨 필드(CN)부터 시작하여 중간 레벨 필드(OU, O)를 거쳐 최상위 레벨 필드(DC)로 끝나는 "역순" 순서를 지정합니다.

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

반대로, OpenSSL은 기본적으로 IssuerSubject 문자열을 최상위 레벨에서 최하위 레벨 순서로 표시합니다. 다음 예제에서 IssuerSubject 필드는 최상위 레벨(DC)부터 시작하여 최하위 레벨(CN) 필드로 끝납니다. 공백과 필드 구분자를 포함한 서식도 사용된 옵션에 따라 달라지므로 Zabbix에서 요구하는 형식과 일치하지 않습니다.

$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy

$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
    ...
        Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
        ...
        Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy

Zabbix에서 IssuerSubject 문자열을 올바르게 서식화하려면 다음 옵션을 사용하여 OpenSSL을 호출하세요:

$ openssl x509 -noout -issuer -subject \
    -nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname\
    -in /home/zabbix/zabbix_proxy.crt

그러면 출력이 역순으로 나타나고, 쉼표로 구분되어 Zabbix 구성 파일 및 프론트엔드에서 사용할 수 있습니다:

issuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
subject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

X.509 v3 인증서 확장 사용 제한사항

Zabbix에서 X.509 v3 인증서를 구현할 때, 특정 확장은 완전히 지원되지 않거나 일관되지 않은 동작을 일으킬 수 있습니다.

Subject Alternative Name 확장

Zabbix는 IP 주소나 이메일 주소와 같은 대체 DNS 이름을 지정하는 데 사용되는 Subject Alternative Name 확장을 지원하지 않습니다. Zabbix는 인증서의 Subject 필드 값만 검증할 수 있습니다(허용된 인증서 발급자 및 주체 제한 참조). 인증서에 subjectAltName 필드가 포함된 경우, 인증서 검증 결과는 Zabbix 구성 요소를 컴파일하는 데 사용된 특정 암호화 툴킷에 따라 달라질 수 있습니다. 그 결과, Zabbix는 이러한 조합에 따라 인증서를 수락하거나 거부할 수 있습니다.

Extended Key Usage 확장

Zabbix는 Extended Key Usage 확장을 지원합니다. 하지만 사용할 경우, 일반적으로 clientAuth(TLS WWW 클라이언트 인증용)와 serverAuth(TLS WWW 서버 인증용) 속성을 모두 지정해야 합니다. 예를 들어:

  • Zabbix 에이전트가 TLS 서버로 작동하는 수동 검사에서는 에이전트의 인증서에 serverAuth 속성이 포함되어야 합니다.
  • 에이전트가 TLS 클라이언트로 작동하는 능동 검사에서는 에이전트의 인증서에 clientAuth 속성이 포함되어야 합니다.

GnuTLS는 키 사용 위반에 대해 경고를 발생시킬 수 있지만, 일반적으로 이러한 경고에도 불구하고 통신을 계속 진행하도록 허용합니다.

Name Constraints 확장

Name Constraints 확장에 대한 지원은 암호화 툴킷에 따라 다릅니다. 선택한 툴킷이 이 확장을 지원하는지 확인하십시오. 사용 중인 특정 툴킷에 따라, 이 섹션이 중요한 것으로 표시된 경우 이 확장이 Zabbix의 CA 인증서 로딩을 제한할 수 있습니다.

Certificate Revocation Lists (CRL)

인증서가 손상된 경우, Certificate Authority (CA)는 해당 인증서를 Certificate Revocation List (CRL)에 포함시켜 폐기할 수 있습니다. CRL은 구성 파일을 통해 관리되며, 서버, 프록시, 에이전트 구성 파일에서 TLSCRLFile 매개변수를 사용하여 지정할 수 있습니다. 예를 들어:

TLSCRLFile=/home/zabbix/zabbix_crl_file.crt

이 경우 zabbix_crl_file.crt는 여러 CA의 CRL을 포함할 수 있으며, 다음과 같이 보일 수 있습니다:

-----BEGIN X509 CRL-----
MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
...
treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
-----END X509 CRL-----
-----BEGIN X509 CRL-----
MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
...
CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
-----END X509 CRL-----

CRL 파일은 Zabbix가 시작될 때만 로드됩니다. CRL을 업데이트하려면 Zabbix를 재시작하십시오.

Zabbix 구성 요소가 OpenSSL로 컴파일되고 CRL이 사용되는 경우, 인증서 체인의 각 최상위 및 중간 CA가 TLSCRLFile에 해당하는 CRL(비어 있더라도)을 포함하고 있는지 확인하십시오.