Я использовал OpenSSL для создания закрытого ключа и самозаверяющего открытого сертификата. Затем я создал файл центра сертификации, содержащий как закрытый ключ, так и открытый сертификат (mail.example.com.pem). На клиентском компьютере в локальной сети я использую OpenSSL для подключения к Postfix через порт 587 (SMTP) и говорю OpenSSL использовать файл центра сертификации (mail.example.com.pem).
openssl s_client -connect mail.example.com:587 -starttls smtp -CAfile /etc/pki/tls/private/mail.example.com.pem
Это дает довольно много вывода. В вывод включается публичный сертификат из файла центра сертификации.
После всех TLS, сертификатов и другой информации о безопасности у меня мигает курсор, поэтому я пытаюсь поздороваться с Postfix.
EHLO mail.example.com
Эта команда выдает «сертификат клиента не представлен».
Это странно, потому что я буквально вижу публичный сертификат в предыдущем выводе. У меня такое чувство, что здесь не хватает чего-то концептуального. Например, мне нужно сказать клиенту, чтобы он отправил или использовал публичный сертификат? Отличается ли публичный сертификат на сервере Postfix от сертификата клиента?
Цель: Моя общая цель - настроить Postfix для шифрования электронной почты вместо отправки электронной почты без шифрования.
Вот результат postconf -n команда:
data_directory = /var/lib/postfix
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_command =
mydestination = example.com, localhost.example.com, localhost
mynetworks_style = host
queue_directory = /var/spool/postfix
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = no
smtpd_sasl_path = private/auth
smtpd_tls_CAfile = /etc/pki/tls/mail.example.com.pem
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/pki/tls/mail.example.com.crt
smtpd_tls_key_file = /etc/pki/tls/mail.example.com.key
smtpd_tls_loglevel = 3
smtpd_tls_req_ccert = yes
smtpd_tls_security_level = encrypt
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_cache
smtpd_tls_session_cache_timeout = 3600s
tls_random_exchange_name = /var/lib/postfix/prng_exch
tls_random_source = dev:/dev/urandom
Вы установили smtpd_tls_req_ccert
в вашей конфигурации Postfix.
Эта директива требует, чтобы у всех клиентов был клиент сертификат, выданный вами конкретному клиенту. Входящие SMTP-соединения с вашим сервером разрешены только с предварительно утвержденных хостов.
Это явно не то, что вам нужно. Вы пытаетесь получать почту со всего Интернета и не можете выдавать клиентские сертификаты каждому SMTP-серверу в мире.
Сначала удалите эту директиву и повторите попытку. У вас могут быть другие проблемы, но именно они вызывают непосредственную проблему.