본문 바로가기
이것저것

[Node.js] Openssl 적용 후기

by 신입같은 3년차 2018. 8. 23.

HTML5로 카메라를 제어해 카메라이미지를 서버로 보내 이미지를 저장하는 웹페이지를 작성중 

Node.js를 사용하였고 권한 접근에대해 SSL을 적용해야한다는것을 알고 찾아보던중 SSL을 적용하면서 생긴 이슈 및 느낀점 후기

 

1. openssl publickey와 private_key의생성.

public.pem 키와 private.pem키는 express폴더와 같은 경로상에 두었다.

 

https는 bin/www에 넣어서 구현하였으며 option또한 bin/www 내부에서 하였다.

 

 

 #    openssl genrsa 1024 > private.pem
  #    openssl req -x509 -new -key private.pem > public.pem

 
위의 명령어를 통해 키생성. 
 
 
line 10 ~ 11 : https와 fs모듈을 사용하기 위한 모듈 require (https는 npm install https로 설치해야함.)
 
line 20 : options에 key : public key , cert : private key를 입력, 직접 경로를 입력해줘야한다.
 
line 32 ,  40 ~ 42 : 처럼 https서버를 생성하되 파라미터에 options를 넣어준다,
 
 

 

 
 
2. 비동기 전송시 보내는부분이 HTTPS 면 받는쪽도 HTTPS여야 한다.
- 전송하는 부분을 비동기로 처리하였고 form-data를 사용하였기때문에 받는쪽 서버에서 node multer를 사용하였다.  보내는부분의 웹페이지는 HTTPS였고 받는 url을 기존 http://xxx.xxx.xxx.xx:3000/upload으로 하고 실행하였더니
 
This request has been blocked; the content must be served over HTTPS.
 
다음과 같은 에러가 발생하였습니다 이 Error를 처음봐서 찾아보니
 
SSL 기반의 웹컨텐츠에서 중간에 암호화 되지 않은 HTTP기반의 컨텐츠가 발생 할 경우 브라우저는 HTTP 컨텐츠를 로딩하지 않습니다. 암호화 된 HTTPS 컨텐츠만 안전 하다고 판단하기 때문이겠죠.
 

 

라는글을 보았고 그즉시 XMLHttpRequest를 https:/xxx.xxx.xxx.xxx/upload 로 바꿔주니 전송이 잘되었다.

 

 
3. HTTPS는 포트번호를 적어도 그만 안적어도 그만이다.
 - https://xxx.xxx.xxx.xxx:443 로 접속해도되고
 - https://xxx.xxx.xxx.xxx 로 접속해도 접속이 된다 . 
 
 
4. 로컬에서 잘된다고 자만하면안된다 ( 실제 다른 PC에서 접근시 SSL이아닌경우 카메라 제어불가. )
 
5. 개인 SSL을쓴다면 안전하지 않은페이지라고 뜨면서 [고급] -> 이동을 눌러줘야한다 . 

 

6. Let's Encrypt 무료 SSL을쓰려고했더니 도메인이 필요한것같다.

 - Requested name xxx.xx.xx.xxx is an IP address . The Let's Encrypt certificate authority will not issue certificates for a bare IP address 에러가 발생한다.

 - 요청된 주소는 IP Address이다 . Let's Encrypt 인증기관에서는 bare Ip Address(인증되지 않은 IP) 에 대해서는 인증서를 발급하지 않는다.. 도메인이 있어야된다 .. 

 

7. MediaWiki와 같이쓰면 mediawiki에서 443포트를 물고있으니 꺼줄것.

 - 미디어 위키는 미디어위키 설치 폴더에가면 ctlscript.sh가있는데 systemctl start ctlscript.sh 이나 stop으로 멈추고 시작한다.

 

반응형

댓글