강의

멘토링

커뮤니티

Inflearn Community Q&A

gkdlsb12349464's profile image
gkdlsb12349464

asked

[Code Camp] Highly concentrated backend course created at boot camp

03-09 Send Verification Code API

http => htrtps 호출 인증서 신뢰 오류

Resolved

Written on

·

302

·

Edited

0

 self-signed certificate in certificate chain 발생합니다.

1번

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

2번

// SSL 인증 무시를 위한 Agent 생성
const httpsAgent = new https.Agent({
    rejectUnauthorized: false
});
await axios.get("target_url", { httpsAgent: agent });

1,2 번 외 해결 방법이 있을까요?
또는 2번을 적용하려면 어떻게 해야하나요?

 

또는 Java에서 로컬 톰캣 서버에서 HTTPS 설정하듯이 할수있는 방법이 있나요?

javascriptnode.jsdockerrest-apinestjs

Answer 1

0

nwd09074926님의 프로필 이미지
nwd09074926
Instructor

안녕하세요! gkdlsb1234님!

self-signed 인증서를 사용하고 계신 것으로 보아, 로컬에서 톰캣 개발시 https 설정한 것 처럼 node/nestjs에서도 https를 설정하여 테스트 해보고 싶으신 것 같아요!

톰캣 개발시 사용하셨던 방법과 마찬가지로, node에서도 self-signed 인증서를 적용하여 연습해 보실 수 있어요!
아래와 같이 인증서를 만들어 보시고 적용해 보세요!
(보안 목적상, 실제 배포 수업에서는 로드밸런서 등의 정식인증서를 활용하여 배포하며, self-signed 인증서는 단지 로컬에서 연습용으로만 사용해 주세요.)

 

 

  1. 연습용 self-signed 인증서, 키 만들기

openssl req -nodes -new -x509 -keyout server.key -out server.cert -days 365

 


2. 중간에 localhost만 입력하고 나머진 다 그냥 Enter!

image.png

 


3. 완성된 결과는 아래와 같아요!

image.png

 

 

  1. node 서버에서 https 인증서 적용하여 https서버 만들기

import express from 'express'
import https from 'https'
import fs from 'fs'
import cors from 'cors'

const app = express()
app.use(cors())
app.get("/qqq", (req, res) => {
    res.json(JSON.stringify({ name: "철수", age: 12 }))
})

https.createServer({
    key: fs.readFileSync("server.key"),
    cert: fs.readFileSync("server.cert")
}, app).listen((8443) => {
    console.log("https://localhost:8443 배포 완료")
})

 

 

  1. 요청을 위한 프론트엔드 만들기
    => /qqq 엔드포인트에 api 요청해보기

<!DOCTYPE html>
<html lang="ko">
<head>
    <title>https 요청하자</title>
    <script>
        const call = async () => {
            const result = await fetch("https://localhost:8443/qqq")
            const data = await result.json()
            console.log(data)
        }
    </script>
</head>
<body>
    <button onclick="call()">요청하자</button>
</body>
</html>

 

 

 

 

  • self-signed는 신뢰하기 어려운 자체인증서이므로, 최초 접속시, 연결 허용하도록 풀어줘야 합니다.(사파리 브라우저도 마찬가지임)

image.png

 

 

 

image.png

 

 

 

image.png

* 이제부터 해당 주소는 로컬에서 작동 가능합니다.(axios, fetch 등)

 

 

 

 

 

  1. 버튼을 클릭하여 요청해보기

    image.png


    image.png


gkdlsb12349464's profile image
gkdlsb12349464

asked

Ask a question