Використовуйте для генерації безкоштовного робочого сертифікату Let's Encrypt. Сервіс, який дозволяє генерувати SSL сертифікати за допомогою автоматичного API.

Усі приклади і команди відображатимуться на базі Ubuntu 16.04. Домен, для якого потрібно згенерувати сертифікат, повинен бути закріпленим (pointed) за поточним Linux сервером.

Виконайте наступні кроки, щоб згенерувати та підключити сертифікат:

1. Встановіть Certbot:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

2. Certbot повинен відповісти на криптографічний запит, який відправляє «Let's Encrypt API», щоб довести, що ви контролюєте домен. Відкрийте потр 80 (HTTP) або 443 (HTTPS) у вашому брандмауері. Виконайте команду:

sudo ufw allow 80

Якщо команда ufw недоступна, встановіть її:

sudo apt-get install ufw

3. Запустіть Certbot:

sudo certbot certonly --standalone --preferred-challenges http -d example.com

де example.com - назва вашого домену.

В результаті виконання команди certbot будуть згенеровані файли сертифікату, які можна знайти у папці:

/etc/letsencrypt/live/example.com

Для перегляду її вмісту, виконайте команду ls:

sudo ls /etc/letsencrypt/live/example.com
вивід:
cert.pem chain.pem fullchain.pem privkey.pem README 

Причиною того, що файли не згенерувалися може бути зайнятість порту 80 чи 433  іншою програмою, наприклад веб-сервером. Тимчасово зупиніть веб-сервер. Виконайте команду:

#якщо ви використовуєте apache2:
service apache2 stop
#якщо ви використовуєте nginx:
service nginx stop

і повторіть цей пункт знову. Не забудьте запустити веб-сервер по закінченню.

#якщо ви використовуєте apache2:
service apache2 start
#якщо ви використовуєте nginx:
service nginx start

4. Підключіть сертифікат у налаштуваннях віртуального хоста.

Для Apache2 використовуйте код:

<VirtualHost *:443>
ServerName example.com
.....
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
.....
</VirtualHost>

Для Nginx:

server {
listen *:443 ssl;
.....
ssl  on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

server_name example.com;
....
} 

5. Перезавантажте веб-сервер:

#якщо ви використовуєте apache2
service apache2 restart
#якщо ви використовуєте nginx
service nginx restart

6. Включити авто-оновлення:

Для того щоб включити автооновлення, достатньо у кронтаб системи додати запис

0 2 15 * * /usr/bin/certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"