You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

1 証明書の利用

概要

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

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

各Zabbixコンポーネントには、1つの証明書のみを設定できます。

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

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

証明書の設定パラメータ

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

パラメータ 必須 説明
TLSCAFile はい ピア証明書の検証のための最上位CA証明書を含むファイルのフルパス名。
複数のメンバーを持つ証明書チェーンを使用する場合は、下位CA証明書を先に、上位CA証明書を後に並べてください。
複数のCAの証明書を1つのファイルに含めることができます。
TLSCRLFile いいえ 証明書失効リスト(CRL)を含むファイルのフルパス名。
TLSCertFile はい 証明書を含むファイルのフルパス名。
複数のメンバーを持つ証明書チェーンを使用する場合は、サーバー、プロキシ、またはエージェント証明書を先に、下位CA証明書を次に、上位CA証明書を最後に並べてください。
TLSKeyFile はい 秘密鍵を含むファイルのフルパス名。
このファイルがZabbixユーザーのみ読み取り可能であることを、適切なアクセス権を設定して確認してください。
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 NameNetscape 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フロントエンドでこのプロキシの暗号化を設定します:

  • 管理 → プロキシに移動します。
  • プロキシを選択し、暗号化タブをクリックします。

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

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

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

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フロントエンドで設定します。

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

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

Zabbix Webサービス

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

2. Zabbix Webサービスの設定ファイルで追加のTLSパラメータを編集します: TLSAccept=cert

最終的なWebサービスの設定ファイルの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サーバーの設定ファイルWebServiceURLパラメータを編集して、TLSで設定されたZabbix Webサービスに接続するようにZabbixサーバーを設定します:

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)。
  • ヌル文字(U+0000)はサポートされていません。 ヌル文字が検出された場合、マッチングは失敗します。
  • RFC 4517およびRFC 4518標準はサポートされていません。

例えば、IssuerおよびSubjectの組織(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)から始まり、中間レベルのフィールド(OUO)を経て、最上位のフィールド(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

IssuerおよびSubject文字列をZabbix用に正しくフォーマットするには、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証明書をロードできなくなる可能性があります。

証明書失効リスト (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に対応するCRL (空でも可) が TLSCRLFile に含まれていることを確認してください。