인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

gkdlsb1234님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

03-09 인증 번호 전송 API

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

해결된 질문

작성

·

67

·

수정됨

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 설정하듯이 할수있는 방법이 있나요?

답변 1

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 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