1 証明書の利用
概要
Zabbixでは、公開または社内の認証局(CA)によって署名された、PEM形式のRSA証明書を使用できます。
証明書の検証は、事前に設定されたCA証明書に対して実行されます。 必要に応じて、証明書失効リスト(CRL)を使用できます。
各Zabbixコンポーネントには、設定できる証明書は1つだけです。
内部CAのセットアップと運用、証明書署名要求の生成と署名、証明書の失効についての詳細は、OpenSSL PKI Tutorial v2.0 などのチュートリアルを参照してください。
証明書拡張は慎重に検討し、十分にテストしてください。 詳細は、X.509 v3証明書拡張の使用上の制限を参照してください。
証明書の設定パラメータ
以下の設定パラメータは、Zabbixコンポーネントで証明書を設定する際にサポートされています。
| Parameter | Mandatory | Description |
|---|---|---|
| TLSCAFile | yes | ピア証明書の検証用に、最上位のCA証明書を含むファイルのフルパス名。 複数のメンバーを持つ証明書チェーンを使用する場合は、下位レベルのCA証明書を先に、その後に上位レベルのCA証明書を配置してください。 複数のCAの証明書を1つのファイルに含めることができます。 |
| TLSCRLFile | no | 証明書失効リスト (CRL) を含むファイルのフルパス名。 |
| TLSCertFile | yes | 証明書を含むファイルのフルパス名。 複数のメンバーを持つ証明書チェーンを使用する場合は、サーバー、プロキシ、またはエージェントの証明書を先に、その後に下位レベルのCA証明書を配置し、最後に上位レベルのCA証明書を配置してください。 |
| TLSKeyFile | yes | 秘密鍵を含むファイルのフルパス名。 適切なアクセス権を設定し、このファイルが Zabbix user のみから読み取り可能であることを確認してください。 |
| TLSServerCertIssuer | no | 許可されるサーバー証明書の発行者。 |
| TLSServerCertSubject | no | 許可されるサーバー証明書のサブジェクト。 |
設定例
必要な証明書を設定したら、証明書ベースの暗号化を使用するように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プロキシ設定ファイル の TLSCAFile、TLSCertFile、TLSKeyFile パラメータをそれに応じて編集します。
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インターフェースでこのプロキシの暗号化を設定します。
- 管理 → プロキシ に移動します。
- プロキシを選択し、暗号化 タブをクリックします。
以下の例では、Issuer フィールドと Subject フィールドが入力されています。
これらのフィールドを使用する理由と使用方法の詳細については、許可する証明書の発行者およびサブジェクトの制限 を参照してください。
アクティブプロキシの場合:

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

Zabbixエージェント
1. Zabbixサーバー セクションで説明されているように、トップレベルCA証明書、Zabbixエージェント証明書/証明書チェーン、および秘密鍵を含むファイルを準備します。
次に、Zabbixエージェント設定ファイル の TLSCAFile、TLSCertFile、TLSKeyFile パラメータをそれに応じて編集します。
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 設定ファイル の 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
許可される証明書の発行者およびサブジェクトの制限
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 に含めるようにしてください。