본문 바로가기
320x100
320x100

SSH Client로 원격 서버에 접속하기 위한 방법으로는 2가지가 있다

1. ID / PW

2. 개인키 인증서

 

이번에는 개인키 인증서로 사용할 수 있는 파일들에 대해 알아보려고 한다

이 파일들을 알기 위해서는

인코딩 방식에 대해서 알 필요가 있다

- Text (텍스트) 인코딩

  • PEM 형식
    • ASCII 텍스트 기반의 Base64 인코딩을 사용
    • "-----BEGIN ...-----"와 "-----END ...-----" 태그로 감싸인 구조를 가진다
    • SSL/TLS 인증서, SSH 키 등에 사용되며, 파일 내용은 텍스트 편집기로 읽을 수 있다
  • OpenSSH 형식
    • ASCII 텍스트 기반의 Base64 인코딩을 사용
    • "-----BEGIN OPENSSH PRIVATE KEY-----"와 "-----END OPENSSH PRIVATE KEY-----" 태그로 감싸인 구조를 가진다
    • 파일 확장자가 없는 경우가 일반적이며(예: id_rsa, id_ecdsa), SSH 접속용 개인키에 특화되어 있다
    • 주로 SSH 접속에 사용되는 개인키에 사용되며, 파일 내용은 텍스트 편집기로 읽을 수 있다

- Binary (이진) 인코딩

  • DER 형식
    • ASN.1(Abstract Syntax Notation One) 데이터 구조를 이진 형식(Distinguished Encoding Rules)으로 인코딩
    • 주로 SSL/TLS 인증서에 사용되며, 파일 내용은 텍스트 편집기로 읽을 수 없다
    • 바로 SSH 접속의 개인키로 사용할 수 없고, openssl 패키지를 이용해서 pem 파일등으로 변환해서 사용한다

- Text(텍스트) && Binary (이진) 인코딩

  • PPK 형식
    • PuTTY Private Key (.ppk) 형식은 PuTTY SSH 클라이언트에 최적화된 바이너리 형식을 사용한다
    • PPK파일에는 공개키와 개인키가 같이 쓰여있으며, 메타데이터를 cat 명령어 등으로 읽어볼 수 있다
    • 공개키는 Base64 인코딩으로 저장되고, 개인키는 ASN.1(Abstract Syntax Notation One) 형식으로 저장된다
    • 주로 Windows 환경에서 사용되며, 다른 시스템에서 사용하려면 형식 변환이 필요하다

 

[ 테스트 - 직접 눈으로 확인하기 ]

준비

ssh-keygen, openssl, puttygen 등의 CLI를 통해서 미리 관련 파일들을 생성해놓았다

file 명령어로 어떤 종류의 파일인지 대충 파악할 수 있다

➜  .ssh file private_key.pem 
private_key.pem: ASCII text
➜  .ssh file id_rsa
id_rsa: OpenSSH private key
➜  .ssh file der-private-key.der 
der-private-key.der: DER Encoded Key Pair, 2048 bits
➜  .ssh file ppk-test.ppk 
ppk-test.ppk: PuTTY Private Key File, version 3, algorithm ssh-rsa

1. PEM 파일

head -n 2 test.pem && tail -n 2 test.pem

2. OpenSSH 파일

head -n 2 id_rsa && tail -n 2 id_rsa

3. DER 파일

cat der-private-key.der

cat 명령어로는 볼 수 없는 바이너리 파일..

xxd 명령어로 대충 확인해볼 수 있다

xxd der-private-key.der

4. PPK 파일

cat ppk-test.ppk

 

pem 파일이 SSH에서도 쓰이고, SSL에서도 쓰이는 등 혼란스러웠다. 한 번쯤은 공부하고 정리하면서 원리를 파악할 필요가 있었다

개인적으로 SSL을 위한 것들만 해도 정말 다양한 포맷과 기술들이 쓰이는 것을 느꼈다..

MacOS user이고 AWS/GCP/Azure 등과 호환되는 pem 포맷을 제일 많이 쓰는 것 같지만, 다양한 포맷의 파일들이 어떠한 목적으로, 어떻게 사용되는지 파악하는 것은 정말 재밌는 일이었다!

이 파일들을 활용해서 어떻게 SSH로 접속하는지에 대한 건 CS쪽 카테고리가 아닌, OS쪽 카테고리에 올리려고 한다

그리고 마지막으로 이 기술들이 잘 wrapping된 프로그램 하나를 소개해보고 마치려고 한다

 

나중에 HTTPS를 만들기 위한 SSL/TLS 등을 포스팅하기 위한 기반지식이라고 봐도 무방하다

컴퓨터 공부는 해도해도 끝이없군..휴

320x100

댓글