Skip to content

Commit 6872213

Browse files
committed
fix(Server): Set tls.DEFAULT_ECDH_CURVE to 'auto'
The default value of tls.DEFAULT_ECDH_CURVE is 'prime256v1', it breaks the connection when certificate is not compatible with the default curve since node 8.6.0. To fix this issue, we need set it to 'auto', makes OpenSSL select the curve automatically.
1 parent d2f4902 commit 6872213

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

lib/Server.js

+12-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const fs = require('fs');
1313
const path = require('path');
1414

1515
const ip = require('ip');
16+
const tls = require('tls');
1617
const url = require('url');
1718
const http = require('http');
1819
const https = require('https');
@@ -40,6 +41,16 @@ const createCertificate = require('./utils/createCertificate');
4041
const validateOptions = require('schema-utils');
4142
const schema = require('./options.json');
4243

44+
// Workaround for node ^8.6.0, ^9.0.0
45+
// DEFAULT_ECDH_CURVE is default to prime256v1 in these version
46+
// breaking connection when certificate is not signed with prime256v1
47+
// change it to auto allows OpenSSL to select the curve automatically
48+
// See https://github.com/nodejs/node/issues/16196 for more infomation
49+
const version = parseFloat(process.version.slice(1));
50+
if (version >= 8.6 && version < 10) {
51+
tls.DEFAULT_ECDH_CURVE = 'auto';
52+
}
53+
4354
const STATS = {
4455
all: false,
4556
hash: true,
@@ -581,7 +592,7 @@ function Server (compiler, options = {}, _log) {
581592
// - https://github.com/nodejs/node/issues/21665
582593
// - https://github.com/webpack/webpack-dev-server/issues/1449
583594
// - https://github.com/expressjs/express/issues/3388
584-
if (+process.version.match(/^v(\d+)/)[1] >= 10) {
595+
if (version >= 10) {
585596
this.listeningApp = https.createServer(options.https, app);
586597
} else {
587598
this.listeningApp = spdy.createServer(options.https, app);

0 commit comments

Comments
 (0)