Генерация самоподписанного SSL сертификата

Это будет очень короткая статья. Очередная из серии шпаргалок. Генерация самоподписанного SSL сертификата необходима в том случае, когда у вас нет возможности выпустить сертификат от доверенного центра сертификации или хотя бы выпустить сертификат от внутреннего центра сертификации. В примере ниже для генерации самоподписанного сертификата будет использоваться утилита openssl.

Если у вас уже есть самоподписанный сертификат в PFX формате, то вы можете его конвертировать в отдельный файлы открытого и закрытого ключа.

Генерация самоподписанного SSL сертификата

Для генерации самоподписанного сертификата я буду использовать утилиту openssl.

openssl version
[roman@server ~]$ openssl version
OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)
[roman@server ~]$ 

Предварительно необходимо создать директории для хранения файлов открытого и закрытого ключа – расположение директорий может быть любое:

sudo mkdir /etc/ssl/private/ /etc/ssl/certs/

Команда для генерации сертификата очень простая:

sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/itproblog.key -out /etc/ssl/certs/itproblog.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:*.itproblog.ru
Email Address []:
[roman@studentvm1 ~]$ 

Параметры команды по генерации сертификата приведены в таблице ниже. Полный перечень параметров доступен в документации.

ПараметрЗначение
reqУказываем утилите openssl, что мы будем выполнять запрос на генерацию сертификата
-x509Тип сертификата – X.509
-nodesУказывает на то, что файл закрытого ключа не нужно шифровать
-newkeyПараметр указывает на то, что нужно создать новый закрытый ключ. В качестве параметра мы передает тип алгоритма шифрования и размер ключа – rsa:2048
-keyoutДиректория для хранения закрытого ключа
-outДиректория для хранения открытого ключа

По большому счету вам необходимо будет указать только Common Name, т.е. имя, на которое вы выпускаете сертификат. Это может быть какое-то конкретное имя или же, как в моем случае, wildcard сертификат.

Пример использования самоподписанного SSL сертификата

Теперь мы можем использовать наш самоподписанный сертифакат для нужных нам сервисов. Например, для сайтов на сервер nginx.

Пример стандартной конфигурации nginx для использования SSL сертификата:

server {
	listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/ssl/certs/itproblog.crt";
        ssl_certificate_key "/etc/ssl/private/itproblog.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

	error_page 500 502 503 504 /50x.html;
       location = /50x.html {
        }
    }

В конфигурации в параметрах ssl_certificate и ssl_certificate_key необходимо указать расположение файлов с открытым и закрытым ключом.

Попробуем выполнить запрос к веб серверу:

https://test.itproblog.ru/

Поскольку у нас нет доверия к этому сертификату (т.к. он самоподписанный), то мы получим соответствующее предупреждение. Однако, доступ к сайту по протоколу https работает. К тому же, если посмотреть информацию о сертификате, то мы видим, что сервер использует сгенерированный нами сертификат и мы видим имя, на которое сертификат был изначально выписан. Генерация самоподписанного SSL сертификата завершена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *