This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.
Differences between revisions 8 and 66 (spanning 58 versions)
Revision 8 as of 2008-12-13 15:10:11
Size: 5352
Editor: TimoSirainen
Revision 66 as of 2021-03-26 12:17:39
Size: 88
Editor: 2a00:1190:c02a:131::1000
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Dovecot SSL configuration =

The most important settings are:

# Make sure you have imaps and pop3s if you want to support them.
# It's also possible to only use STARTTLS/STLS commands in imap/pop3 port.
protocols = imap pop3 imaps pop3s

ssl_disable = no
# Preferred permissions: root:root 0444
ssl_cert_file = /etc/ssl/certs/dovecot.pem
# Preferred permissions: root:root 0400
ssl_key_file = /etc/ssl/private/dovecot.pem

The certificate file can be world-readable, since it doesn't contain anything sensitive (in fact it's sent to each connecting SSL client). The key file's permissions should be restricted to only root (and possibly ssl-certs group or similar if your OS uses such). Dovecot opens both of these files while still running as root, so you don't need to give Dovecot any special permissions to read them (in fact: '''do not give dovecot user any permissions to the key file''').

It's possible to keep the certificate and the key both in the same file:

# Preferred permissions: root:root 0400
ssl_cert_file = /etc/ssl/dovecot.pem
ssl_key_file = /etc/ssl/dovecot.pem

It's also possible to use different certificates for IMAP and POP3:

protocol imap {
  ssl_cert_file = /etc/ssl/certs/imap.pem
  ssl_key_file = /etc/ssl/private/imap.pem
protocol pop3 {
  ssl_cert_file = /etc/ssl/certs/pop3.pem
  ssl_key_file = /etc/ssl/private/pop3.pem

== Password protected key files ==

SSL key files may be password protected. There are two ways to provide Dovecot with the password:

 1. {{{ssl_key_password}}} setting. Note that dovecot.conf is by default world-readable, so you should restrict the permissions more if you do this. However note that if you're using [:LDA:Dovecot LDA], it needs to be able to read dovecot.conf as whatever user it is running as.
 1. Starting Dovecot with {{{dovecot -p}}} asks the password. It's not stored anywhere, so this method prevents Dovecot from starting automatically at startup.

== Chained SSL certificates ==

Put all the certificates in the {{{ssl_cert_file}}} file. For example when using a certificate signed by TDC the correct order is:

 1. Dovecot's public certificate
 1. TDC SSL Server CA
 1. TDC Internet Root CA
 1. Globalsign Partners CA

== SSL security settings ==

When Dovecot starts up for the first time, it generates new 512bit and 1024bit Diffie Hellman parameters and saves them into {{{<prefix>/var/lib/dovecot/ssl-parameters.ssl}}}. After the initial creation they're by default regenerated every week. With newer computers the generation shouldn't take more than a few seconds, but with older computers it can take as long as half an hour. The extra security gained by the regeneration is quite small, so with slower computers you might want to disable it:

ssl_parameters_regenerate = 0

By default Dovecot v1.1+ allows all except the "LOW" and SSLv2 ciphers. See for a list of the ciphers. Disallowing more won't really gain any security for those using better ciphers, but it does prevent people from accidentally using insecure ciphers. You can change the cipher list with:

ssl_cipher_list = ALL:!LOW:!SSLv2

== SSL verbosity ==

verbose_ssl = yes

This will make Dovecot log all the problems it sees with SSL connections. Some errors might be caused by dropped connections, so it could be quite noisy.

== Client certificate verification/authentication ==

If you want to require clients to present a valid SSL certificate, you'll need these settings:

ssl_ca_file = /etc/ssl/ca.pem
ssl_verify_client_cert = yes

auth default {
  ssl_require_client_cert = yes
  #ssl_username_from_cert = yes

The CA file should contain the certificate(s) followed by the matching CTL(s). Note that the CRLs are required to exist. For a multi-level CA place the certificates in this order:

 1. Issuing CA cert
 1. Issuing CA CRL
 1. Intermediate CA cert
 1. Intermediate CA CRL
 1. Root CA cert
 1. Root CA CRL

The certificates and the CRLs have to be in PEM format. To convert a DER format CRL (e.g. into PEM format, use:

openssl crl -in class3-revoke.crl -inform DER -outform PEM > class3-revoke.pem

With the above settings if a client connects which doesn't present a certificate signed by one of the CAs in the {{{ssl_ca_file}}}, Dovecot won't let the user log in.

You may also force the username to be taken from the certificate by setting {{{ssl_username_from_cert = yes}}}.
 * The text is looked up from subject DN's specified field using OpenSSL's {{{X509_NAME_get_text_by_NID()}}} function.
 * By default the {{{CommonName}}} field is used.
 * With v1.1.alpha5 and later you can change the field with {{{ssl_cert_username_field = name}}} setting (parsed using OpenSSL's {{{OBJ_txt2nid()}}} function). {{{x500UniqueIdentifier}}} is a common choice.

You may also want to disable the password checking completely. Doing this currently circumvents Dovecot's security model so it's not recommended to use it, but it is possible by making the [:PasswordDatabase:passdb] allow logins using any password (typically requiring [:PasswordDatabase/ExtraFields:"nopassword" extra field] to be returned).
Page has been moved to

None: SSL/DovecotConfiguration (last edited 2021-03-26 12:44:41 by 2a00:1190:c02a:131::1000)