Chrony는 NTS가 활성화된 상태에서 동기화할 수 없습니다.

Chrony는 NTS가 활성화된 상태에서 동기화할 수 없습니다.

두 개의 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

관련 정보