Thank you for reading this post, don't forget to subscribe!
Столкнулся с небольшой ошибкой в логе postfix, которая не влияет непосредственно на работоспособность почтовой системы, но тем не менее, надо было ее исправить. Она связана с тем, что postfix не знает обо всех актуальных CA сертификатах и не всегда может проверить валидность сертификата при общении с другими серверами.
Сама ошибка выглядит следующим образом:
1 |
Oct 30 21:00:50 postfix/smtp[25602]: certificate verification failed for gmail-smtp-in.l.google.com[64.233.162.26]:25: untrusted issuer /OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign |
В принципе, по тексту все понятно и без пояснений. Postfix не может проверить издателя (issuer) сертификата. Сервер очень старый, обновлений CA на нем давно не было и они уже не выходят. Решил просто руками обновить список CA сертификатов.
Для начала проверим, задан ли вообще в конфиге postfix параметр smtp_tls_CAfile. Для этого просто откройте файл main.cf и проверьте там. Если ничего нет, значит стоит дефолтное значение. Какое оно, можно проверить командой postconf.
1 |
# postconf | grep smtp_tls_CAfile |
Если параметр не задан, то зададим его сами. Если же указан какой-то конкретный файл, то надо работать с ним.
Сначала просто качаем свежий файл с CA сертификатами. Я не знаю, где брать самый актуальный и полный. Гугл почти везде меня привел к ссылке https://curl.haxx.se/ca/cacert.pem. Оттуда и возьмем. В системах, где я обновлял файл, старый находился по адресу /etc/pki/tls/certs/ca-bundle.crt, поэтому сначала сделаем его бэкап, а потом заменим новым.
1 2 |
# cp /etc/pki/tls/certs/ca-bundle.crt /root/ca-bundle.crt-old # curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt |
или
1 |
# wget -O --no-check-certificate /etc/pki/tls/certs/ca-bundle.crt https://curl.haxx.se/ca/cacert.pem |
Дальше укажем на этот файл в конфиге postfix — main.cf. Для этого добавляем туда:
1 |
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt |
После этого надо перезапустить postfix. Я проделал это на нескольких серверах. Ошибка исчезла, кроме одного домена — mx.yandex.ru. Для него по-прежнему не получалось проверить подлинность сертификата:
1 |
Oct 30 19:46:37 postfix/smtp[11671]: certificate verification failed for mx.yandex.ru[213.180.204.89]:25: untrusted issuer /C=PL/O=Unizeto Sp. z o.o./CN=Certum CA |
Я проверил файл ca-bundle.crt, там действительно не было информации об издателе Certum CA. Не придумал ничего лучше, кроме как добавить его туда вручную. Для этого скачал CA.pem с сайта издателя — https://www.certum.pl/CA.pem и добавил его содержимое в самый конец ca-bundle.crt.
То есть просто дабвил вот это в конец файла ca-bundle.crt, по аналогии с остальными записями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Certum Certification Authority =============================== -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs 6GAqm4VKQPNriiTsBhYscw== -----END CERTIFICATE----- |
Подозреваю, что где-то есть более полный файл с мировыми CA root.