Как создать необходимые сертификаты .pem для подключения HTTPS на веб-сервере узла

Если вы работаете с веб-серверами в Node.js, вы, возможно, уже хотели создать безопасное соединение, либо для обеспечения действительно безопасного соединения, либо для доступа к API-интерфейсам в браузере, которые доступны только в том случае, если протокол HTTPS и не HTTP, например getUserMedia или же webkitSpeechRecognition и т.п.

Задача создания веб-сервера с защищенным протоколом с использованием либо модуля http-сервера Node.js, либо фреймворка, подобного Express (это то, что мы собираемся использовать в этом случае), довольно проста:

// server.js
var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('certificates/key.pem', 'utf8');
var certificate = fs.readFileSync('certificates/cert.pem', 'utf8');
var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
// your express configuration here
var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);
// For http
httpServer.listen(8080);
// For https
httpsServer.listen(8443);
app.get('/', function (req, res) {
res.header('Content-type', 'text/html');
return res.end('Hello, Secure World!');
});

Замечания: хотя 443 является портом по умолчанию для HTTPS, во время разработки используйте что-то вроде 8443, потому что большинство систем не позволяют запускать прослушиватели без полномочий root на портах с низким номером.

Как видите, нам просто нужно указать правильный путь для свойств ключа и сертификата с действительными сертификатами pem. Тем не менее, большинство из нас не знают, что это за файлы (ну, по крайней мере, я не знал … может быть, вы знаете … если так, что вы здесь делаете?).

Файл PEM или Privacy Enhanced Mail является сертификатом в кодировке Base64. Этот вид сертификатов часто используется для веб-серверов, поскольку их легко можно преобразовать в читаемые данные с помощью любого текстового редактора. Этот файл содержит очень четкие верхние и нижние колонтитулы. Это контейнерный формат, который может включать только общедоступный сертификат (например, при установке Apache и файлы сертификатов CA). /etc/ssl/certs) или может включать в себя всю цепочку сертификатов, включая открытый ключ, закрытый ключ и корневые сертификаты.

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

Требования

Вам понадобится openssl утилита, и мы собираемся получить к нему доступ через терминал и команды, в этом случае мы используем GnuWin32 от SourceForge и исполняемый файл openssl будет расположен в C:\Program Files\GnuWin32\bin\openssl.exeпоэтому нам просто нужно перейти с новой командной строкой в ​​папку bin, и там мы выполним команды:

cd C:\Program Files\GnuWin32\bin
REM then after execute the previous command, you will use openssl here
REM For example: openssl req -newkey .....................

Если вы используете другую платформу, обратитесь за дополнительной информацией о том, как использовать openssl в других операционных системах Google.

Для создания SSL-сертификата сначала необходимо сгенерировать закрытый ключ (key.pem) и запрос на подпись сертификата (cert.pem) или CSR (который также содержит ваш открытый ключ). Вы можете сделать это по-разному, но, как упоминалось ранее, мы собираемся использовать OpenSSL, который очень прост в использовании.

Реализация

Выполните следующую команду и измените путь keyout а также out Параметр (если хотите) путь, по которому должен быть создан ключ:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout c:/key.pem -out c:/cert.pem

При использовании GnuWin32, возможно, вы обнаружите следующую ошибку, если выполните предыдущую команду:

Невозможно загрузить информацию о конфигурации из /usr/local/ssl/openssl.cnf

Чтобы решить эту проблему, нам нужно указать путь к указанному файлу, используя -config параметр с путем openssl.cnf файл. Путь к этому файлу может отличаться (при установке по умолчанию C:\Program Files\GnuWin32\share\openssl.cnf), поэтому найдите этот файл в папке, где установлен GnuWin32, и, как только вы получите абсолютный путь, укажите путь в качестве параметра, используя:

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout c:/key.pem -out c:/cert.pem -config C:\Program Files\GnuWin32\share\openssl.cnf

Если вы не получили никакой ошибки, теперь запустится интерактивная подсказка, которая запросит основную информацию о вашем сертификате. После того, как вы заполнили всю информацию, вы должны получить 2 файла key.pem а также cert.pem что в этом случае с нашей командой будет располагаться в c:\,

Скопируйте путь к этим файлам (или скопируйте файлы в известный каталог вашего проекта) и предоставьте их, как показано в сценарии в начале статьи (или в вашем собственном сценарии). Исполнение node server.js с нашим скриптом должно позволить вам перейти к https://localhost:8443 в вашем браузере и (как и ожидалось, поскольку наш сертификат не является доверенным, поскольку он самоподписан), вы должны увидеть следующее предупреждение (в данном случае для Chrome):

Пример ненадежного сертификата Chrome

Нажмите Advanced и нажмите Proceed to localhost (небезопасно), и все!

Безопасный мир сообщений Https Express

Ваш https сервер с Express (или модуль http) был правильно реализован.

Создание доверенного сертификата (необязательно)

Выполните следующую команду и измените путь keyout а также out Параметр (если хотите) путь, по которому должен быть создан ключ:

openssl req -newkey rsa:2048 -new -nodes -keyout c:/key.pem -out c:/csr.pem

Если вы снова получите сообщение «Невозможно загрузить ошибку …», обратитесь к реализации в предыдущей области. Если вы не получили никакой ошибки, теперь должна запуститься интерактивная подсказка и запросить основную информацию о вашем сертификате. После того, как вы заполнили всю информацию, вы должны получить 2 файла key.pem а также csr.pem что в этом случае с нашей командой будет располагаться в c:\, csr.pem файл должен быть отправлен в любой действующий центр сертификации, например Comodo, Symantec, GoDaddy или другой объект, который выдает цифровые сертификаты, если вы хотите купить сертификат SSL. После того, как вы выполните весь процесс, вы должны получить действительный сертификат. Используйте этот сертификат на вашем сервере Node.js.

Ссылка на основную публикацию
Adblock
detector