# Use a bought SSL certificate [TOC] iRedMail generates a self-signed SSL certificate during installation, it's fine if you just want to secure the network connections (POP3/IMAP/SMTP over TLS, HTTPS), but mail clients or web browsers will promot a annoying message to warn you this self-signed certificate is not trusted. To avoid this annoying message, you have to buy a SSL certificate from SSL certificate provider. Search `buy ssl certificate` in Google will give you many SSL providers, choose the one you prefer. > [StartSSL.com offers free one-year certificate](http://www.startssl.com/?app=1). ## Generate SSL private key and buy one SSL certificate First of all, you need to generate a new SSL certificate on your server with `openssl` command. __WARNING__: do NOT use key length smaller than `2048` bit, it's insecure. ``` # openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr ``` This command will generate two files: * `server.key`: the private key for the decryption of your SSL certificate. * `server.csr`: the certificate signing request (CSR) file used to apply for your SSL certificate. __This file is required by SSL certificate provider.__ The openssl command will prompt for the following X.509 attributes of the certificate: * `Country Name (2 letter code)`: Use the two-letter code without punctuation for country. for example: US, CA, CN. * `State or Province Name (full name)`: Spell out the state completely; do not abbreviate the state or province name, for example: California. * `Locality Name (eg, city)`: City or town name, for example: Berkeley. * `Organization Name (eg, company)`: Your company name. * `Organizational Unit Name (eg, section)`: The name of the department or organization unit making the request. * `Common Name (e.g. server FQDN or YOUR name)`: server FQDN or your name. * `Email Address []`: your full email address. * `A challenge password []`: type a password for this ssl certificate. * `An optional company name []`: an optional company name. NOTE: Some certificates can only be used on web servers using the `Common Name` specified during enrollment. For example, a certificate for the domain `domain.com` will receive a warning if accessing a site named `www.domain.com` or `secure.domain.com`, because `www.domain.com` and `secure.domain.com` are different from `domain.com`. Now you have two files: `server.key` and `server.csr`. Go to the website of your preferred SSL privider, it will ask you to upload `server.csr` file to issue an SSL certificate. Usually, SSL provider will give you 2 files: * server.crt * server.ca-bundle We need above 2 files, and `server.key`. Upload them to your server, you can store them in any directory you like, recommended directories are: * on RHEL/CentOS: `server.crt` and `server.ca-bundle` should be placed under `/etc/pki/tls/certs/`, `server.key` should be `/etc/pki/tls/private/`. * on Debian/Ubuntu, FreeBSD: `server.crt` and `server.ca-bundle` should be placed under `/etc/ssl/certs/`, `server.key` should be `/etc/ssl/private/`. * on OpenBSD: `/etc/ssl/`. ## Configure Postfix/Dovecot/Apache/Nginx to use bought SSL certificate We use CentOS for example in below tutorial, please adjust the file to correct one on your server. ### Postfix (SMTP server) We can use `postconf` command to update SSL related settings directly: ``` postconf -e smtpd_use_tls='yes' postconf -e smtpd_tls_cert_file='/etc/pki/tls/certs/server.crt' postconf -e smtpd_tls_key_file='/etc/pki/tls/private/server.key' postconf -e smtpd_tls_CAfile='/etc/pki/tls/certs/server.ca-bundle' ``` Restarting Postfix service is required. ### Dovecot (POP3/IMAP server) SSL certificate settings are defined in Dovecot main config file, `/etc/dovecot/dovecot.conf` (Linux/OpenBSD) or `/usr/local/etc/dovecot/dovecot.conf` (FreeBSD): ``` ssl = required ssl_cert = server.chained.crt ``` Then update `ssl_certificate` parameter in `/etc/nginx/conf.d/default.conf`: ``` ssl_certificate /etc/pki/tls/certs/server.chained.crt; ``` Restarting Nginx service is required. ## Reference * [Configuring HTTPS servers](http://nginx.org/en/docs/http/configuring_https_servers.html)