Ich betreibe auf dem Server auch eine Nextcloud-Installation als Groupwarelösung. D.h. mein Kalender ist über mehrere Geräte abrufbar und auch teilbar, Emails können über ein Webmailer (Rainloop) versandt werden – leider ohne vernünftigen Unterstützung von GPG da man dazu den privaten Schlüssel auf dem Server hinterlegen müsste und ich einen Yubikey benutze welcher nicht unterstützt wird. Nun wollte ich für Nextcloud die Emailfunktion einrichten damit ich per Email an Termine erinnert werden kann. Trotz korrekter Verbindungsdaten funktionierte dies nicht und /var/log/mail.log quitierte die Testmail mit folgender Fehlermeldung:
postfix/smtps/smtpd[25336]: warning: TLS library problem: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:../ssl/record/rec_layer_s3.c:1544:SSL alert number 48:
Nach einer Recherche stellte sich heraus, dass sich Nextcloud an dem selbst-signierten TLS-Zertifikat stört. Andere Mailer K-9 und Thunderbird scheint das nicht zu stören da Email ansonsten funktioniert. Seit einer Weile kann man von Let’s Encrypt kostenlose Zertifikate bekommen, was ich auch reichlich auf Websites benutze. Nun gilt es das TLS-Zertifikat von Postfix auf eines von Let’s Encrypt umzustellen. Dazu muss zunächst einmal ein Zertifikat beantragt werden. Dies erfolgt mit dem Client certbot der jedoch mit apt-get install certbot installiert werden muss.
Zunächst muss der Webserver mit service apache2 stop beendet werden. Das Zertifikat wird nun für den Mailserver mit dem FQDN (Fully-Qualified Domain Name) mail.example.com durch:
certbot certonly --standalone --rsa-key-size 2048 -d mail.example.com
beantragt und im Verzeichnis /etc/letsencrypt/live/mail.example.com/ gespeichert. Der Webserver kann nun wieder mit service apache2 start gestartet werden. Nun ein gültiges Zertifikat existiert muss dies nun Postfix und Dovecot bekannt gemacht werden. Dazu werden für Postfix in /etc/postfix/main.cf folgende Zeilen bearbeitet:
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
und für Dovecot in /etc/dovecot/dovecot.conf:
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
Nun werden beide Dienste mit:
service postfix restart && service dovecot restart
neu gestartet.
Der Test der Änderung kann mit openssl durch openssl s_client -connect mail.example.com:465 erfolgen:
openssl s_client -connect mail.example.com:465 CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = mail.example.com verify return:1 --- Certificate chain 0 s:CN = mail.example.com i:C = US, O = Let's Encrypt, CN = R3 1 s:C = US, O = Let's Encrypt, CN = R3 i:O = Digital Signature Trust Co., CN = DST Root CA X3 --- Server certificate -----BEGIN CERTIFICATE----- NIIFHTCCBAWgAwIBAgISA4YQjFvSw2lOYNSldMKCU1YtMA0GCSqGSIb3DQEBCwUA MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD EwJSMzAeFw0yMTAxMTMyMTM4NTFaFw0yMTA0MTMyMTM4NTFaMBcxFTATBgNVBAMT DG1haWwuY29kYy5ldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPr qO7K4ZpsnzsocqMP5SOAJUR7uRJWdQs+QjgBmsCwf6fm+ooXTSdA976euYRUjPd3 ZpSRR3GPsqbcm4hKgpSXuAUwUem3oL08zXgUjM5bs9sJEXtZLt/2Z8zeNmuW6oVx 4UW8BQK3peT3KGOPI/hhV0F4kkwSxgQDjq9SIsVg/NPlp6TI3GiCdnEvx1tF+bIg eTEuDX5LVTwkKnPICdch/ugdRJucukU+yNB9W5XoEa+E6IlIyhCDvLL2XcIAdMW9 QbE42cy5AT79YjG9kDvE25fcq2dS/ryG1cUaNrpr6nm5qRMVzpgCgvDck4L+WVcz 4v2jrcWrpRcbzfjqLx8CAwEAAaOCAkYwggJCMA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E FgQUGIoJE5DXh1wvxrXIZ46lFz2SV8AwHwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA 5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vcjMu by5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8w FwYDVR0RBBAwDoIMbWFpbC5jb2RjLmV1MEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAb1N2rDHwMRnYmQCkURX/ dxUcEdkCwQApBo2yCJo32RMAAAF2/ebSwQAABAMARjBEAiBcqUbSxY48cdc28jdJ nVf2nAZEINcux8FVECpAon/WcAIgfUe1ZIZW3RkQ+0Nlx3lU5HySLTCXiYxPNpCS 3ZMJBvAAdgB9PvL4j/+IVWgkwsDKnlKJeSvFDngJfy5ql2iZfiLw1wAAAXb95tLb AAAEAwBHMEUCICbMRYYGaLKQdB1T6zIB3avB7v8K9HZT7NEwXlwQe+y4AiEAyYvY xQBxUy1YupnIl/5OyxYwlCYTrYGEmKYLjcBzqVgwDQYJKoZIhvcNAQELBQADggEB AIaqunre9ljffMllQCsaWh2sxkjeR1zvc3n8d1V5bseu27VV+d7TLHY4hzPlW0At PVQc1BOq2AglvuyDGeXUzJBmcWRVWBPeVP3b9ReCXCRk7vLr/I5MK17c1SPjNpjY IhTlL+EBtbBkKvS8V+SAIBIkXoZh3lRlHjeYHXoj7wwdNAwVu8VA+ZwxRSjb7DVD jC5vvg9M4+KxSY0cLMfACs62iYJ2W2KzxQYWwRDrYkBTXERlfCyfmTnlQkdXxCpR HPARfhSE6oz4OHYAapocm9IoSONgxYbK0qxU/uMLnOQfsEP/WpNnnfDU+hAkA7QU /UrxwIgkpW9s55sSvu8fQW5= -----END CERTIFICATE----- subject=CN = mail.example.com issuer=C = US, O = Let's Encrypt, CN = R3 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3003 bytes and written 384 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 50B7B0F9EF120708F68A3AFA7C5FAFC4B32C1A190C0F9E5F780329425502F9FE Session-ID-ctx: Resumption PSK: 59238839BEF70DBB21326C5F2505737F442537B5E157A792A0FEC089BA003C870B28321624669C8F259FA83E8E667C02 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - eb 00 90 5d eb 7f d6 e5-72 9c 4f e9 d1 a5 4d b9 ...]....r.O...M. 0010 - 65 07 ba ed 3f 1d ef 3d-1b 2b b6 d3 29 27 01 ac e...?..=.+..)'.. 0020 - a7 6b e1 29 10 e3 5d 54-25 0b 0d 21 19 5a 12 ff .k.)..]T%..!.Z.. 0030 - 3d 55 3b f2 63 08 cf 98-7e 16 84 e2 5a a8 a0 e6 =U;.c...~...Z... 0040 - 26 43 16 3d 3e 6f 9f 7e-b8 61 8e f3 d4 d4 ac 0f &C.=>o.~.a...... 0050 - 8f 92 19 31 1b 62 3d 56-1c 13 20 e6 71 a6 9d 26 ...1.b=V.. .q..& 0060 - c5 33 c6 54 e7 f2 c5 9f-dd 42 a8 51 04 97 7d e0 .3.T.....B.Q..}. 0070 - 41 43 65 d6 ef 02 ee 52-70 67 95 e7 c6 19 19 dc ACe....Rpg...... 0080 - d6 ed 3e 08 8e 4b a2 3c-99 e6 37 68 56 dd 7f a0 ..>..K.<..7hV... 0090 - 7a 95 f9 48 33 b0 4f 34-7b 22 0a 72 46 21 da 3d z..H3.O4{".rF!.= 00a0 - 08 7e 8f 6d ae aa 93 5a-98 7c 6b 72 e4 5b 86 ca .~.m...Z.|kr.[.. 00b0 - 41 5a 52 5c 25 85 77 a6-c5 87 bf 9b 63 79 32 5e AZR\%.w.....cy2^ 00c0 - 90 b9 eb e9 3c 79 0b d5-24 b9 17 82 af 75 9b eb ....<y..$....u.. Start Time: 1610637705 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK 220 mail.example.com ESMTP Postfix (Debian/GNU) 421 4.4.2 mail.example.com Error: timeout exceeded closed
und mit openssl s_client -connect mail.example.com:993:
openssl s_client -connect mail.example.com:993 CONNECTED(00000003) depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = mail.example.com verify return:1 --- Certificate chain 0 s:CN = mail.example.com i:C = US, O = Let's Encrypt, CN = R3 1 s:C = US, O = Let's Encrypt, CN = R3 i:O = Digital Signature Trust Co., CN = DST Root CA X3 --- Server certificate -----BEGIN CERTIFICATE----- NIIFHTCCBAWgAwIBAgISA4YQjFvSw2lOYNSldMKCU1YtMA0GCSqGSIb3DQEBCwUA MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD EwJSMzAeFw0yMTAxMTMyMTM4NTFaFw0yMTA0MTMyMTM4NTFaMBcxFTATBgNVBAMT DG1haWwuY29kYy5ldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALPr qO7K4ZpsnzsocqMP5SOAJUR7uRJWdQs+QjgBmsCwf6fm+ooXTSdA976euYRUjPd3 ZpSRR3GPsqbcm4hKgpSXuAUwUem3oL08zXgUjM5bs9sJEXtZLt/2Z8zeNmuW6oVx 4UW8BQK3peT3KGOPI/hhV0F4kkwSxgQDjq9SIsVg/NPlp6TI3GiCdnEvx1tF+bIg eTEuDX5LVTwkKnPICdch/ugdRJucukU+yNB9W5XoEa+E6IlIyhCDvLL2XcIAdMW9 QbE42cy5AT79YjG9kDvE25fcq2dS/ryG1cUaNrpr6nm5qRMVzpgCgvDck4L+WVcz 4v2jrcWrpRcbzfjqLx8CAwEAAaOCAkYwggJCMA4GA1UdDwEB/wQEAwIFoDAdBgNV HSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4E FgQUGIoJE5DXh1wvxrXIZ46lFz2SV8AwHwYDVR0jBBgwFoAUFC6zF7dYVsuuUAlA 5h+vnYsUwsYwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUFBzABhhVodHRwOi8vcjMu by5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9yMy5pLmxlbmNyLm9yZy8w FwYDVR0RBBAwDoIMbWFpbC5jb2RjLmV1MEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcG CysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5 cHQub3JnMIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAb1N2rDHwMRnYmQCkURX/ dxUcEdkCwQApBo2yCJo32RMAAAF2/ebSwQAABAMARjBEAiBcqUbSxY48cdc28jdJ nVf2nAZEINcux8FVECpAon/WcAIgfUe1ZIZW3RkQ+0Nlx3lU5HySLTCXiYxPNpCS 3ZMJBvAAdgB9PvL4j/+IVWgkwsDKnlKJeSvFDngJfy5ql2iZfiLw1wAAAXb95tLb AAAEAwBHMEUCICbMRYYGaLKQdB1T6zIB3avB7v8K9HZT7NEwXlwQe+y4AiEAyYvY xQBxUy1YupnIl/5OyxYwlCYTrYGEmKYLjcBzqVgwDQYJKoZIhvcNAQELBQADggEB AIaqunre9ljffMllQCsaWh2sxkjeR1zvc3n8d1V5bseu27VV+d7TLHY4hzPlW0At PVQc1BOq2AglvuyDGeXUzJBmcWRVWBPeVP3b9ReCXCRk7vLr/I5MK17c1SPjNpjY IhTlL+EBtbBkKvS8V+SAIBIkXoZh3lRlHjeYHXoj7wwdNAwVu8VA+ZwxRSjb7DVD jC5vvg9M4+KxSY0cLMfACs62iYJ2W2KzxQYWwRDrYkBTXERlfCyfmTnlQkdXxCpR HPARfhSE6oz4OHYAapocm9IoSONgxYbK0qxU/uMLnOQfsEP/WpNnnfDU+hAkA7QU /UrxwIgkpW9s55sSvu8fQW5= -----END CERTIFICATE----- subject=CN = mail.example.com issuer=C = US, O = Let's Encrypt, CN = R3 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 3007 bytes and written 384 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 3B829B6A111C83986FC8678EDF1A0219C6FAA6CD2A362FCD5133CFC06E3DD00D Session-ID-ctx: Resumption PSK: ABC26A5832B85510FE1503CA8E3523D1491655CFBB3D89ACA2680C6882F1F1579C446C01568636C537E5D84B0D2B64FE PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - eb 69 b6 3e ce 7a 12 e4-76 2d 3c 81 0e 11 78 61 Ji.>.z..v-<...xa 0010 - 54 68 e1 f5 2f cf 5b 86-c8 04 c1 5e 8e ff 2c 9c Th../.[....^..,. 0020 - b5 7c 2d 64 12 64 a4 a2-f3 fb 23 84 36 e2 0a ab .|-d.d....#.6... 0030 - 6f 08 df aa 84 a9 d2 53-e8 93 4f 31 87 bd c6 d6 o......S..O1.... 0040 - 08 d0 e9 1f 9d 5e b3 59-0c aa df 78 f5 67 62 4a .....^.Y...x.gbJ 0050 - e4 64 99 20 f1 3f 83 08-64 95 bd 06 52 13 d5 a2 .d. .?..d...R... 0060 - 49 b5 78 9e bb a7 63 31-0c 70 58 06 4f 69 10 03 I.x...c1.pX.Oi.. 0070 - 9c 64 1c 10 a9 72 36 50-09 70 2f 47 3c c7 37 69 .d...r6P.p/G<.7i 0080 - fa 24 92 ad a6 d6 03 fe-70 0e 9c de e8 17 bc c5 .$......p....... 0090 - 37 8e f8 3a d6 e5 3b 08-e6 53 63 66 6f ca 5b 42 7..:..;..Scfo.[B 00a0 - 5b 44 e3 c6 11 5e 44 40-a0 f3 45 00 27 5f d0 ed [D...^D@..E.'_.. 00b0 - 3b 46 63 e5 7b 32 83 6b-e0 46 18 68 cb 4f de 13 ;Fc.{2.k.F.h.O.. 00c0 - bb dd 36 48 5d 80 f0 f5-6b 4f 50 7a 1d 7c ee b6 ..6H]...kOPz.|.. Start Time: 1610638387 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: E119A3838D06788059C020BBC49A7A96C5429BD0DE15E3516C25C68A93A478FE Session-ID-ctx: Resumption PSK: A3DFD3B79A4B30E6ED6FB2E0A966F1EBD7D616F462A76094A0F51B4A21F08F5D281B8BC7575A1E2F64FBE75A92562F93 PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - 4a 69 b6 3e ce 7a 12 e4-76 2d 3c 81 0e 11 78 61 Ji.>.z..v-<...xa 0010 - 95 22 40 76 d1 9e 38 93-0c 7e 74 b1 f5 58 15 70 ."@v..8..~t..X.p 0020 - 37 69 d7 9f 23 5c a6 bc-85 21 06 ad 0b 60 36 68 7i..#\...!...`6h 0030 - ba b3 31 69 6d ac 7a 72-14 c5 bd ac a3 5b 6c 50 ..1im.zr.....[lP 0040 - 54 de 24 a9 50 4c a6 7b-87 61 45 21 db 0c 6b 45 T.$.PL.{.aE!..kE 0050 - ad cd 10 ca b8 6d fe 12-b2 df 61 5e 9d d6 91 c3 .....m....a^.... 0060 - a1 00 c7 fd c5 7b 39 76-6c 55 65 29 b3 55 2d 2b .....{9vlUe).U-+ 0070 - f9 15 52 2c 61 e7 1e 69-bd c7 57 63 b0 4f b9 8d ..R,a..i..Wc.O.. 0080 - 43 73 d6 77 56 3e 46 c6-91 3c 5e 6a 91 da 2e 7a Cs.wV>F..<^j...z 0090 - 2d c2 68 12 38 f1 ba a2-44 af 4a c1 3d 5a 71 94 -.h.8...D.J.=Zq. 00a0 - a9 f8 5d 2c 09 6c ca 14-b5 2f 34 ac 62 ab c6 c4 ..],.l.../4.b... 00b0 - e6 f8 cb b3 26 8a 76 63-49 f0 8f 03 6d 62 85 42 ....&.vcI...mb.B 00c0 - 28 0c b1 ea 40 d2 f9 e8-a0 17 c9 8e 81 76 92 e6 (...@........v.. Start Time: 1610638387 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SEPCIAL-USE XLIST LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready. * BYE Disconnected for inactivity. closed
Zur Erneuerung des Zertifikats wird, sofern er nicht schon existiert die Zeile: 0 1,13 * * * root /usr/bin/certbot renew –post-hook „systemctl reload dovecot; systemctl reload postfix“ > /dev/null 2>&1 in /etc/crontab angelegt:
echo "0 1,13 * * * root /usr/bin/certbot renew --post-hook \"systemctl reload dovecot; systemctl reload postfix\" > /dev/null 2>&1" >> /etc/crontab
Mit dieser Modifikation funktioniert nun auch die Mailfunktion von Nextcloud problemlos.