HTTPS / 웹 소켓에서 실행되는 Webpack Dev Server 보안


80

일반적으로 개발자 모드에서 Webpack은 HTTP를 사용하여 실행됩니다. 일반적으로 별도의 포트에서 http / websockets를 사용하여 HTTP 및 웹팩을 통해 콘텐츠를 제공하는 웹 서버가 있습니다.

https에서 웹 서버를 실행하고 https / websocket에서 webpack을 안전하게 실행할 수 있습니까?


이것을 몇 번 다시 읽은 후 내 질문과 중복 될 수 있습니까? stackoverflow.com/questions/31973085/…
chemoish

답변:


104

참고 항목 웹팩 문서를

webpack-dev-server 명령에 추가 할 수있는 플래그가 있습니다.

webpack-dev-server --https 

4
webserver는 https에 있지만 webpack-dev-server는 socket.io에 대한 https 연결을 생성하지 않습니다. 맞습니까?
chemoish

나는 이것을 시도했고 이제 http가 더 이상 작동하지 않습니다. https와 http를 모두 사용할 수있는 방법이 있습니까?
Eschon

@Eschon http와 https를 모두 사용하는 솔루션을 찾았습니까?
Muhammad Ateeq Azam

@MuhammadAteeqAzam 아니요,하지만 정말 필요하지 않았습니다. 항상 https로 로컬 버전을 여는 데 익숙해지는 데 약간의 시간이 걸렸습니다.
Eschon

여기서 튜토리얼을 만들었습니다 . binarycarpenter.com/… . 실제로 SSL 인증서를 생성하고 신뢰해야합니다. 그것은 한 번에 설정 그리고 당신은 더 많은 10 같은 년 동안을 재사용하거나 수
codingpuss

29

위의 대답은 cli에 맞지만 CLI에 있지 않은 경우 다음과 같이 할 수 있습니다 (거의 작업에서).

var WebpackDevServer = require('webpack-dev-server');

new WebpackDevServer(webpack(WebpackDevConfig), {
    https: true,
    hot: true,
    watch: true,
    contentBase: path.join(__dirname, 'src'),
    historyApiFallback: true
}).listen(1337, 'localhost', function(err, result) {
    if (err) {
        console.log(err);
    }
    console.log('Dev server running at https://localhost:1337');
});

그럴 때 502 Bad Gateway 오류가 발생합니다. 이 문제를 유발하는 특별한 것이 있거나 필요한 다른 것이 있습니까? 예를 들어 Windows에서 작동합니까?
Kevin Ghadyani 2016 년

1
포트를 1337에서 443으로 변경해야할까요? 또는 https : // localhost : 1337?과 같이 서버에 대한 요청에 포트를 포함해야 할 수도 있습니다. :) 우리에게 어떤 서버가로 설정하고 어떤 URL이로드됩니다의 자세한 내용을두고 어쩌면 우리는 더 많은 도움을 줄 수
dangoldnj

1
webpack-dev-server가 자체 서명 된 인증서를 사용하기 때문에 브라우저에 "net :: ERR_INSECURE_RESPONSE"오류가 처음 발생했습니다. 이 문제는 차단 된 "https : // .... .js"-url을 방문하고 브라우저에 계속 진행하겠다고 확신함으로써 해결되었습니다.
np8

17

테스트 환경에만 해당됩니다.

다음과 같이 webpack-dev-server를 구성해야합니다.

webpack-dev-server --https --cert ./cert.pem --key ./key.pem

가장 쉬운 해결 방법은 암호없이 키를 생성하는 것입니다 (이 보안 결과는 모르겠지만 테스트 용입니다).

키에서 암호를 제거하려면 다음 명령을 사용하십시오.

$ openssl rsa -in key.pem -out newKey.pem

미리보기 구성 줄에서 새 키를 사용합니다.


5
게시 한이 링크는 의도 한 것과 다를 수 있습니까?
Neikius

2
--https를 추가하면 --cert ./cert.pem --key ./key.pem이 필요하지 않습니다. webpack은 자체적으로 cer를 생성합니다.
usef_ksa

9
나를 위해 유효한 인증서가 생성되지 않았습니다. Chrome이 연결에 대해 불평했습니다. 나는 그것을 고치기 위해 인증서와 키를 설정해야했다. 나는 dev 구성 파일에서 설정하기로 결정했습니다.
David Fairbanks

12

함께 webpack-dev-server --https사용하면 자체 서명 된 인증서를 만들 수 있습니다. 그러나 모든 사용 사례에 적용되는 것은 아닙니다.

브라우저는 보안 예외를 요청하고 URL 표시 줄에 연결이 안전하지 않음을 표시합니다.

따라서 mkcert를 사용 하여 localhost에 대해 로컬에서 신뢰할 수있는 개발 인증서를 만드는 것이 좋습니다.

그런 다음 CLI를 통해 사용하십시오.

webpack-dev-server --https --key C:/Users/User/localhost-key.pem --cert C:/Users/User/localhost.pem --cacert C:/Users/User/AppData/Local/mkcert/rootCA.pem

또는 webpack.config.js에서 devServer.https 옵션을 구성하십시오.

devServer: {
    https: {
        key: fs.readFileSync('C:/Users/User/localhost-key.pem'),
        cert: fs.readFileSync('C:/Users/User/localhost.pem'),
        ca: fs.readFileSync('C:/Users/User/AppData/Local/mkcert/rootCA.pem')
    }
}

mkcert는 기본적으로 Unix 형식의 .pem 파일을 만듭니다. 따라서 Windows를 사용하는 경우 메모장 등을 사용하여 Windows 형식으로 변환해야 할 것입니다.


8

제 경우에는 인증서를 얻기 위해이 모든 명령을 실행해야했습니다.

openssl genrsa -out private.key 4096
openssl req -new -sha256 -out private.csr -key private.key
openssl x509 -req -days 3650 -in private.csr -signkey private.key -out private.crt -extensions req_ext
openssl x509 -in private.crt -out private.pem -outform PEM

그리고 마지막으로 :

npm run dev -- --open --https --cert private.pem --key private.key

5

나는 반응 프로젝트에서 일하고 있는데 이제이 프로젝트에 SSL 인증서를 추가하고 https로 내 웹 사이트를 실행하고 싶었으므로 아래 단계를 따랐습니다.

  1. webpack.config.js에 https 추가

     devServer:{
    
              https: true,
              host: '0.0.0.0', // you can change this ip with your ip
              port: 443,       // ssl defult port number
              inline: true,
    
              historyApiFallback: true,
              publicPath: '/',
              contentBase: './dist',
              disableHostCheck: true
       }
    
  2. package.json 파일에 SSL 공개 인증서 추가 package.json 파일에 인증서를 추가하지 않으려면 webpack.config.js에 인증서를 추가해야합니다. 프로젝트에 인증서를 추가해야합니다. package.json 파일 또는 webpack.config.js에서 할 수 있습니까?

Package.json의 경우

scripts: {
                    "test": "echo \"Error: no test specified\" && exit 1",
                    "build": "webpack --mode production",
                    "start": "webpack-dev-server  --open --https --cert /path/to/private.crt --key /path/to/private.key"

            }

또는 webpack.config.js

 devServer:{

              https: true,
              host: '0.0.0.0', // you can change this ip with your ip
              port: 443,       // ssl defult port number
              inline: true,
              https: {
                    key: fs.readFileSync('/path/to/private.pem'),
                    cert: fs.readFileSync('/path/to/private.pem'),
                    ca: fs.readFileSync('/path/to/private.pem')
                    }
              historyApiFallback: true,
              publicPath: '/',
              contentBase: './dist',
              disableHostCheck: true
       }
  1. npm start터미널에서 명령을 실행 하거나 다음을 사용할 수도 있습니다.pm2 start npm -- start

https번째 코드 샘플 에는 두 가지 속성 이 있습니다 . 이 올바른지?
Sergio Belevskij 20.04.22

나는 그가 첫 번째 의미가 있다고 생각 https: truehttp2: true 웹팩 문서
아빠 백 스톰
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.