создание сертификата для сайта

This commit is contained in:
Alexander Zhirov 2023-04-05 11:36:11 +03:00
parent 2f902f89f7
commit 3ba8def22a
2 changed files with 106 additions and 0 deletions

View File

@ -5,3 +5,4 @@
## [initrd (Initial RAM Disk)](src/initrd.md)
## [Базовая настройка подключения к серверу Samba](src/samba.md)
## [Настройка загрузки PXE - EFI и Legacy](src/pxe-efi-legzcy.md)
## [Создание сертификата для сайта](src/certs.md)

105
manuals/src/certs.md Normal file
View File

@ -0,0 +1,105 @@
# Создание сертификата для сайта
## Создание ключа и сертификата Certification Authority
### Создание приватного ключа CA
Создание ключа удостоверяющего центра (**Certification Authority**).
```sh
openssl genrsa -out ca.key 4096
```
Ключ с паролем создаётся с флагом `-des3`
```sh
openssl genrsa -des3 -out ca.key 4096
```
### Создание сертификата CA
Для создания сертификата CA необходимо использовать созданный ранее ключ `ca.key` (выше):
```sh
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
```
Ответить на вопросы, где:
- `Country Name` - код страны двумя символами
- `State or Province Name` - полное наименование страны
- `Locality Name` - наименование города
- `Organization Name` - наименование организации
- `Organizational Unit Name` - наименование отдела (подразделения) в организации
- `Common Name` - наименование адреса веб-страницы
- `Email Address` - электронная почта
Пример:
```sh
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:Belgorod
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Miratorg
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:test.local
Email Address []:a.zhirov@agrohold.ru
```
## Создание ключа и сертификата для сайта
В качестве примера создать ключ и сертификат для сайта https://test.local
### Создание ключа для сайта
Приватный ключ хранится на стороне владельца сервера и не должен никогда никому отдаваться.
```sh
openssl genrsa -out test.key 4096
```
### Создание Certificate Signing Request
На базе приватного ключа `test.key` генерится так называемый *запрос на подпись сертификата* (**Certificate Signing Request**), в запросе заполняются параметры субъекта, затем этот файл отправляется CA и тот создаёт сертификат на основе данных из CSR, подписывает его своим приватным ключом, в результате получаем подписанный публичный сертификат.
Для включения нескольких DNS-имен необходимо использовать файл конфигурации (например, создать файл `openssl-csr.cnf` через текстовый редактор), содержащий данные о сертификате и расширенный запрос на добавление (данных), и в директиве `subjectAltName` указать список необходимых адресов для веб-страницы:
```conf
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Russia
localityName = Locality Name (eg, city)
localityName_default = Belgorod
organizationName = Organization Name (eg, company)
organizationName_default = Miratorg
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = IT
commonName = Common Name (eg, YOUR name or FQDN)
commonName_max = 64
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = DNS:test.local, DNS:*.test.local
```
[Официальный пример конфигурационного файла](https://github.com/openssl/openssl/blob/master/apps/openssl.cnf).
Создание запроса на подпись сертификата на основе конфигурационного файла:
```sh
openssl req -new -key test.key -config openssl-csr.cnf -reqexts req_ext -out test.csr
```
### Создание сертификата для сайта
```sh
openssl x509 -req -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 -extfile openssl-csr.cnf -extensions req_ext -in test.csr -out test.crt
```