@@ -13,6 +13,7 @@ const fs = require('fs');
1313const path = require ( 'path' ) ;
1414
1515const ip = require ( 'ip' ) ;
16+ const tls = require ( 'tls' ) ;
1617const url = require ( 'url' ) ;
1718const http = require ( 'http' ) ;
1819const https = require ( 'https' ) ;
@@ -40,6 +41,16 @@ const createCertificate = require('./utils/createCertificate');
4041const validateOptions = require ( 'schema-utils' ) ;
4142const 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+
4354const 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