Как заставить HTTPS работать в вашей локальной среде разработки за 5 минут

внешний интерфейс сервер JavaScript Google

Статья переведена сHow to get HTTPS working on your local development environment in 5 minutes

Image

Сегодня почти каждый веб-сайт, который вы посещаете, подвергаетсяHTTPSзащищен. Если вы еще этого не сделали,пришло время сделать это. использоватьHTTPSЗащита вашего сервера также означает, что вы не можетеHTTPSСервер отправляет запрос на этот сервер. Это проблема для разработчиков, использующих собственную среду разработки, поскольку они работают в локальной среде разработки.http://localhostвниз.

При запуске мы решили использоватьHTTPSзащитить нашуAWS Elastic Load Balancer endpoints, как часть усиленной безопасности. Сначала у меня была проблема, моя локальная среда разработки получала отклоненные запросы к серверу.

После быстрого поиска в Google я нашел несколько статей, которые могут быть мне полезны, напримерэто,этоили это, они все оlocalhostКак добитьсяHTTPSПодробное описание. Но даже следуя этим инструкциям, все они в конце концов потерпели неудачу.Chromeвсегда бросает мнеNET::ERR_CERT_COMMON_NAME_INVALID.

Image

вопрос

Все шаги в этих статьях верны, но только на момент их публикации, а не сейчас.

После долгих поисков я обнаружил, что мой локальный сертификат был отклонен, потому чтоChromeСертификаты больше не поддерживаютсяcommonNameсоответствовать, на самом деле с января 2017 требуетsubjectAltNameэто правило.

решение

мы будем использоватьOpenSSLСгенерируйте все сертификаты.

  • Шаг 1: КореньSSLСертификат

Первым шагом является создание сертификата Secure Sockets Layer (SSL). Затем этот корневой сертификат можно использовать для подписи любого количества сертификатов, которые могут быть созданы для одного домена. Если вы не знакомы сSSLэкосистемы, то изDNSimpleизэта статьяПредставляемRoot SSLМолодцы с сертификатом.

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

openssl genrsa -des3 -out rootCA.key 2048

Вы можете использовать сгенерированный ключ для создания нового корняSSLСертификат. и сохраните его какrootCA.pem. Этот сертификат будет иметь1,024дней действия. Не стесняйтесь изменить это на любое количество дней, которое вы хотите. Вам также будет предложено ввести другую дополнительную информацию во время этого процесса.

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

Image

  • Шаг 2: Корень доверияSSLСертификат

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

существуетMacОткройте «Связка ключей», затем перейдите к списку сертификатов в «Системе», нажав+кнопка для импорта сертификатаrootCA.pem, введите пароль при появлении запроса,и установите флажок «Всегда доверять» в раскрывающемся списке «При использовании этого сертификата:».

Если вы все сделали правильно, ваш «Доступ к связке ключей» должен выглядеть так.

Image

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

кореньSSLТеперь сертификат можно использовать для вашего локальногоlocalhostСреды разработки выдают сертификаты исключительно.

создать новыйOpenSSLфайл конфигурации,server.csr.cnfчтобы эти настройки можно было импортировать при создании сертификата, не вводя их в командной строке.

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost

Создаватьv3.extфайл для созданияX509 v3Сертификат. Обратите внимание, что мы указалиsubjectAltNameопции.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

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

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <(cat server.csr.cnf)

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

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

Image

используй свой новыйSSLСертификат теперь ты готовlocalhostиспользоватьHTTPSдля защиты вашей безопасности. положить файлserver.keyа такжеserver.crtФайл перемещается в доступное место на сервере и включается при запуске сервера.

С использованиемNode.jsнаписаноExpressВ приложении вот что делать. Убедитесь, что вы делаете это только для вашей локальной среды.не используйте его в производстве.

dev-server.js размещен на ❤ авторомGithub

var path = require('path')
var fs = require('fs')
var express = require('express')
var https = require('https')

var certOptions = {
  key: fs.readFileSync(path.resolve('build/cert/server.key')),
  cert: fs.readFileSync(path.resolve('build/cert/server.crt'))
}

var app = express()

var server = https.createServer(certOptions, app).listen(443)

Image

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

Мне нравится помогать другим веб-разработчикам. Если у вас есть какие-либо предложения или отзывы, пожалуйста,TwitterСледуйте за мной и дайте мне знать.