1 証明書の利用

概要

Zabbixでは、公開または社内の認証局(CA)によって署名された、PEM形式のRSA証明書を使用できます。

証明書の検証は、事前に設定されたCA証明書に対して実行されます。 必要に応じて、証明書失効リスト(CRL)を使用できます。

各Zabbixコンポーネントには、設定できる証明書は1つだけです。

内部CAの設定と運用、証明書要求の生成と署名、証明書の失効についての詳細は、OpenSSL PKI Tutorial v2.0 などのチュートリアルを参照してください。

証明書拡張は慎重に検討し、十分にテストしてください。 詳細は、X.509 v3証明書拡張の使用上の制限を参照してください。

証明書の設定パラメータ

以下の設定パラメータは、Zabbixコンポーネントで証明書を設定するためにサポートされています。

パラメータ 必須 説明
TLSCAFile はい ピア証明書の検証に使用する最上位CA証明書を含むファイルのフルパス名。
複数のメンバーからなる証明書チェーンを使用する場合は、下位レベルのCA証明書を先に、その後に上位レベルのCA証明書を配置してください。
複数のCAの証明書を1つのファイルに含めることができます。
TLSCRLFile いいえ 証明書失効リスト (CRL) を含むファイルのフルパス名。
TLSCertFile はい 証明書を含むファイルのフルパス名。
複数のメンバーからなる証明書チェーンを使用する場合は、サーバー、プロキシ、またはエージェントの証明書を先頭に配置し、その後に下位レベルのCA証明書、最後に上位レベルのCA証明書を配置してください。
TLSKeyFile はい 秘密鍵を含むファイルのフルパス名。
適切なアクセス権を設定し、このファイルが Zabbix user のみ読み取り可能であることを確認してください。
TLSServerCertIssuer いいえ 許可されるサーバー証明書の発行者。
TLSServerCertSubject いいえ 許可されるサーバー証明書のサブジェクト。

設定例

必要な証明書を設定した後、証明書ベースの暗号化を使用するようにZabbixコンポーネントを設定します。

以下に、次の設定手順の詳細を示します。

Zabbixサーバー

1. CA証明書ファイルを準備します。

ピア証明書を検証するために、Zabbixサーバーは最上位の自己署名ルートCA証明書を含むファイルにアクセスできる必要があります。
例えば、2つの独立したルート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サーバー証明書/証明書チェーンを、例えば /home/zabbix/zabbix_server.crt のファイルに配置します。
最初の証明書はZabbixサーバー証明書で、その後に中間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サーバー秘密鍵を、例えば /home/zabbix/zabbix_server.key のファイルに配置します。

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

4. Zabbixサーバー設定ファイルでTLS設定パラメータを編集します。

TLSCAFile=/home/zabbix/zabbix_ca_file.crt
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
Zabbixプロキシ

1. Zabbixサーバー セクションで説明されているとおりに、トップレベルCA証明書、Zabbixプロキシ証明書/証明書チェーン、および秘密鍵を含むファイルを準備します。
次に、Zabbixプロキシ設定ファイルTLSCAFileTLSCertFileTLSKeyFile パラメータを適切に編集します。

2. Zabbixプロキシ設定ファイル で追加のTLSパラメータを編集します。

  • アクティブプロキシの場合: TLSConnect=cert
  • パッシブプロキシの場合: TLSAccept=cert

プロキシのセキュリティを向上させるために、TLSServerCertIssuer および TLSServerCertSubject パラメータを設定することもできます。
詳細については、許可される証明書の発行者およびサブジェクトの制限 を参照してください。

最終的なプロキシ設定ファイルの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 Webインターフェースでこのプロキシの暗号化を設定します。

  • Administration → Proxies に移動します。
  • プロキシを選択し、Encryption タブをクリックします。

以下の例では、Issuer フィールドと Subject フィールドが入力されています。
これらのフィールドを使用する理由と使用方法の詳細については、許可される証明書の発行者およびサブジェクトの制限 を参照してください。

アクティブプロキシの場合:

パッシブプロキシの場合:

Zabbixエージェント

1. Zabbixサーバー セクションで説明されているように、トップレベルCA証明書、Zabbixエージェント証明書/証明書チェーン、および秘密鍵のファイルを準備します。 次に、Zabbixエージェント設定ファイルTLSCAFileTLSCertFileTLSKeyFile パラメータをそれに応じて編集します。

2. Zabbixエージェント設定ファイル で追加のTLSパラメータを編集します。

  • アクティブエージェントの場合: TLSConnect=cert
  • パッシブエージェントの場合: TLSAccept=cert

エージェントのセキュリティを向上させるため、TLSServerCertIssuer および TLSServerCertSubject パラメータを設定できます。 詳細については、許可される証明書の発行者およびサブジェクトの制限 を参照してください。

最終的なエージェント設定ファイル内の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. このエージェントによって監視されるホストについて、Zabbix Webインターフェースで暗号化を設定します。

  • 次へ移動: データ収集 → ホスト
  • ホストを選択し、暗号化 タブをクリックします。

以下の例では、Issuer フィールドと Subject フィールドが入力されています。 これらのフィールドを使用する理由と使用方法の詳細については、許可される証明書の発行者およびサブジェクトの制限 を参照してください。

Zabbix web service

1. Zabbix server セクションで説明されているとおりに、最上位CA証明書、Zabbix web service の証明書/証明書チェーン、および秘密鍵を含むファイルを準備します。
次に、Zabbix web service 設定ファイルTLSCAFileTLSCertFileTLSKeyFile パラメータをそれに応じて編集します。

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

許可される証明書の発行者およびサブジェクトの制限

2つの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サーバーとは通信しません。
同様に、パッシブプロキシは、そのようなサーバーからのリクエストを受け付けません。

Issuer および Subject 文字列の照合ルール

Issuer および Subject 文字列の照合ルールは以下のとおりです。

  • Issuer 文字列と Subject 文字列は、それぞれ独立してチェックされます。
    どちらも省略可能です。
  • 文字列が指定されていない場合は、任意の文字列が受け入れられます。
  • 文字列はそのまま比較され、完全に一致する必要があります。
  • 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)。
  • Null 文字(U+0000)はサポートされていません。
    Null 文字が検出された場合、照合は失敗します。
  • RFC 4517 および RFC 4518 の標準はサポートされていません。

たとえば、Issuer および Subject の organization (O) 文字列に末尾スペースが含まれ、Subject の organizational unit (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 はデフォルトで Issuer および Subject の文字列を、上位レベルから下位レベルへの順序で表示します。
次の例では、Issuer フィールドと Subject フィールドは最上位レベル (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 用に Issuer および Subject の文字列を正しく整形するには、次のオプションを付けて 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 の設定ファイルおよびWebインターフェースで使用できる形式になります。

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フィールドの値のみです(許可された証明書の発行者および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拡張のサポートは、暗号ツールキットによって異なります。
選択したツールキットがこの拡張をサポートしていることを確認してください。
使用しているツールキットによっては、このセクションがcriticalとしてマークされている場合、この拡張によりZabbixがCA証明書を読み込めなくなることがあります。

証明書失効リスト(CRL)

証明書が侵害された場合、認証局(CA)はその証明書を証明書失効リスト(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 および中間 CA に対応する CRL(空であっても)を TLSCRLFile に含めるようにしてください。