problema della libreria TLS durante la connessione a Dovecot

8

Ho un certificato Comodo PositiveSSL emesso per mail.btcontract.com e ho impostato Postfix e Dovecot per lavorare con esso nel seguente modo:

Postfix main.cf:

smtpd_tls_cert_file  = /etc/ssl/mail/mail_btcontract_com.crt
smtpd_tls_key_file   = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile     = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile      = /etc/ssl/mail/AddTrustExternalCARoot.crt

dovecot.conf:

ssl_cert =< /etc/ssl/mail/mail_btcontract_com.pem
ssl_key  =< /etc/ssl/mail/mail_btcontract_com.key

Ho generato pem su crt seguendo questo tutorial: link

Il problema è che quando provo a collegarmi al mio server da un client di posta Thunderbird vedo i seguenti errori:

Allo stesso tempo in /var/log/mail.log vedo questo:

Nov 16 12:15:57 BTContractTest postfix/smtpd[22870]: connect from 51-28-134-95.pool.ukrtel.net[95.134.28.51]
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: Anonymous TLS connection established from 51-28-134-95.pool.ukrtel.net[95.134.28.51]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: warning: TLS library problem: 22870:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1258:SSL alert number 48:
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: lost connection after STARTTLS from 51-28-134-95.pool.ukrtel.net[95.134.28.51]  

Quando provo openssl s_client -connect mail.btcontract.com:143 -starttls imap , prima vedo questo:

CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=21:unable to verify the first certificate
verify return:1

Cosa sta succedendo e cosa dovrei fare per risolvere tutto questo?
Inoltre, questi sono tutti i file che ho ricevuto dall'autorità di certificazione:

Non uso mai cerattori intermedi, potrebbe essere la fonte del problema?

UPDATE

Seguendo il consiglio di Thomas Pornin ho fatto quanto segue:

cat mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt  

e poi in Postfix main.cf:

smtpd_tls_cert_file  = /etc/ssl/mail/full.crt
smtpd_tls_key_file   = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile     = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile      = /etc/ssl/mail/AddTrustExternalCARoot.crt

dovecot.conf:

ssl_cert =< /etc/ssl/mail/full.crt

E ora sto riscontrando un errore diverso:

Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: cannot get RSA private key from file /etc/ssl/mail/mail_btcontract_com.key: disabling TLS support 
Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: TLS library problem: 23921:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:330:  

Ho provato a cambiare le posizioni dei certificati concatenati e ho anche cercato di includere root ca in questo modo:

cat AddTrustExternalCARoot.crt mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt  

Ma nessuna fortuna finora.

    
posta Anton 16.11.2014 - 13:43
fonte

3 risposte

3

In SSL / TLS, il server dovrebbe inviare non solo il suo certificato, ma una catena completa che va dalla radice al certificato del server (la radice stessa può essere omessa, ma la CA intermedia deve essere inviata). Se il server non invia una catena completa, spetta al client provare a completarlo, ad es. scaricando il certificato mancante, ma non è obbligatorio per i client SSL / TLS fare qualsiasi sforzo in tal senso. Un cliente può rifiutare immediatamente una catena incompleta.

L'opzione smtpd_tls_cert_file dovrebbe puntare a un file che contiene la catena, cioè tutti i certificati in formato PEM, concatenati nell'ordine catena (a partire dal certificato del server). Vedi la documentazione . Il formato PEM è quello in cui il certificato è codificato in Base64, con un'intestazione -----BEGIN CERTIFICATE----- esplicita. Se si dispone di un certificato in formato binario, è possibile convertirlo in PEM con:

openssl x509 -inform DER -in cert.crt -out cert.pem

Per prima cosa apri con un editor di testo (o un semplice comando more ) i certificati che devi vedere se sono in binario, o già in PEM. Quindi concatena i certificati PEM in un singolo file di testo, come descritto nella documentazione di Postfix.

    
risposta data 16.11.2014 - 14:03
fonte
5

Ho avuto un problema molto simile con Postfix e Dovecot su Ubuntu. Avevo acquistato il certificato SSL di base da Comodo e poiché ho selezionato "altro" come tipo di server ho finito con un file zip con quattro file di certificato, come per i post precedenti.

Non ricevevo eccezioni di sicurezza nel client. Nel mio caso non sono riuscito nemmeno a superare la configurazione dell'account e il rilevamento del server in Thunderbird, nonostante avessi selezionato le porte corrette in Thunderbird. Nel log di sistema del server ricevevo errori di interruzione della connessione SSL sulla CA sconosciuta, molto simile a quanto detto sopra.

L'ho risolto correttamente utilizzando un editor di testo per concatenare tutti e quattro i certificati in un unico file, iniziando con il mio certificato in alto e successivamente i due certificati intermedi e infine il certificato CA in basso. Ho quindi indicato la configurazione di Postfix e Dovecot in questo file combinato e Thunderbird è riuscito a connettersi e ho potuto inviare / ricevere email.

    
risposta data 24.11.2014 - 00:18
fonte
2

Verifica che la tua chiave non sia protetta da passphrase. Postfix non supporta le chiavi protette da passphrase in ogni caso è possibile rimuovere la passphrase dalla chiave usando un comando openssl

openssl rsa -in passphrase.key -out nopassphrase.key

non è necessario includere la CA principale se il pacchetto CA non include la CA Root puoi aggiungerlo:

cat /etc/ssl/mail/AddTrustExternalCARoot.crt >> /etc/ssl/certs/ca-bundle.crt

E poi cambia questa linea:

smtpd_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt

per questo

smtpd_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
    
risposta data 25.11.2014 - 00:50
fonte

Leggi altre domande sui tag