78 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Markdown
		
	
	
| ---
 | ||
| title: Выпускаем свой сертификат через свой CA
 | ||
| description: 
 | ||
| published: true
 | ||
| date: 2024-04-24T09:45:47.898Z
 | ||
| tags: ssl
 | ||
| editor: markdown
 | ||
| dateCreated: 2024-04-24T09:45:43.127Z
 | ||
| ---
 | ||
| 
 | ||
| Сейчас без HTTPS не хотят работать многие сервисы. А даже если и работают, то браузеры не дадут спокойно пользоваться. Поэтому приходится получать и настраивать сертификаты, даже если большой нужды в этом нет. Особенно если ты работаешь с ним один в локальной сети, либо вообще поднимаешь временно. Я обычно получаю сертификаты let's encrypt и копирую на нужный сервер, если к нему не проброшен доступ из интернета. 
 | ||
| 
 | ||
| Решил подготовить пошаговую инструкцию, чтобы быстро выпустить свой сертификат через свой CA, добавив его к себе в доверенные, чтобы браузеры не ругались. Во многих ситуациях это будет удобнее, чем постоянно обновлять доверенные сертификаты через интернет. Свой можно выпустить вечным. Покажу на примере настройки сертификата в Nginx.
 | ||
| 
 | ||
| Будем выпускать сертификат для доменного имени zabbix.internal и IP адреса 172.30.245.222. Будет работать и так, и эдак. 
 | ||
| 
 | ||
| Выпускаем ключ и сертификат для своего CA:
 | ||
| ```
 | ||
| # mkdir ~/tls && cd ~/tls
 | ||
| # openssl ecparam -out myCA.key -name prime256v1 -genkey
 | ||
| # openssl req -x509 -new -nodes -key myCA.key -sha256 -days 9999 -out myCA.crt
 | ||
| ```
 | ||
| Вам зададут серию вопросов. Отвечать можно всё, что угодно. В данном случае это не важно. Выпускаем ключ и сертификат для сервера:
 | ||
| ```
 | ||
| # openssl genrsa -out zabbix.internal.key 2048
 | ||
| # openssl req -new -key zabbix.internal.key -out zabbix.internal.csr
 | ||
| ```
 | ||
| Тут тоже зададут похожие вопросы. Отвечать можно всё, что угодно. Готовим конфигурационный файл:
 | ||
| ```
 | ||
| # mcedit zabbix.internal.ext
 | ||
| 
 | ||
| authorityKeyIdentifier=keyid,issuer
 | ||
| basicConstraints=CA:FALSE
 | ||
| keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
 | ||
| subjectAltName = @alt_names
 | ||
| 
 | ||
| [alt_names]
 | ||
| IP.1 = 172.30.245.222
 | ||
| DNS.1 = zabbix.internal
 | ||
| ```
 | ||
| Генерируем сертификат на его основе:
 | ||
| ```
 | ||
| # openssl x509 -req -in zabbix.internal.csr -CA myCA.crt -CAkey myCA.key \
 | ||
| -CAcreateserial -out zabbix.internal.crt -days 9999 -sha256 -extfile zabbix.internal.ext
 | ||
| ```
 | ||
| Копируем сертификат и ключ в директорию веб сервера:
 | ||
| ```
 | ||
| # mkdir /etc/nginx/certs
 | ||
| # cp zabbix.internal.crt /etc/nginx/certs/.
 | ||
| # cp zabbix.internal.key /etc/nginx/certs/.
 | ||
| ```
 | ||
| Создаём файл dhparam, который понадобится для конфигурации Nginx:
 | ||
| ```
 | ||
| # openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
 | ||
| ```
 | ||
| Добавляем в конфиг Nginx в целевом виртуальном хосте:
 | ||
| ```
 | ||
| listen     443 http2 ssl;
 | ||
| server_name   zabbix.internal 172.30.245.222;
 | ||
| ssl_certificate /etc/nginx/certs/zabbix.internal.crt;
 | ||
| ssl_certificate_key /etc/nginx/certs/zabbix.internal.key;
 | ||
| ssl_dhparam /etc/ssl/certs/dhparam.pem;
 | ||
| ```
 | ||
| Перезапускаем Nginx:
 | ||
| ```
 | ||
| # nginx -t
 | ||
| # nginx -s reload
 | ||
| ```
 | ||
| Передаём на свой компьютер файл myCA.crt и добавляем его в хранилище корневых доверенных центров сертификации. Настройка будет зависеть от операционной системы. Если нужно тут же, локально на сервере с Debian 12 настроить доверие этому CA, то делаем так:
 | ||
| ```
 | ||
| # cp myCA.crt /usr/local/share/ca-certificates/.
 | ||
| # update-ca-certificates
 | ||
| ```
 | ||
| Теперь можно браузером заходить по доменному имени или IP адресу, будет работать самоподписанный сертификат на 9999 дней без каких-либо предупреждений.
 | ||
| 
 | ||
| Получилась готовая инструкция для копипаста, которую можно сохранить и пользоваться.
 | ||
| 
 | ||
|  |