Сначала создадим самоподписанный сертификат с помощью OpenSSL:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Эта команда создаст:
key.pem
- приватный ключcert.pem
- самоподписанный сертификатconst https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Hello with self-signed SSL!\n');
}).listen(443);
const express = require('express');
const https = require('https');
const fs = require('fs');
const app = express();
app.get('/', (req, res) => {
res.send('Secure Express server');
});
https.createServer({
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
}, app).listen(443);
const https = require('https');
const agent = new https.Agent({
rejectUnauthorized: false
});
https.get('https://self-signed.example.com', { agent }, (res) => {
// Обработка ответа
});
const https = require('https');
const fs = require('fs');
const options = {
ca: fs.readFileSync('cert.pem') // Добавляем наш сертификат в цепочку доверия
};
https.get('https://self-signed.example.com', options, (res) => {
// Теперь соединение будет безопасным
});
Лучшее решение для локальной разработки - создает локально доверенные сертификаты:
mkcert -install
mkcert example.com "*.example.com" localhost 127.0.0.1 ::1
Использование Let's Encrypt с DNS-01 challenge даже для локальных доменов
Самоподписанные SSL сертификаты полезны для разработки и тестирования, но имеют серьезные ограничения для production-среды. В Node.js их легко использовать через модуль https
, но для реальных проектов лучше применять решения вроде Let's Encrypt или локально доверенные сертификаты через mkcert. Главное понимать риски безопасности и ограничения таких сертификатов.