Рубрики
Без рубрики

Экспресс-сервер HTTPS с самозаверяющим сертификатом

Как создать самозаверяющий HTTPS-сертификат для Node.js для локального тестирования приложений

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

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

Для создания сертификата у вас должно быть OpenSSL установлен в вашей системе.

Возможно, он у вас уже установлен, просто попробуйте ввести openssl в своем терминале.

Если нет, то на Mac вы можете установить его с помощью brew install openssl (если вы используете Доморощенный ). В противном случае выполните поиск в Google “как установить openssl на “.

Как только OpenSSL будет установлен, выполните эту команду:

openssl req -nodes -new -x509 -keyout server.key -out server.cert

Вам будет предложено ответить на несколько вопросов. Первое – это название страны:

Generating a 1024 bit RSA private key
...........++++++
.........++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:

Затем ваш штат или провинция:

State or Province Name (full name) [Some-State]:

Ваш город:

Locality Name (eg, city) []:

…и название вашей организации:

Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:

Вы можете оставить все это пустым.

Просто не забудьте установить это значение в localhost :

Common Name (e.g. server FQDN or YOUR name) []: localhost

…и добавить свой адрес электронной почты:

Email Address []:

Вот и все! Теперь у вас есть 2 файла в папке, в которой вы выполнили исходную команду:

  • server.cert является самозаверяющим файлом сертификата
  • сервер.ключ является закрытым ключом сертификата

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

Эти файлы необходимо поместить в место, доступное приложению, а затем вам нужно будет настроить сервер для их использования.

Это пример использования модуля https core и экспресс:

const https = require('https')
const app = express()

app.get('/', (req, res) => {
  res.send('Hello HTTPS!')
})

https.createServer({}, app).listen(3000, () => {
  console.log('Listening...')
})

Без добавления сертификата, если я подключусь к https://localhost:3000 это то, что покажет браузер:

С сертификатом на месте:

const fs = require('fs')

//...

https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app).listen(3000, () => {
  console.log('Listening...')
})

Chrome сообщит нам, что сертификат недействителен (поскольку он самоподписан), и попросит нас подтвердить, прежде чем продолжить (однако HTTPS-соединение все равно будет работать).:

Оригинал: “https://flaviocopes.com/express-https-self-signed-certificate/”