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 | 許可されたサーバー証明書のサブジェクト。 |
After setting up the necessary certificates, configure Zabbix components to use certificate-based encryption.
Below are detailed steps for configuring:
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
1. Zabbixサーバの証明書設定(/manual/encryption/using_certificates#configuring_certificate_on_zabbix_server)に従って、
トップレベルCA証明書、proxy 証明書(チェーン)、秘密鍵のファイルを準備します。
proxy 設定のパラメータ TLSCAFile
、TLSCertFile
、TLSKeyFile
を適宜編集してください。
2. アクティブ proxy は、TLSConnect
パラメータを編集してください:
パッシブ proxy では、TLSAccept
パラメータを編集します:
3. これで最小限の証明書ベースのプロキシ設定ができました。TLSServerCertIssuer
と TLSServerCertSubject
パラメータを
設定して、プロキシのセキュリティを向上させることもできます (参照 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 の暗号化を設定します:
以下の例では、Issuer と Subject のフィールドに入力されています。
[Restricting allowed certificate Issuer and Subject] (/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject) を参照してください。
これらのフィールドを使用する理由と方法について説明します。
アクティブ proxy
パッシブ proxy
1. トップレベルCA証明書、agent 証明書(チェーン)、秘密鍵のファイルを準備します。 Configuring certificate on Zabbix server の説明に従って、トップレベルのCA証明書(チェーン)と秘密鍵のファイルを準備します。
それに応じて、agent 設定のパラメータ TLSCAFile
、TLSCertFile
、TLSKeyFile
を編集してください。
2. アクティブチェックのために、TLSConnect
パラメータを編集してください:
パッシブチェックのためには、TLSAccept
パラメータを編集してください:
3. これで、最小限の証明書ベースのエージェント設定ができました。TLSServerCertIssuer
と TLSServerCertSubject
パラメータを設定することで、エージェントのセキュリティを向上させることができます。
(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 の暗号化を設定します:
以下の例では、IssuerとSubjectフィールドが入力されています。
これらのフィールドを使用する理由と方法は、[Restricting allowed certificate Issuer and Subject (/manual/encryption/using_certificates#restricting_allowed_certificate_issuer_and_subject)を参照してください。
1. Prepare files with the top-level CA certificates, the Zabbix web service certificate/certificate chain, and the private key as described in the Zabbix server section. Then, edit the TLSCAFile
, TLSCertFile
, and TLSKeyFile
parameters in the Zabbix web service configuration file accordingly.
2. Edit an additional TLS parameter in the Zabbix web service configuration file: TLSAccept=cert
TLS parameters in the final web service configuration file may look as follows:
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key
3. Configure Zabbix server to connect to the TLS-configured Zabbix web service by editing the WebServiceURL
parameter in the Zabbix server configuration file:
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 文字列のフィールドの順序とフォーマットは重要です。 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 構成ファイルとフロントエンドで使用できるようになりました。
Issuer
and Subject
stringsThe rules for matching Issuer
and Subject
strings are as follows:
Issuer
and Subject
strings are checked independently. Both are optional.*
) or regular expressions are not supported.\
' backslash, U+005C):
"
' (U+0022), '+
' (U+002B), ',
' (U+002C), ';
' (U+003B), '<
' (U+003C), '>
' (U+003E), '\\
' (U+005C);#
', U+0023);For example, if Issuer
and Subject
organization (O
) strings contain trailing spaces and the Subject
organizational unit (OU
) string contains double quotes, these characters must be escaped:
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 follows the recommendations of RFC 4514, which specifies a "reverse" order for these fields, starting with the lowest-level fields (CN
), proceeding to the mid-level fields (OU
, O
), and concluding with the highest-level fields (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
In contrast, OpenSSL by default displays the Issuer
and Subject
strings in top-level to low-level order. In the following example, Issuer
and Subject
fields start with the top-level (DC
) and end with the low-level (CN
) field. The formatting with spaces and field separators also varies based on the options used, and thus will not match the format required by 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
To format Issuer and Subject strings correctly for Zabbix, invoke OpenSSL with the following options:
$ 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
The output will then be in reverse order, comma-separated, and usable in Zabbix configuration files and frontend:
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
証明書が漏洩した場合、CAはCRLに記載することで証明書を失効させることができます。CRL は server 、proxy、agent の コンフィギュレーションファイルで TLSCRLFile
というパラメータを使って設定することができます。 例えば、以下のようになります:
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(空でも可)を持つ必要があります。