일반 유저가 접속하는 80, 443 포트 외에 정보를 받아와야 하는 API 주소(다른 포트번호)에는 SSL이 적용되지 않아서
ERR_SSL_PROTOCAL_ERROR를 받았다.
처음에는 임시로 프론트에서 해결해보고자 React에
<meta httpEquiv="Content-Security-Policy" content="upgrade-insecure-requests" />
이 meta 태그를 입력했는데 일단 임시방편이기도 하지만 이렇게 넣어줘도 통신이 되지는 않았다.
Node.js의 구동 코드에 SSL인증서 파일을 입력해주면 된다.
var app = require('../app');
// HTTPS
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('privkey.pem'),
cert: fs.readFileSync('fullchain.pem')
}
var port = normalizePort(process.env.PORT);
app.set('port', port);
var server = https.createServer(options, app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
인증서 파일은 복사해서 같은 경로에 두었는데 이 경우 나중에 갱신되었을 때 복사도 같이 해줘야 할 것 같은 느낌이다.
원래 경로를 참조하게 만드는 게 좋을지 어떨지 생각을 좀 해봐야겠다.
let's encrypt를 사용하였고
options의 key:에는 privkey, cert:에는 fullchain을 입력했다.
-발생했던 에러
error:0909006C:PEM routines:get_name:no start line
-----BEGIN CERTIFICATE----- 잘 되어있고 /n 문제는 아닌 것 같아 보였는데
자세히 보니 key와 cert에 들어갈 인증서가 뒤바껴 있었다.. 제대로 넣어주니 바로 해결됨 ㅎㅎ..
unable to verify the first certificate
npm config set registry http://registry.npmjs.org/ --global
구글링 해보니 이거 해보래서 해봤는데 위 명령어로는 해결이 안 되었고
https://www.npmjs.com/package/ssl-root-cas
cert 부분에는 fullchain이 들어가야 하나보다. 고쳤더니 해결.
request to https://IP주소 failed, reason: Hostname/IP does not match certificate's altnames: IP: IP주소 is not in the cert's list
https://discourse.nodered.org/t/hostname-ip-does-not-match-certificates-alternates/48195
let's encrypt는 공개 인증 기관이라 쉽게 스푸핑되기 때문에 IP주소에 대한 인증서 생성을 허용하지 않는다고 함.
IP주소로 API를 부르고 있었어서 DNS네임으로 바꿔주었더니 해결되었다.
이제 잘 됨!
'main > Node.js' 카테고리의 다른 글
[React | Next.js | Node.js] TOAST UI Editor 이미지 업로드 (0) | 2022.01.10 |
---|---|
[MySQL | Javascript] query return값 받아서 저장하고 사용하는 방법 (0) | 2021.11.15 |
[Node] 회원가입 시 이메일 발송하기 - 구글 계정으로 nodemailer 사용 (0) | 2021.08.25 |
[Node] path, __dirname 사용하기 / ReferenceError: path is not defined ERROR (0) | 2021.07.27 |