ChronyはNTSが有効になっている間は同期できません。

ChronyはNTSが有効になっている間は同期できません。

2つのCentos 9 StreamシステムにChronyサーバーとクライアントを設定しました。 NTSがなければ、すべてが大丈夫で、時間が同期されます。ただし、NTS を有効にして証明書を使用するようにサーバーを構成すると、同期は失敗します。何が問題なのか知っていますか?サーバーとクライアントの構成は次のとおりです。

仕える人:

[root@server1 ~]# cat /etc/chrony.conf
pool 2.centos.pool.ntp.org iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.11.0/24
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony

ntsserverkey /etc/certs/chrony.key
ntsservercert /etc/certs/chrony.crt
[root@server1 ~]# cat /etc/chrony.keys
1 MD5 AVeryLongAndRandomPassword

顧客:

[root@client1 ~]# cat /etc/chrony.conf
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
server server1 iburst nts
[root@client1 ~]# cat /etc/chrony.keys
1 MD5 AVeryLongAndRandomPassword

同期テスト:

[root@client1 ~]# chronyd -Q -t 3 'server server1 iburst nts maxsamples 1'
2022-08-06T23:23:52Z chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
2022-08-06T23:23:52Z Disabled control of system clock
2022-08-06T23:23:52Z TLS handshake with 192.168.11.29:4460 (server1) failed : The TLS connection was non-properly terminated.
2022-08-06T23:23:55Z chronyd exiting

キャプチャを確認すると、サーバーはクライアントのhelloを受信した後に接続を終了するように見えます。

ここに画像の説明を入力してください。

答え1

NTSサーバーが使用する証明書をクライアントが信頼していますか?あなたの構成を再現し、正しく機能することができました。

サーバー設定

まず、サーバーで使用する自己署名証明書を生成します。

server# cd /etc/chrony
server# openssl req -x509 -nodes -newkey rsa:4096 \
  -keyout chrony.key -out chrony.crt \
  -sha256 -days 365 -subj /CN=server1

私はサーバーを次のように構成しました。

pool 2.centos.pool.ntp.org iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.11.0/24
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony

ntsserverkey /etc/certs/chrony.key
ntsservercert /etc/certs/chrony.crt

テストするためにデバッグモードでサーバーを起動しましたが、エラー(「資格情報を設定できません」)が表示されました。

server# chronyd -d
2022-08-08T00:54:52Z chronyd version 4.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBUG)
2022-08-08T00:54:52Z Frequency 0.765 +/- 3.876 ppm read from /var/lib/chrony/drift
2022-08-08T00:54:52Z Could not set credentials : Error while reading file.
2022-08-08T00:54:52Z Using right/UTC timezone to obtain leap second data

/etc/certs/chrony.keyこのエラーは、ルートとモードが所有する権限が原因で発生します0600。私はそれをユーザーの所有にします chrony

server# chown chrony /etc/certs/*

chronyd -dサーバーを起動すると、エラーなしで実行されます。

クライアント設定

クライアント側では設定ファイルを使用しました。

sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
server server1 iburst nts

初めて起動しようとすると、chronyd -d次のエラーが表示されます。

2022-08-08T01:01:06Z TLS handshake with 192.168.122.17:4460 (server1)
failed : Error in the certificate verification. The certificate is NOT
trusted. The certificate issuer is unknown.

これは自己署名証明書を使用しているため、予想される現象です。この問題を解決するには、証明書を信頼できる証明書としてインストールできます。私のシステム(CentOSシステムと一致する必要があるFedora)では、これはFedoraをインストールした後に次を/etc/pki/ca-trust/source/anchors実行することを意味しますupdate-ca-trust

client# cat > /etc/pki/ca-trust/source/anchors/server1.crt
<paste certificate here>
^D
client# update-ca-trust

これで実行するとchronyd -dエラーは表示されません。また、クライアントはサーバーに正常に接続されます。

2022-08-08T01:03:36Z Selected source 192.168.122.17 (server1)

そして進行中のchronyc -N authdataショーは次のとおりです。

client# chronyc -N authdata
Name/IP address             Mode KeyID Type KLen Last Atmp  NAK Cook CLen
=========================================================================
server1                      NTS     1   15  256   45    0    0    8  100

関連情報