[MUSIC]
В предыдущей лекции мы узнали о HTTPS и о том, как они могут осуществлять
безопасную связь между клиентом и сервером.
Мы также немного узнали о криптографии,
достаточно, чтобы понять, как работает HTTPS.
Для того, чтобы настроить наш HTTP-сервер,
нам нужно получить открытый ключ и сертификат.
Теперь в этом упражнении мы настроим наш сервер MuniCT для использования HTTPS.
Итак, давайте продолжим, сначала сгенерировать ключ и
сертификат, который мы можем использовать для нашего сервера, а
затем изменить наше экспресс-приложение для поддержки HTTPS.
Чтобы начать работу с этим упражнением, перейдите в папку сервера MuSTRION.
А затем в вашем терминале или командном окне, а
затем перейдите в папку bin внутри папки сервера UniGate.
И в папке bin вы увидите файл с именем www.
Это папка, в которой мы собираемся сгенерировать наш закрытый ключ, а
затем генерировать сертификат для
нашего HTTPS сервера с помощью инструмента командной строки под названием OpenSSL.
Теперь OpenSSL обычно устанавливается на компьютерах Mac OS по умолчанию.
Для компьютеров с Windows вам может потребоваться загрузить и установить OpenSSL явно.
Теперь я предоставил пару ссылок в инструкциях для вас, чтобы пойти и
получить OpenSSL.
Я также предоставил вам веб-сайт, на котором вы можете генерировать самозаверяющий закрытый
ключ и сертификат.
Так что давайте поспешим взглянем на это.
Если вы используете компьютер с Windows и
если у вас нет OpenSSL уже установлен.
Затем эта ссылка предоставляет двоичные файлы для
OpenSSL, которые вы можете скачать и установить на вашем компьютере с Windows.
Таким образом, эта ссылка приведена в инструкциях для данного упражнения.
Так что зайдя туда,
вы найдете несколько загрузок сторонних
дистрибутивов OpenSSL, связанных с OpenSSL, которые вы можете скачать и установить на свой компьютер.
Поэтому установите один из них, чтобы продолжить
это упражнение, если у вас нет OpenSSL уже на вашем компьютере.
Теперь, также если вы хотите другой способ
генерации вашего закрытого ключа и сертификата.
Вот статья в блоге, ссылка на которую я уже предоставил в инструкции, в
которой также объясняется, как настроить компьютер Windows с помощью
OpenSSL, а также создать закрытый ключ и сертификат.
Таким образом, выполните следующие действия, чтобы настроить ваш компьютер Windows для
создания закрытого ключа и сертификата.
Теперь, если вы не хотите устанавливать OpenSSL, то вот ссылка на
сайт, который позволяет вам генерировать
там самоподписанный SSL-сертификат и ключ, как вы видите здесь.
Таким образом, ссылка на этот сайт также приведена в инструкции.
Таким образом, вы можете использовать сервер для создания SSL-сертификата и
ключа для вашего компьютера с Windows.
Таким образом, любой из этих подходов может быть использован для
генерации закрытого ключа и сертификата для вашего компьютера с Windows.
Поскольку я работаю на машине OSX,
я собираюсь сгенерировать свой закрытый ключ и сертификат с помощью OpenSSL.
Поэтому, перейдя к терминалу, позвольте мне ввести openssl genrsa
1024, что означает, что я собираюсь генерировать закрытый ключ размером 1024.
Поэтому я собираюсь поместить это в файл с именем private key, и
как только это будет сгенерировано, тогда мы сгенерируем соответствующий файл cert.csr,
чтобы он сказал openssl req request.
Поэтому мы запрашиваем новый сертификат
с ключом private.key, и он сгенерирует его.
Cert.csr здесь.
Теперь, когда вы создаете cert.csr, он придумает несколько вопросов для
вас, чтобы заполнить.
Вы можете принять значения по умолчанию или
вы можете заполнить свои собственные значения, если вы выбрали это.
Это не имеет значения, потому что этот сертификат мы используем только внутри нашего
компьютера для тестирования нашего HTTPS сервера.
Итак, позвольте мне заполнить некоторые детали.
Я оставлю там несколько вещей пустыми.
И это будет работать отлично,
не имеет значения, заполняете ли вы эту информацию или нет.
Поэтому, как только вы сделаете, что ваш cert.csr сгенерирован и
из этого они будут генерировать сертификат распространения,
чтобы мы напечатали в командной строке
openssl x509 -req -in cert.csr -signkey
private.key -out certificate.pem.
Таким образом, это сгенерирует сертификат для
нас, и поэтому, как только вы выполните эти шаги,
когда вы посмотрите на свою папку,
вы увидите, что у вас есть private.key,
cert.csr и certificate.pem там.
Это потребуется для настройки нашего HTTPS-сервера.
Итак, теперь, чтобы настроить HTTPS-сервер, давайте перейдем к нашему редактору.
В редакторе мы перейдем в эту папку bin здесь.
И в папке bin вы увидите этот файл под названием www.
Мы кратко рассмотрели этот файл в одном из предыдущих упражнений.
Теперь, перейдя в этот файл, мы теперь
также импортируем основной модуль HTTPS, поэтому
мы скажем, HTTPS требует HTTPS, и
нам также потребуется модуль файловой системы.
Модуль файловой системы уже был обнаружен ранее
в одном из упражнений.
Так что мы импортируем оба этих.
А затем, спускаясь сюда, мы настроим номер порта, на котором
будет запущен наш HTTPS-сервер, поэтому мы скажем app.set и
скажем SecPort.
Таким образом, мы собираемся настроить переменную здесь под названием безопасный порт, а
затем я инициализирую это для порта+443.
Теперь, почему я использую этот порт+443?
На стандартном сервере, если ваш сервер выступает в качестве веб-сервера,
ваш протокол HTTP будет работать на порту номер 80 на вашем сервере.
И безопасный HTTP будет работать на порту номер 443.
Теперь вы, как правило, не хотите использовать эти зарезервированные порты
в приложении для разработки, но мы делаем это в этом курсе.
Вместо этого, как вы видели ранее,
мы настроили номер порта 3000, где работает наш HTTP-сервер.
Поэтому я буду запускать HTTPS-сервер, на порту номер 3443.
Итак, 3000 плюс 443.
Поэтому я объявляю этот безопасный порт.
Как порт+443, поэтому наш HTTPS сервер будет работать на порту номер 443.
Я все равно буду запускать HTTP-сервер в порту 3000,
мы уже создали HTTP-сервер здесь, в WWW, или, скорее,
это автоматически генерируется экспресс-генератором.
Теперь, так как HTTP-сервер уже настроен,
мы собираемся настроить HTTPS-сервер.
Поэтому, чтобы настроить HTTPS-сервер, сразу после того, как мы настроим HTTP-сервер.
Теперь причина, по которой я все еще буду запускать HTTP-сервер, заключается в том, что,
если я получу запрос на порт HTTP-сервера,
этот запрос будет перенаправлен на сервер HTTPS.
Таким образом, мой сервер будет только запрос на обслуживание, поступающий на порты HTTPS.
Но если случайно кто-нибудь получит доступ к серверу через порт HTTP,
я перенаправлю этот запрос на порт HTTPS.
Мы сделаем это немного позже.
Во-первых, давайте настроим HTTPS-сервер.
Поэтому, чтобы настроить HTTPS-сервер, прямо здесь,
я объявлю несколько вариантов здесь для моего HTTPS-сервера.
Теперь напомним, что для HTTPS-сервера нам нужно настроить закрытый ключ и
сертификат, который будет использовать мой HTTPS-сервер.
Поэтому в параметрах я собираюсь указать ключ, а
затем я буду использовать файловую систему, а затем я скажу: ReadFileSync.
Поэтому я буду читать этот файл синхронно, так что я закончу чтение в файле,
прежде чем я смогу настроить свой HTTPS-сервер.
Поэтому я собираюсь прочитать этот файл из __dirname.
Вы уже знаете, почему я использую __dirname из предыдущих
упражнений, где мы видели, как используется пять системных модулей.
И тогда, так что я скажу __dirname+.
Итак, здесь мы поставляем путь к private.key.
Теперь напомним, что этот www находится в папке bin.
И private.key также находится в папке bin,
поэтому я собираюсь сказать dirname+ это, поэтому это укажет
модулю чтения файловой системы, что файл должен быть
прочитан из этого каталога bin, из этого файла private.key здесь.
Теперь также, мы прочитаем в сертификате здесь.
Так что скажем, cert fs.readFileSync.
Таким образом, он будет синхронно читать файл, что означает, что
файл будет прочитан полностью, прежде чем вы перейдете к следующему шагу здесь.
И файл, который нам нужно прочитать, также __dirname+.
И скажем, /certificate.pem, который мы сгенерировали ранее.
И это должна быть запятая, и я не должен ставить точку с запятой,
потому что это объект JavaScript, который мы определили, имеет параметры.
Поэтому, как только мы определим объект JavaScript, тогда давайте настроим безопасный сервер.
Итак, мы скажем var SecureServer https.
Напомним, что теперь мы будем использовать https, а затем мы скажем CreateServer.
Так что напомним, что для HTTP, мы настроили наш сервер вот так.
Для безопасного сервера мы собираемся создать это, сказав,
var SecureServer Https.CreateServer, а затем мы поставим
параметры, которые мы только что настроили, а затем вторая часть приложения здесь.
Таким образом, мой SecureServer хорошо,
также будет доступен для моего приложения для доступа.
Теперь внизу, я собираюсь настроить
SecureServer.Listen на номер порта,
SecPort.
Напомним, что здесь мы сделали app.set SecPort, поэтому
мы установили это значение на номер безопасного порта.
И затем внизу, мы говорим app.get.
Таким образом, это означает, что это значение, которое мы
настроили ранее, будет доступно для
нас
, чтобы настроить наш прослушивающий порт для нашего сервера app.get SecPort, а
затем предоставить функцию обратного вызова здесь.
И внутри этой функции обратного вызова мы скажем,
console.log Server прослушивает порт.
Давайте сделаем безопасный сервер, прослушивая порт,
а затем, как только мы настроим SecureServer,
тогда нам нужно, См., SecureServer включен.
Поэтому, если SecureServer получает событие ошибки,
то нам понравится OnError, который настроен ниже, чтобы обработать это.
И тогда мы скажем: «SecureServer.on».
Прослушивание, поэтому, если вы получите событие прослушивания,
то мы вызовем OnListening.
Теперь, где настроены эти OnError и OnListening?
Если вы спуститесь в код здесь, внизу.
Вы указываете эти две функции, которые OnError функционируют здесь,
а затем функцию OnListening здесь.
Таким образом, мы будем использовать эти две функции для настройки нашего сервера здесь.
Таким образом, с этими изменениями
мой сервер теперь настроен на запуск SecureServer с номером порта 443.
Мы уже настроили стандартный HTTP-сервер здесь.
Поэтому, как только мы сделаем эти два, наше следующее обновление будет в файле app.js.
Таким образом, перейдя в файл app.js Что я собираюсь сделать, это настроить этот
сервер таким образом, чтобы он перенаправлял любой трафик, поступающий на небезопасный порт.
Это номер порта 3,000, он перенаправит этот запрос на безопасный порт.
Поэтому, чтобы сделать это, позвольте мне настроить промежуточное программное обеспечение сразу после того, как мы объявим app.express.
Итак, здесь мы скажем, app.all, так что это означает, что для
всех запросов независимо от того, какой путь в запросе.
Собственный запрос приходит, я собираюсь перенаправить это на,
поэтому мы скажем rec, res, next, и
функция обратного вызова определяется здесь.
И так мы, объявим функцию внутри здесь.
И скажем, если req.secure.
Итак, что означает, что если входящий запрос уже является безопасным запросом,
так как мы это знаем?
Если входящий запрос уже является безопасным запросом, то
объект запроса будет нести этот флаг под названием secure, который уже будет установлен в true.
Если входящий запрос не является безопасным портом, а
вместо этого приходит на небезопасный порт, то write.secure не будет установлен.
Так вот, о чем я позабочусь.
Если он уже идет к защищенному порту, я просто собираюсь идти вперед,
ничего не делая, потому что он уже приходит к безопасному порту.
Так что я могу просто сказать, следующий.
В противном случае, так скажем, вернитесь следующим.
В противном случае, так что иначе произойдет,
Когда он приходит к небезопасному порту.
Поэтому в этом случае я скажу res.redirect.
Таким образом, доступен метод перенаправления,
который перенаправляет входящий запрос на другой URL.
Итак, я перенаправлю этот небезопасный запрос на https://.
Поэтому я перенаправляю этот запрос на имя req.host.
Таким образом, запрос уже будет нести имя хоста.
Итак, потому что это приходит на один и тот же сервер, поэтому
я перенаправляю на тот же сервер.
И тогда мы скажем +,
; + app.get.
Теперь напомним, что мы уже настроили безопасный порт в app.get там.
Таким образом, мы скажем app.get SecPort + req.url.
Теперь этот req.url будет содержать остальную часть пути
, кроме имени хоста и номера порта.
Поэтому, если вы скажете локальный хост: 3000,
этот локальный хост: 3000 будет покрыт первой частью, и
это будет перенаправлено на локальный хост: 3443 этой конфигурацией здесь.
И затем, остальная часть, req.url будет содержать фактический путь на сервере.
Итак, мы просто добавляем его к пути перенаправления, и
это путь, на который я собираюсь перенаправить входящее сообщение запроса.
Поэтому, как только я
перенаправлю входящее сообщение запроса, мое сообщение запроса будет перенаправлено на защищенный порт.
И последнее изменение может res.redirect,
мы добавим написанный код состояния как 307.
307 здесь означает, что целевой ресурс временно находится под
другим URL-адресом.
И пользовательский агент не должен изменять метод запроса, если он
реформируется в автоматическом перенаправлении на этот URL-адрес.
Итак, я буду ожидать, что пользовательский агент повторит попытку
с тем же методом, который они использовали для исходной конечной точки.
Вот и то, что изменение, которое мне нужно сделать в файле app.js.
Таким образом, изменив app.js и www, а
также сгенерировав ключ и сертификат,
мы теперь можем сохранить изменения и перейти и запустить наш сервер.
Перейдите в терминал или окно команд, убедитесь, что вы
снова находитесь в папке ConfusionServer, а затем запустите сервер.
Поэтому я нахожусь на терминале, набирающем npm start.
И ваш сервер будет работать, и вы также заметите, что мы печатаем
здесь, говоря: Secure Server прослушивает порт 3443 здесь.
Чтобы акцентировать безопасный сервер, перейдите в браузер, такой как Chrome.
А затем позвольте мне сначала получить доступ к защищенному серверу на
localhost: 3443, где работает мой безопасный сервер.
И обратите внимание, что когда я попробую https://localhost3443 в браузере,
он придет с этим сообщением, говорящим, что ваше соединение не является частным.
Очевидно, потому что сертификат, который мы используем прямо сейчас,
является самозаверяющим сертификатом.
И это не распознается Chrome как действительный сертификат.
Но поскольку мы знаем, что мы делаем, мы можем согласиться с тем
, что мы позволим перейти к этому конкретному серверу.
Теперь я настоятельно рекомендую вам никогда не делать этого на
любом сайте, который приходит с предложением.
Мы делаем это специально в этом упражнении, потому что
мы точно знаем, где находится сервер, и
мы знаем, что мы явно настроили сервер сами.
Но если какой-либо другой веб-сайт приходит с этим сообщением, я настоятельно
советую вам не принимать предложение и перейти к серверу.
Таким образом, вы должны вернуться в безопасное место, если вы когда-нибудь увидите это или на любом другом веб-сайте.
Но поскольку мы знаем, что это наш собственный сервер, я собираюсь перейти к
localhost здесь, и тогда вы увидите, что мы получаем доступ к серверу Express.
А также вы заметите здесь
, что ваш браузер показывает вам, что вы обращаетесь к небезопасному серверу.
Когда вы нажмете на это, вы увидите сообщение
о том, что ваше подключение к сайту не является безопасным.
Но мы знаем, что, поскольку мы сами запускаем сервер, это нормально.
Так вот как вы будете получать доступ к серверу HTTPS.
Теперь позвольте мне попробовать получить доступ к тому же HTTP-серверу, но позвольте мне получить доступ к
стандартному локальному хосту: 3000.
Это место, где наш небезопасный сервер находится на обычном HTTP-сервере.
Поэтому, когда я пытаюсь получить доступ к этому HTTP localhost: 3000,
вы сразу увидите, что мой сервер перенаправит меня на безопасный сервер.
Таким образом, ваш сервер, который мы только что настроили,
убедитесь, что вы всегда будете получать доступ к серверу на его защищенном порту.
Это также гарантирует тот факт, что, когда вы
обмениваетесь, когда вы отправляете свои учетные данные и т. Д.,
Весь обмен учетными данными в заголовке сообщения.
А также при входе в систему с локальной аутентификацией все это делается
безопасным образом в зашифрованном канале между клиентом и сервером.
Итак, теперь мы настроили наш сервер, чтобы быть защищенным HTTPS сервером.
С этим мы завершаем это упражнение.
В этом упражнении мы узнали, как настроить безопасный HTTP-сервер или
использовать протокол HTTPS.
С этим мы завершаем это упражнение.
Это хорошее время для вас сделать git фиксацию с сообщением, HTTPS.
[ МУЗЫКА]