서버쪽은 문외한이라 인터넷을 많이 찾아봐도 내 머리가 이해할 수 없길래 남겨본다.
혹시 나같은 사람 있으면 참고하길.... 보안은 0이겠지만... 그래도 해냈음... 교수님 저 해냈어요!
웹 호스팅X, 서버 호스팅X, 로컬 서버O
Node.js SSL인증서 발급받는법 검색하면 OpenSSL을 이용해서 로컬에서 https를 돌릴 수 있게 SSL인증서를 받을 수 있는 방법이 많이 나오던데, 나는 로컬에서 테스트 목적으로 자체 서명된 인증서를 사용하는 것보다는 유효한 SSL 인증서를 사용해서 https 도메인으로 바꾸고 싶었다.
http말고 https로 하는 이유:
http는 보안기능 없어서 스니핑이 가능하기때문에 그런걸 방지하기위해 https 쓰는거다.
준비물은
도메인부터. 도메인부터 모르는 사람 = 나
도메인은 메가존에서 구매했고 호스팅케이알에서 DNS관리를 했다. (문의를 많이 남겼는데 느리긴하지만 레코드 등록이 잘못돼서 수정도 해주시고 친절하게 남겨주셔서 감동..)
1. DNS 레코드 관리에서 도메인과 내 공인IP 매핑
(네이버에 내 IP 치면 나오는 그거를 값에 넣으면 된다.)
2. DNS 레코드가 잘 추가됐는지 확인 하는 법
새 레코드 추가 옆에 더보기 누르면 DNS 레코드 설정 확인 있는데 거기가서 내 도메인 쓰고 엔터누르면 잘됐으면 저렇게 뜬다.
3. 네임서버는 기본 호스팅케이알 IDC로 되어있는거 썼다.
4. 4번부터는 밑에 블로그 참고. (대신 저는 Node.js라 경로를 못찾겠어서 다른 방식으로 했어요. 제 순서 참고할사람은 다운 받고 밑에 글 정독)
SSL 인증서를 발급받기위해 참고한 블로그는 밑 주소.
https://blog.itcode.dev/posts/2021/08/19/lets-encrypt
[SSL] Windows 10에서 Let's Encrypt로 SSL 인증서 무료 발급받기 - 𝝅번째 알파카의 개발 낙서장
도메인도 있겠다. 이제 이 도메인을 가지고 SSL 인증서를 발급받아보자. 물론 SSL 인증서 또한 발급받는데 비용이 든다. 대부분의 운영 중인 도메인 업체는 SSL 발급도 병행한다. 테스트 목적이라
blog.itcode.dev
5. 일단!! 포트포워딩을 해야하는데 나는 아이피타임을 써서 아이피타임 페이지에 들어가서 포트포워딩을 했다.
> http://192.168.0.1 을 들어가서 고급설정>NAT/라우터 관리>포트포워드 설정을 누른다.
포트번호는 80으로 했고 나중에 SSL인증서 발급받고 443으로 바꿔주었다. (저기 블로그에서 포트번호 80아니면 발급이 안된다길래.. ㅎㅎ)
규칙이름(원하는거), 내부IP주소(현재 접속된 IP주소 클릭), 포트번호를 모두 적었으면 적용 후 아이피타임 맨 위에있는 저장 클릭
6. 위 블로그에서 다운받은 프로그램 실행
> 실행화면
> 이 뒤로는 사진을 안찍었는데 얘네가 DNS레코드로 등록하라는 그것들을 줌
유형, 이름, 값
그럼 호스팅 사이트 들어가서 DNS 레코드 추가하면 된다.
> 이때 아예 못찾았으면 레코드 갱신이 안됐거나 잘못된 레코드를 추가한건데 하나라도 됐으면 (밑 코드 참고)
[내도메인] [121.254.170.12] No TXT records found
[내도메인] [121.254.170.11] No TXT records found
[내도메인] [43.201.141.93] No TXT records found
[내도메인] Preliminary validation failed on 1/4 nameservers
-> 원래는 4개의 네임서버인데 하나는 성공해서 3개만 뜬거임
어? 하나는 됐다고 나오네?!!!!!!!!!!!!!!!!!!!!!!!! 그럼 1번 리트라이 계속 시도하지말고 2번 무시하고 계속 ㄱㄱ
그럼 성공적으로 인증서가 발급이 된다.
야호
7. https는 포트번호를 443으로 쓴다고 한다.
아까 아이피타임에서 설정한 80을 443으로 수정하고 저장해준다.
8. 다 끝났으니 JS코드를 수정해야겠지.
하고 돌리면 get되어 테스트 서버가 페이지에 보이게 된다.
물론 https로^^..... 뿌듯......
app.get('/', (req, res) => {
res.send('테스트 서버');
});
// HTTPS 서버 설정
const privateKey = fs.readFileSync('www.인증서이름-key.pem', 'utf8');
const certificate = fs.readFileSync('www.인증서이름-crt.pem', 'utf8');
const ca = fs.readFileSync('www.인증서이름-chain.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate, ca: ca };
const httpsPort = 443; // HTTPS 기본 포트
https.createServer(credentials, app).listen(httpsPort, () => {
console.log(`Server is running on port ${httpsPort}`);
});
Node.js express로 SSL 인증서 발급받고 https로 페이지 열기 끝! 외부접속도 된당ㅎㅎ
유니티 파트는 제 파트가 아니라 대충 유튜브 보고 휘갈겨서 만들고 스크립트 적용한거라 비밀번호 **** 안걸려있고 그런데 귀엽게 봐주세요.. Rest API 방식으로 유니티가 요청하면 서버가 파이어베이스에서 가져오는 방식이에용.
1. 드롭다운에서 공주대 선택(현재 공주대, 남서울대 있음)
> 이때 먼저 유니티가 학교 정보만 요청. 파이어베이스에서 가져오면 배열로 저장.
> 로그로도 볼 수 있지만 페이지가서 보면 이렇게 불러옴
2. 아이디, 비밀번호 입력
3. 로그인
> 버튼 누르면 서버가 파이어베이스 실시간 데이터에서 정보 가져와서 비교해서 유니티에 전달
4. 로그인 성공
> 다음씬으로 이동
> 다음씬 버튼 클릭 시 씬 종료 후 로그인씬으로 다시 이동
끝!!
유니티는 안해봤다가 프로젝트로 처음하는거라 어렵다ㅎㅎ;;;