[Github]HTTPS vs SSH 그리고 SSL
어제 있었던 이슈를 다시 회고해보자..
어제 마주쳤던 문구
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.'
그리고 Github에서는 어제 문구와 같이 더 이상 패스워드로 작업할 수 없다.
따라서 Token-based authentication 토큰으로 권한을 받아야하는데.. Github에서는
이 외에도 3가지의 인증방식이 더 있다.
1. Token-Based Authentication
2. SSH Key
3. Personal Access Key
4. OAuth
이 중에서 나는 SSH 키로 인증을 했던 것..
하지만 1번이나 3번으로도 많이 인증하는 것 같다.
오늘 Git push로 애좀 먹었던 주된 원인이었던 HTTPS 와 SSH.
SSL은 들어봤는데 SSH는 뭘까.
1. HTTPS vs SSL
처음에는 HTTPS와 SSH를 비교하려고 찾아봤는데 찾아보니 HTTPS 는 SSL을 이용한 보안 프로토콜이었다.
그래서 이 둘을 먼저 비교해 본 후 SSL과 SSH의 차이를 알아보는 것이 좋겠다고 생각했다.
HTTPS is a combination of the Hypertext Transfer Protocol (HTTP) with either SSL or TLS.
It provides encrypted communications and a secure ID of a web server.
SSL is simply a protocol that enables secure communications online.
출처 nozakconsulting.com
SSL은 보안 통신을 하기 위한 보안용 프로토콜이다.
HTTPS는 이 SSL로 통신을 암호화하는 HTTP의 보안버전이다.
따라서 SSL은 연결을 암호화하는 것으로 가장 잘 알려진 용도가 HTTPS 인 것이다.
2. SSL vs SSH
우선 Git 애서 HTTPS를 사용하여 리모트 저장소에 사용하는 경우는 매번 사용자 이름과 암호를 입력해야한다. 하지만 이는
SSH 프로토콜을 사용하여 리모트 저장소에 접근할 때 Passphase 없이 생성한 SSH Key를 사용하면 사용자이름과 암호를 입력하지 않고도 안전하게 데이터를 주고받을 수 있다. 반면 HTTP 프로토콜을 사용하는 경우는 매번 사용자이름과 암호를 입력해야 한다.
다행히도 Git은 이렇게 매번 인증정보(Credential)를 입력하는 경우 인증정보를 저장해두고 자동으로 입력해주는 시스템을 제공한다. Git Credential 기능이 제공하는 옵션은 아래와 같다.
SSL(Secure Sockets Layer)
보안 소켓 계층을 이르는 말로, 인터넷에서 데이터를 안전하게 전송하기 위한 인터넷 통신 규약 프로토콜
포트 443을 사용. 2018년 7월부터 모든 웹사이트는 SSL인증서를 설치하여 연결을 암호화해야한다.
SSH(Secure Shell)
원격 컴퓨터에 안전하게 엑세스하기 위한 유닉스 기반의 명령 인터페이스 및 프로토콜. 강력한 암호화 기능을 구현해 모든 데이터가 암호화 되기에 높은 보안을 지원
포트 22 사용. 클라이언트 인증도 필요하다.
조금 헷갈려서 더 찾아보았는데 이해하기 쉽게 설명해놓은 자료를 찾았다.
다음은 노트북을 사용중이라고 가정했을 때 각 프로토콜이 발생하는 경우이다.
SSH
if you wanted to securely connect to your website’s server and use WPCLI to manage your WordPress site,
you would use SSH.
웹 사이트 서버에 안전하게 연결하고 WP-CLI를 사용하여 WordPress 사이트를 관리하려면 SSH를 사용합니다.
SSL
if you wanted to interact with a frontend form on your website to submit data, your server would use SSL to encrypt the form data as it moves between your web browser and your server’s database.
웹 사이트의 프론트엔드 양식과 상호 작용하여 데이터를 제출하려는 경우 서버는 SSL을 사용하여 웹 브라우저와
서버 데이터베이스 사이를 이동할 때 양식 데이터를 암호화합니다.
As long as you’ve installed an SSL certificate and enabled HTTPS, everyone who visits your website will
interact with your site’s server using SSL – they don’t need to authenticate themselves to access your site.
SSL 인증서를 설치하고 HTTPS를 활성화하기만 하면 웹사이트를 방문하는 모든 사람이 SSL을 사용하여
사이트 서버와 상호 작용합니다. 사이트에 액세스하기 위해 인증할 필요가 없습니다.
other technical users who are supposed to have direct access to your server and
can authenticate themselves with either a username/password or a cryptographic key.
그러나 SSH와 상호 작용하는 유일한 사람은 귀하 또는 귀하의 서버에 직접 액세스해야 하고 사용자 이름/암호 또는
암호화 키로 자신을 인증할 수 있는 다른 기술 사용자입니다.
However, the only person who interacts with SSH will be you or other technical users who
are supposed to have direct access to your server and can authenticate themselves with
either a username/password or a cryptographic key.
SSH는 일반적으로 기술자를 위한 도구이고 SSL/TLS는 사용자에게 투명한 웹사이트를 보호하기 위한 메커니즘입니다.
물론 이 둘은 상호 배타적인 것은 아니다. SSH는 보안 솔루션의 일부로 SSL/TLS를 사용할 수 있습니다.
이러한 다목적 프로토콜에 대해 다양한 구현이 가능합니다.
둘은 PKI기반이고 암호화된 통신터널을 형성한다는 점에서 비슷하다고 볼 수 있다.
하지만 SSL은 정보 전송을 위해 설계되었지만 SSH는 명령을 실행하도록 설계되었다는 점에서 다르다.
일반적으로 네트워크의 일부에 원격으로 로그인하려는 경우에 SSH가 표시된다고 한다.
SSL은 웹사이트와 방문자 간의 인터넷 연결을 보호하기 위함, SSH는 원격 액세스를 통해 명령을 실행하기 위함이다.
이렇게 봤을 때는 HTTPS 보다 SSH가 더 안전해 보인다. 하지만 Github의 기본사용을 위해 암호를 사용한 HTTPS인증은 충분히 허용되며, Github자체에서도 HTTPS를 사용하도록 권장하고 있다.
물론 지금은 앞서 말했듯 HTTPS 를 사용한다고 해서 비밀번호로만으로 인증 할 수는 없고, 개인 엑세스 토큰을 생성해야한다.
그래서 Git에서 뭘 사용해야하지? 라는 의문이 들어서 찾아봤다. 그런데 들은 답변 '그냥 개인이 편한 방식으로 인증해라'라는 것..
유투브에서도 찾아봤는데 어떤 분은 SSH가 인증방식이 쉽다고하고, 또 다른 곳에는 HTTPS가 훨씬 쉽다고한다.
내가 보기에는 둘 다 어렵지 않다.. 그래 이게 뭐가 중요한가. Github에서도 둘 다 가능하다고 하는데 말이지
관련된 자료는 아래 링크에 첨부할테니 궁금하신 분은 읽어보셔도 좋겠다.
reference :
https://kinsta.com/knowledgebase/ssh-vs-ssl/
https://www.cloudsavvyit.com/14822/should-you-use-https-or-ssh-for-git/