# Создание сертификата для сайта ## Создание ключа и сертификата 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 ```