Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

1 証明書の利用

概要

Zabbix では、公開または社内CAによって署名されたPEM形式のRSA証明書を使用することができます。
証明書の検証は、事前に設定されたCA証明書と照合します。オプションとして、証明書リボケーションリスト(CRL)を
使用することができます。
各Zabbixコンポーネントに設定できる証明書は1つだけです。

内部CAの設定と操作方法、証明書要求の生成と署名方法、証明書の失効方法の詳細については、
[OpenSSL PKI Tutorial v1.1] (http://pki-tutorial.readthedocs.org/en/latest/) などのオンラインHowToを参照してください。

証明書の拡張を慎重に検討し、テストしてください。
Limitations on using X.509 v3 certificate extensions を参照してください。

証明書の設定パラメータ

パラメータ 必須 説明
TLSCAFile * ピア証明書検証用の最上位 CA(s) 証明書を含むファイルのフル パス名。
複数のメンバーを持つ証明書チェーンの場合は、それらを順序付ける必要があります。最初に下位レベルの CA 証明書、次に上位レベルの CA(s) の証明書が続きます。
複数のCA(s)からの証明書を 1 つのファイルに纏めることができます。
TLSCRLFile 証明書失効リストを含むファイルのフル パス名。 証明書失効リスト (CRL) の注釈を参照してください。
TLSCertFile * 証明書 (証明書チェーン) を含むファイルのフル パス名。
複数のメンバーを持つ証明書チェーンの場合、最初にサーバー、プロキシ、またはエージェントの証明書、次に下位レベルの CA 証明書、次に上位レベルの CA(s)証明書の順に並べる必要があります。
TLSKeyFile * 秘密鍵を含むファイルのフル パス名。このファイルはZabbix ユーザーだけが読み取れるようにアクセス権を設定する必要があります。
TLSServerCertIssuer 許可されたサーバー証明書の発行者。
TLSServerCertSubject 許可されたサーバー証明書のサブジェクト。

Zabbixサーバでの証明書設定

1. 相手の証明書を検証するために、Zabbixサーバは相手のトップレベルの自己署名付きルートCA証明書のファイルに
アクセスする必要があります。例えば、2つの独立したルートCAからの証明書が必要な場合、これらの証明書を
以下のようにファイル /home/zabbix/zabbix_ca_file に格納します:

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)に格納します:

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-----

ここでは、最初にZabbix server 証明書、その後に中間CA証明書を掲載しています。

3. Zabbix server の秘密鍵をファイル(例: /home/zabbix/zabbix_server.key) に格納します:

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

4. Zabbixサーバ設定ファイルのTLSパラメータを以下のように編集してください:

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

Zabbix proxy における証明書ベースの暗号化設定

1. Zabbixサーバの証明書設定(/manual/encryption/using_certificates#configuring_certificate_on_zabbix_server)に従って、
トップレベルCA証明書、proxy 証明書(チェーン)、秘密鍵のファイルを準備します。
proxy 設定のパラメータ TLSCAFileTLSCertFileTLSKeyFile を適宜編集してください。

2. アクティブ proxy は、TLSConnect パラメータを編集してください:

TLSConnect=cert

パッシブ proxy では、TLSAccept パラメータを編集します:

TLSAccept=cert

3. これで最小限の証明書ベースのプロキシ設定ができました。TLSServerCertIssuerTLSServerCertSubject パラメータを
設定して、プロキシのセキュリティを向上させることもできます (参照 Restricting allowed certificate Issuer and Subject).

4. 最終的なプロキシ設定ファイルでは、TLSパラメータは次のようになります:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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

5. Zabbixフロントエンドでこの proxy の暗号化を設定します:

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

以下の例では、Issuer と Subject のフィールドに入力されています。
[Restricting allowed certificate Issuer and Subject] (/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject) を参照してください。
これらのフィールドを使用する理由と方法について説明します。

アクティブ proxy

proxy_active_cert.png

パッシブ proxy

proxy_passive_cert.png

Zabbix agent の証明書ベースの暗号化設定

1. トップレベルCA証明書、agent 証明書(チェーン)、秘密鍵のファイルを準備します。 Configuring certificate on Zabbix server の説明に従って、トップレベルのCA証明書(チェーン)と秘密鍵のファイルを準備します。
それに応じて、agent 設定のパラメータ TLSCAFileTLSCertFileTLSKeyFile を編集してください。

2. アクティブチェックのために、TLSConnectパラメータを編集してください:

TLSConnect=cert

パッシブチェックのためには、TLSAccept パラメータを編集してください:

TLSAccept=cert

3. これで、最小限の証明書ベースのエージェント設定ができました。TLSServerCertIssuerTLSServerCertSubject
パラメータを設定することで、エージェントのセキュリティを向上させることができます。
(Restricting allowed certificate Issuer and Subject を参照してください).

4. 最終的なエージェント設定ファイルでは、TLSパラメータは以下のようになります:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       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

(この例では、proxy 経由でホストを監視しているため、proxy 証明書の Subject を想定しています)

5. Zabbixフロントエンドでこの agent の暗号化を設定します:

  • Configuration → Hosts に移動します。
  • ホストを選択し、Encryption タブをクリックします。

以下の例では、IssuerとSubjectフィールドが入力されています。
これらのフィールドを使用する理由と方法は、[Restricting allowed certificate Issuer and Subject (/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject)を参照してください。

agent_config.png

許可された証明書の発行者とサブジェクトを制限する

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 サーバーと通信しません。パッシブ プロキシはそのようなサーバーからの要求を受け入れません。

発行者または件名の文字列の一致に関するいくつかの注意事項:

  1. 発行者と件名の文字列は個別にチェックされます。 どちらもオプションです。
  2. UTF-8 文字を使用できます。
  3. 文字列が指定されていない場合、任意の文字列が受け入れられます。
  4. 文字列は"そのまま"比較されます。一致するにはまったく同じでなければなりません。
  5. 一致では、ワイルドカードと正規表現はサポートされていません。
  6. RFC 4514 Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Namesの一部要件のみが実装されています。
    1. 任意の場所のエスケープ文字 '"' (U+0022)、'+' U+002B、',' U+002C、';'U+003B、'<' U+003C、'>' U+003E、'\' U+005C
    2. 文字列の先頭にあるエスケープ文字スペース (' ' U+0020) または番号記号 ('#'U+0023)
    3. 文字列の末尾のエスケープ文字スペース (' ' U+0020)
  7. null 文字 (U+0000) が検出された場合、一致は失敗します (RFC4514 で許可されています)
  8. RFC 4517 Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules および RFC 4518 Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation は、多くの作業が必要なためサポートされていません。

Issuer および Subject 文字列のフィールドの順序とフォーマットは重要です。 Zabbix は RFC4514 の推奨に従い、フィールドの"逆"順を使用します。

逆順例:

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

低レベル (CN) で始まり、中レベル (OU、O) に進み、最上位 (DC) フィールドで終わることに注意してください。

OpenSSL では、使用する追加オプションに応じて、デフォルトで証明書の発行者フィールドとサブジェクト フィールドが"通常の"順序で表示されます。

$ 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

ここで、発行者とサブジェクトの文字列はトップレベル (DC) で始まり、ローレベル (CN) フィールドで終わります。スペースとフィールド区切り文字は、使用するオプションによって異なります。 これらの値はいずれも、Zabbix 発行者フィールドとサブジェクト フィールドで一致しません!

Zabbix で使用できる適切な発行者と件名の文字列を取得するには、特別なオプションを指定して OpenSSL を呼び出します
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname:

$ 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
       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

文字列フィールドが逆順になり、フィールドがカンマで区切られ、Zabbix 構成ファイルとフロントエンドで使用できるようになりました。

X.509 v3 証明書拡張の使用に関する制限

  • 件名の別名(subjectAltName)拡張
    subjectAltName拡張からの代替件名(IPアドレス、電子メールアドレス等)は、Zabbixではサポートされていません。 Zabbixで確認できるのは"Subject"フィールドの値のみです (許可された証明書の発行者とサブジェクトの制限 を参照してください)。
    証明書が subjectAltName 拡張子を使用している場合、結果は、Zabbix コンポーネントがコンパイルされている暗号化ツールキットの特定の組み合わせによって異なります (動作する場合と動作しない場合があり、Zabbix はピアからのそのような証明書の受け入れを拒否する場合があります)。
  • 拡張キーの使用拡張。
    使用する場合、一般に clientAuth (TLS WWW クライアント認証) と serverAuth (TLS WWW サーバー認証) の両方が必要です。
    たとえば、パッシブ チェックでは、Zabbix エージェントは TLS サーバーの役割で動作するため、serverAuth をエージェント証明書に設定する必要があります。 アクティブ チェックのエージェント証明書には、clientAuth を設定する必要があります。
    GnuTLS は、鍵の使用法に違反した場合に警告を発行しますが、通信は続行できます。
  • 名前制約 拡張
    すべての暗号化ツールキットがサポートしているわけではありませんが、この拡張機能により、このセクションが重要とマークされているCA証明書を Zabbix がロードできない場合があります (暗号化ツールキットによって異なります)。

証明書失効リスト(CRL)

証明書が漏洩した場合、CAはCRLに記載することで証明書を失効させることができます。CRL は server 、proxy、agent の コンフィギュレーションファイルで TLSCRLFile というパラメータを使って設定することができます。 例えば、以下のようになります:

TLSCRLFile=/home/zabbix/zabbix_crl_file

zabbix_crl_file には複数の 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コンポーネントがOpenSSLでコンパイルされ、CRLを使用する場合、証明書チェーンのトップレベル及び
中間レベルの各CAは、TLSCRLFileに対応するCRL(空でも可)を持つ必要があります。