Я начал писать обертку для API, которая требует, чтобы все запросы превышали HTTPS. Вместо того, чтобы делать запросы к фактическому API во время разработки и тестирования, я хотел бы запустить свой собственный локальный сервер, который издевается над ответами.
Я смущен тем, как создавать сертификаты, необходимые для создания HTTPS-сервера, и отправлять ему запросы.
Мой сервер выглядит примерно так:
var options = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
};
https.createServer(options, function(req, res) {
res.writeHead(200);
res.end('OK\n');
}).listen(8000);
Файлы pem были сгенерированы с помощью:
openssl genrsa 1024 > key.pem
openssl req -x509 -new -key key.pem > cert.pem
И запрос выглядит примерно так:
var options = {
host: 'localhost',
port: 8000,
path: '/api/v1/test'
};
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();
С этой настройкой я получаю Error: DEPTH_ZERO_SELF_SIGNED_CERT
, поэтому, думаю, мне нужно добавить параметр ca
для запроса.
Итак, мой вопрос заключается в том, как мне создать следующее:
- Сервер
key
? - Сервер
cert
? -
ca
для запроса?
Я прочитал несколько вещей о создании самоподписанных сертификатов с помощью openssl, но, похоже, не могу обернуть вокруг себя и выяснить, какие ключи и сертификаты использовать в моем коде node.
Обновление
API предоставляет сертификат CA для использования вместо значений по умолчанию. Следующий код работает с использованием своего сертификата, и это то, что я хочу воспроизвести локально.
var ca = fs.readFileSync('./certificate.pem');
var options = {
host: 'example.com',
path: '/api/v1/test',
ca: ca
};
options.agent = new https.Agent(options);
https.request(options, function(res) {
res.pipe(process.stdout);
}).end();