본문 바로가기

CS 라이프

[SDLC] Google OAuth2 & HTTPS와 SSL/TLS

자 웹사이트는 발급 받았으니 한 번 연결시켜볼까? 라고 생각했다.
우리가 만든 앱에서는 로그인을 간편화 시키고자 Google OAuth2를 사용했다.
 

Google OAuth2

Google OAuth2란?

https://cloud.google.com/apigee/docs/api-platform/security/oauth/oauth-home?hl=ko

 

OAuth 2.0 홈  |  Apigee  |  Google Cloud

의견 보내기 OAuth 2.0 홈 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지는 Apigee 및 Apigee Hybrid에 적용됩니다. Apigee Edge 문서 보기 Apigee의 OAuth 2.0 홈

cloud.google.com

구글은 한국어 문서도 잘 만들어 놓았구나.
말 그대로 "Log in with Google"을 누르면 내 구글 계정으로 웹사이트에 접근을 허용하는 방식이다.
우리 웹 사이트에서 작동하는 예를 들면

프론트에 구현해 놓은 부분

이렇게 구글에서 "어떤 계정으로 접속할래?"를 물어본다

그렇게 클릭해서 다시 우리 웹사이트에 돌아오면 이렇게 정보를 얻을 수 있다.


Google Credentials

dear-diary는 내가 지난 학기에 쓴 프로젝트 이름이다.
credential 돌려막기라고 볼 수 있달까....
https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

내 웹사이트에서 "구글 로그인 쓸거야!"라고 하면 내 서버에서 google Credential 정보를 필요로 한다.

보다시피 작년에 생성한 프로젝트 이름이 dear-diary라서 로그인 때 저 이름이 뜬거다.
 
Credential Key 나 ID가 자세히 있는 페이지를 들어가보면,

로컬 개발환경에만 사용되는 나의 크레덴셜

정상적으로 로그인이 되고 나면 그 다음에 어디갈건데?를 정하는 것이 Authorized JavaScript origins 즉, 우리 웹사이트로 다시 돌아올 경로를 지정해줘야한다.


근데 여기서 이제 우리가 AWS에 배포를했다면 AWS에서 제공하는 ip를 넣어서 테스트 해보고 싶었다.

재연을 위해 걍 아무 ip나 써봤음

하지만 이렇게 보다시피 `top-level domain`을 넣으라고 오류를 뱉어낸다.
로컬 환경 테스트를 위한 localhost 정도만 허용해주고 나머지 ip는 절대 안된다고 한다.
 
그래도 난 발급받은 도메인이 있지!

재연을 위한 헬로우월드 닷컴

하지만 그것도 빠꾸를 먹는다. https:// 만허용이 된단다.
여기서 이제 security 개념이 나오기 시작한다.
 


HTTPS와 SSL/TLS

HTTP vs HTTPS

HTTP requests and responses are sent in plaintext, which means that anyone can read them. HTTPS corrects this problem by using TLS/SSL encryption.
HTTP 요청과 응답은 일반 텍스트로 전송되므로 누구나 읽을 수 있습니다. HTTPS에서는 TLS/SSL 암호화를 사용하여 이 문제를 해결합니다.

https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/
이제서야 알게되었는데 cloudflare에서도 한국어를 지원한다. 굉장한 자료가 되겠군요?!
교수님이 계속 i18n 구현하라고 압박을 주시는데 또 한 번 이렇게 i18n의 중요성을 깨닫습니다...
아마 이번 프로젝트에서 되게 든든한 친구가 될 것 같은 웹사이트다.
 
자, 또 그럼 여기서, TLS/SSL encryption이 뭔데? 라는 질문으로 이어진다.

What is an SSL certificate?

An SSL certificate displays important information for verifying the owner of a website and encrypting web traffic with SSL/TLS, including the public key, the issuer of the certificate, and the associated subdomains.
SSL 인증서에는 공개 키, 인증서 발급자, 관련 하위 도메인 등 웹 사이트 소유자를 확인하고 SSL/TLS로 웹 트래픽을 암호화하는 데 필요한 중요한 정보가 표시됩니다.

https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate
아니 하도 중요한 얘기가 많아서 긁어 오기를 포기한다. 그냥 읽어보시길 추천
 


그러니까, 구글에서는 저런식으로 "안전한" 사이트 만을 등록하라고 안내를 하는 것이고, 나는 내 웹 사이트를 안전하게 구축해야할 의무가 있는 것이다. SSL 인증서 발급은 내가 이용한 name.com에서도 제공하고 있어서 그 안에서 SSL certificate을 발급 받을 수 있다. 그래 그럼 SSL은 얼추 알겠으니 그걸 발급받으러 가보자.

SSL Certificate 발급

name.com의 도메인 관리 화면

SSL Certificate에서 볼 수 있든 웹 호스팅 업체인 name.com에서도 SSL certificate 발급이 가능하며 여전히 student pack 안이라 공짜다.
 
이걸 발급 받기 위해서는 또 CSR이라는게 필요했다.

CSR이란?

Generate a Certificate Signing Request (CSR) to get a custom certificate from the Certificate Authority (CA) of your choice while maintaining control of the private key on Cloudflare.

그러니까 인증 기관가서 웹사이트 정보 얻으려면 나의 웹사이트나 기관 정보 등등을 담은 CSR이 필요로 하니 그걸 생성해서 제출하라는 거다. 이것은 또 어떻게 만드는 것인고... 하다가 그냥 
 

 

CSR Generator | Generate a Certificate Signing Request in seconds!

Generate a Certificate Signing Request Complete this form to generate a new CSR and private key.

csrgenerator.com

여기서 간단하게 만들었다.
생성된 CSR을 제출하고 SSL 발급을 계속 진행하면 된다.

** 이때 Certificate 와 Private Key가 발급되는데 꼭!!!! 따로 저장해둬야 한다 **
 

 

CSR Decoder - Check CSR to verify its contents

Use this CSR Decoder to decode your Certificate Signing Request and verify that it contains the correct information. A Certificate Signing Request is a block of encoded text that contains information about the company that an SSL certificate will be issued

www.sslshopper.com

 

내 CSR을 디코더로 읽어보면 이렇다

내가 입력한 정보대로 암호가 잘 생성된 걸 확인할 수 있다.


(SSL Certificate 발급 이어서)
다시 name.com으로 돌아와 CSR을 넣어주고 시간이 꽤(한 10분?) 지나면

요런 이메일이 날라온다.
내 웹사이트는 TLS Certificate를 받았군요? 이때까지 SSL Certificate라고 잔뜩 써놨는데 뭐... 그게 그거니까~
TLS와 SSL의 차이는 AWS에게 설명을 부탁해본다.

 

SSL과 TLS 비교 - 통신 프로토콜 간의 차이점 - AWS

SSL과 TLS 모두 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화하는 통신 프로토콜입니다. 네트워크를 통해 연결된 두 당사자를 인증하므로 데이터를 안전하게 교환할 수 있습니다.

aws.amazon.com

그렇게 정상적으로 발급된 것을 확인하고 다시 name.com으로 들어가보면,

SSL 관련 화면

이렇게 생성된 것을 확인할 수있다.
 
Show Certificate를 클릭하면 웬 암호같은게 잔뜩 있다.
크게 두 가지로 나뉘는데, 하나는 Server Certificate 이고 다른 하나는 CA Certificate이 있다.
 
근데 계속 웹사이트에 저렇게 "Verify your nameservers"라고 떠서 GO TO NAMESERVERS를 클릭해서

Use Default Nameservers를 누르고 활성화 시켰다.
 
그러고도 계속 저 메세지가 가시질 않아서 고객센터에 문의해봤더니 이미 name.com의 nameservers를 사용하고 있으니 무시해도 좋다는 답변을 받았다.


그렇다면 여기서,

Nameservers는 또 뭔가?

 

 

What Is a Nameserver? Why Are Nameservers Important?

What is a nameserver? Nameservers help direct traffic on the Internet. Learn more in this beginner-friendly explanation, plus how to use nameservers.

kinsta.com

그러니 내가 알았던 바는
google.com 을 브라우저에 입력을 하면 8.8.8.8 로 가는 줄 알았는데 사실은 그 사이에 뭔가 더 있었던 것이다.

 

DNS란 무엇입니까? – DNS 소개 - AWS

12개월 동안 AWS 프리 티어에 액세스하고 연중무휴 24시간 고객 서비스, 지원 포럼 등을 비롯한 AWS Basic Support의 기능을 사용할 수 있습니다. 현재 Amazon Route 53는 AWS 프리 티어에서 제공되지 않는다

aws.amazon.com

 

 

도메인(Domain)과 네임서버, DNS 정리

1. 도메인이란?

velog.io

나 같이 헷갈려 하는 사람들이 꽤 있나 보군.
그러니까, 내가 name.com에서 만든 helloworld.com은 DNS를 통해서 ip를 갖고오는데 아마 그 ip는 name.com 관련 ip일 것이고, 그ip를 갖고서 TLD(최상위 도메인) 네임 서버에 요청을 보내면 name.com에서 내 helloworld.com을 찾아서 https 요청을 하는 것 같아 보인다.
아니면... 너무 복잡하니 요정도로만 간단하게 이해하고 넘어가는 걸로 ~


휴... 그렇게 나는 정상적으로 나의 웹 사이트를 Google Credentials에 등록시킬 수 있었다!

그래서 사이트 접속이 되냐고?
아직이다, 왜냐면 AWS에 정상배포가 되지 않았거든~!