Быстро настроить Https для локального хоста

В этом сообщении блога я покажу вам, как настроить работающий HTTPS с зеленой меткой блокировки.

Шаги по созданию рабочего SSL-сертификата для локального хоста:

  • Создайте корневой сертификат SSL для локального хоста.
  • Сделать корневой сертификат доверенным для системы.
  • Выдайте сертификат домена с помощью корневого сертификата, который мы создали на первом этапе.

Если вы не хотите делать все эти шаги, проверьте это

https://github.com/FiloSottile/mkcert

Прежде чем углубляться в детали каждого шага, давайте поговорим о нескольких терминах:

Корневой сертификат. Корневой сертификат SSL — это сертификат, выданный доверенным центром сертификации (ЦС).

Экосистема SSL основана на модели доверительных отношений, также называемой цепочкой доверия. Когда устройство проверяет сертификат, оно сравнивает эмитента сертификата со списком доверенных ЦС. Если совпадение не найдено, клиент затем проверяет, был ли сертификат выдавшего ЦС выдан доверенным ЦС, и так до конца цепочки сертификатов. Верх цепочки, корневой сертификат, должен быть выдан доверенным центром сертификации.

Центр сертификации. Центр сертификации (ЦС) (или Центр сертификации) — это организация, выдающая цифровые сертификаты.

Цифровой сертификат удостоверяет владение открытым ключом указанного субъекта сертификата. Это позволяет другим (доверяющим сторонам) полагаться на подписи или утверждения, сделанные закрытым ключом, который соответствует сертифицированному открытому ключу.

В этой модели доверительных отношений ЦС является доверенной третьей стороной, которой доверяют как субъект (владелец) сертификата, так и сторона, полагающаяся на сертификат.

В контексте веб-сайта, когда мы используем термин цифровой сертификат, мы часто имеем в виду SSL-сертификаты. Центр сертификации является органом, ответственным за выдачу SSL-сертификатов, которым веб-браузеры доверяют публично.

Любой может выдавать SSL-сертификаты, но веб-браузеры не будут автоматически доверять этим сертификатам. Подобные сертификаты называются самоподписанными. CA несет ответственность за проверку объекта, стоящего за запросом SSL-сертификата, и, после успешной проверки, возможность выдавать общедоступные доверенные SSL-сертификаты, которые будут приниматься веб-браузерами. По сути, производители браузеров полагаются на центры сертификации для проверки объекта, стоящего за веб-сайтом.

CSR.CSR или запрос на подпись сертификата – это блок закодированного текста, который передается в центр сертификации при подаче заявки на получение SSL-сертификата. Обычно он создается на сервере, где будет установлен сертификат, и содержит информацию, которая будет включена в сертификат, такую ​​как название организации, обычное имя (доменное имя), местонахождение и страна. Он также содержит открытый ключ, который будет включен в сертификат. Закрытый ключ обычно создается одновременно с созданием CSR, создавая пару ключей. CSR обычно кодируется с использованием ASN.1 в соответствии со спецификацией PKCS #10.

Центр сертификации будет использовать CSR для создания вашего SSL-сертификата, но ему не нужен ваш закрытый ключ. Вы должны держать свой закрытый ключ в секрете. Сертификат, созданный с помощью определенного CSR, будет работать только с закрытым ключом, который был сгенерирован с его помощью. Поэтому, если вы потеряете закрытый ключ, сертификат больше не будет работать.

Теперь давайте создадим самоподписанный сертификат, которому доверяет локальная система:

Шаг 1: Корневой SSL-сертификат:

Первым шагом является создание корневого SSL-сертификата. Затем этот корневой сертификат можно использовать для подписи любого количества сертификатов, которые вы можете сгенерировать для отдельных доменов.

Создайте ключ RSA-2048 и сохраните его в файле rootCA.key. Этот файл будет использоваться в качестве ключа для создания корневого SSL-сертификата. Вам будет предложено ввести парольную фразу, которую вам нужно будет вводить каждый раз, когда вы используете этот конкретный ключ для создания сертификата. Откройте терминал и выполните следующую команду:

openssl genrsa -des3 -out rootCA.key 2048

Ключ, сгенерированный вами для создания нового корневого SSL-сертификата. Теперь мы можем сгенерировать корневой сертификат, используя вышеуказанный ключ. Вам также будет предложено ввести другую дополнительную информацию.

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Шаг 2. Доверьтесь корневому SSL-сертификату

Прежде чем мы используем этот корневой сертификат, нам нужно указать системе доверять корневому сертификату, чтобы все отдельные сертификаты, выпущенные им, также были доверенными.

Для Mac:

Open Keychain Access on your Mac and go to the Certificates category in your System keychain. Once there, import the rootCA.pem using File > Import Items. Double click the imported certificate and change the “When using this certificate:” dropdown to Always Trust in the Trust section.

Для Windows:

Windows key + R and run certmgr.msc and select `Trusted Root Certification Authorities → certificates →right-click →All Task →import →a then follow the instructions

Для Linux:

Depending on your Linux distribution, you can use trust, update-ca-certificates or another command to mark the generated root certificate as trusted.

Шаг 3. Создание SSL-сертификата домена:

  1. Создайте новый файл конфигурации OpenSSL server.csr.cnf, чтобы можно было импортировать эти настройки при создании сертификата, а не вводить их в командной строке.
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=US
ST=ExampleState
L=ExampleCity
O=Organization
OU=OrganizationUnit
[email protected]
CN = localhost

2. Создайте файл v3.ext для создания сертификата X509 v3. Обратите внимание на subjectAltName здесь.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost

3. Создайте ключ сертификата для localhost, используя параметры конфигурации, сохраненные в server.csr.cnf. Этот ключ хранится в server.key.

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config ./server.csr.cnf

Корневой сертификат SSL теперь можно использовать для выпуска сертификата специально для вашей локальной среды разработки, расположенной по адресу localhost. Запрос на подпись сертификата выдается через корневой сертификат SSL для создания сертификата домена для localhost. Результатом является файл сертификата с именем server.crt.

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 800 -sha256 -extfile v3.ext

Теперь SSL-сертификат готов к использованию:

Используйте server.key и server.crt для настройки SSL для проекта:

Ниже приведен пример экспресс-приложения, демонстрирующий SSL:

const express = require(‘express’);
const app = express();
const https = require(‘https’);
const fs = require(‘fs’);
const optionSSL = {
 key: fs.readFileSync(“./server.key”),
 cert: fs.readFileSync(“./server.crt”)
};
app.use(express.static(‘public’));
const server= https.createServer(optionSSL, app);
server.listen(443);

В конце:

Я надеюсь, что вы найдете этот блог полезным. Если вам это нравится, пожалуйста, проголосуйте и поделитесь им с друзьями. Если вы не хотите запускать все эти команды самостоятельно, пожалуйста, проверьте мой репозиторий. Набор скриптов для быстрой генерации HTTPS-сертификата для вашей локальной среды разработки.

Спасибо за чтение!