[개발] 지식/node.js
npm 사용시 SELF_SIGND_CERT_IN_CHAIN 에러 조치 - SSL(Secure Socket Layer)
하하미아
2022. 1. 3. 10:18
npm
ssl 인증 에러 발생
npm
설치 후 react
프로젝트를 생성하려고 하니 아래와 같은 에러가 발생했다.
ssl 인증 해제
회사에서 개발을 하다보면 자주 겪는 일인데, 에러 화면에서 보이는 https://registry.npmjs.org/....(npm repository) 에 접근을 해야하는데 인증서 검증을 통과하지 못해서 발생한다. 이를 해결하기 위해 npm 설정을 아래와 같이 변경한다. ssl
인증서 검증을 하지 않겠다는 의미이다.
$ npm config set strict-ssl false
참고로, npm의 설정값을 모두 보고 싶다면 아래 명령어를 실행한다.
$ npm config list
proxy 설정
만약 proxy 서버가 있다면 명시하고, ssl
옵션을 끄도록 한다.
$ npm config set proxy <proxy server address>
$ npm config set https-proxy <proxy server address>
$ npm config set strict-ssl false
SSL
SSL이란?
SSL(Secure Socket Layer)
은 웹 표준 암호화 통신이다.
- 클라이언트와 서버 사이에 송수신되는 정보를 암호화하여 전송하는 통신계층이다.
- 웹에서는 브라우저와 서버간 보안을 위해 공개키/개인키 대칭키를 기반으로 사용한다.
- 일반적으로 443포트를 사용한다.
- HTTPS는 HTTP에 SSL을 적용한 보안된 HTTP 통신을 하는 프로토콜이다.
- SSL은 HTTP 뿐만 아니라 FTP, SMTP에도 적용할 수 있다.
SSL과 HTTPS의 차이
HTTP + SSL
이 곧 HTTPS
라고 할 수 있다. 따라서 SSL은 웹서비스 외에도 네트워크에서 사용되는 넓은 의미라고 볼 수 있다. 다시말해 SSL
위에서 작동하는 웹 프로토콜이 HTTPS
이다.
인증과정 (SSL Handshake)
- 클라이언트가 서버에 접속한다. 이때 클라이언트가 사용가능한 암호화 방식과 랜덤데이터를 함께 전달한다.
- 서버는 클라이언트에게 인증서 정보(공개키, 인증서 발급자(CA), 도메인 등)와 사용할 암호화 방식, 랜덤데이터를 전달한다.
- 클라이언트는 전달된 인증서를 확인하고 서버를 신뢰할 수 있는지 검증한다. 검증은 모두에게 공개된 CA의 공개키를 사용하여 암호화된 인증서를 복호화하는 것으로 진행된다. 인증서가 서버의 개인키로 암호화되어 있으므로, 해당 CA의 공개키로 복호화가 성공한다면 이는 해당 서버에서 암호화했다는 것을 추론할 수 있기 때문이다. 공인된 CA라면 이 단계에서 검증이 되므로 브라우저에 ‘안전함’ 이라고 뜨게 된다. 단 사설 CA라면 경고(안전하지 않음) 표시가 뜬다.
- 클라이언트에서는 1번과 2번 과정에서 서로 주고받은 랜덤데이터를 조합하여 임시 key를 생성한다. 이는 대칭키로 활용된다.
- 임시 key(대칭키)를 서버에서 받은 인증서의 공개키를 활용하여 암호화한다.
- 암호화된 임시 key(대칭키)를 서버로 전송한다.
- 서버에서는 전달된 임시 key(대칭키)를 이미 갖고 있는 private key(개인키)로 복호화한다.
- 마지막으로 Finished 패킷을 전달하여 SSL Handshake를 종료한다.
TLS란?
TLS(Transport Layer Security)
란 SSL
과 동일한 의미이며 이름만 다르다. 넷스케이프에서 HMAC 알고리즘을 사용한 SSL
을 발명하였고, IETF
에 의해 표준이 되면서 TLS
라는 이름으로 바뀌게 되었다.