Статья переведена сHow to get HTTPS working on your local development environment in 5 minutes
Сегодня почти каждый веб-сайт, который вы посещаете, подвергаетсяHTTPS
защищен. Если вы еще этого не сделали,пришло время сделать это. использоватьHTTPS
Защита вашего сервера также означает, что вы не можетеHTTPS
Сервер отправляет запрос на этот сервер. Это проблема для разработчиков, использующих собственную среду разработки, поскольку они работают в локальной среде разработки.http://localhost
вниз.
При запуске мы решили использоватьHTTPS
защитить нашуAWS Elastic Load Balancer endpoints
, как часть усиленной безопасности. Сначала у меня была проблема, моя локальная среда разработки получала отклоненные запросы к серверу.
После быстрого поиска в Google я нашел несколько статей, которые могут быть мне полезны, напримерэто,этоили это, они все оlocalhost
Как добитьсяHTTPS
Подробное описание. Но даже следуя этим инструкциям, все они в конце концов потерпели неудачу.Chrome
всегда бросает мнеNET::ERR_CERT_COMMON_NAME_INVALID
.
вопрос
Все шаги в этих статьях верны, но только на момент их публикации, а не сейчас.
После долгих поисков я обнаружил, что мой локальный сертификат был отклонен, потому что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
-
Шаг 2: Корень доверия
SSL
Сертификат
После этого вы можете использовать только что созданный кореньSSL
Сертификат. Что нужно сказатьMac
Доверяйте своему корневому сертификату, чтобы все выпущенные отдельные сертификаты также были доверенными.
существуетMac
Откройте «Связка ключей», затем перейдите к списку сертификатов в «Системе», нажав+
кнопка для импорта сертификатаrootCA.pem
, введите пароль при появлении запроса,и установите флажок «Всегда доверять» в раскрывающемся списке «При использовании этого сертификата:».
Если вы все сделали правильно, ваш «Доступ к связке ключей» должен выглядеть так.
-
Шаг 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
используй свой новый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)
Я надеюсь, что вы нашли этот урок полезным. Если вы не знакомы с приведенными здесь командами, я создал набор удобных сценариев, которые вы можете быстро запустить для создания сертификатов. Более подробную информацию можно найти наРепозиторий GitHubнайти в.
Мне нравится помогать другим веб-разработчикам. Если у вас есть какие-либо предложения или отзывы, пожалуйста,TwitterСледуйте за мной и дайте мне знать.