안드로이드를 하다보면 MD5, SHA1, SHA-256과 같은 것들을 필연적으로 접하게 된다.

릴리즈 APK를 만들 때 .jks 확장자인 키스토어가 필요하다.

AWS 서버를 만들면 확장자가 pem인 파일을 받아야 한다.

공인인증서는 .der, .pfx와 같은 확장자로 쓰인다.

 

위에 것들을 무엇인지 알기 위해서는 해시함수, 대칭키, 공개키, 인증서 등을 알아야 한다.

 

간략하게 각각의 목적을 보자면

 

해시함수는 유일하게 식별할 수 있는 값을 만드는 함수이고

대칭키와 공개키는 데이터를 안전하게 전달하기 위해 암복호화를 위해 만들어졌다.

인증서는 자신을 증명하기 위해 사용된다.

 

 

 


 

해시함수

대상을 식별할 수 있는 해시값을 만드는 함수이다.

 

해시값의 크기와 해시함수에 따라 충돌이 일어날 수도 있지만

사용하는 대부분의 알고리즘은 유일하게 식별할 수 있게 만든다.

 

해시의 사용

1. HashMap과 같이 대상을 찾기 위한 키값으로 사용

2. 원본 데이터를 보장하기 위한 체크섬으로 사용

 

 

MD5(Message-Digest algorithm 5)

128비트 암호화 해시 함수

주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용.

임의의 길이의 메시지를 입력받아, 128비트짜리 고정 길이의 출력값을 낸다.

현재는 결함으로 인해 보안관련 용도로 쓰이는 것을 권장하지 않음.

 

SHA(Secure Hash Alogorithm)

암호화 해시 함수

최초의 SHA 알고리즘을 SHA-0라고 한다.

SHA-1은 SHA-0의 변형으로 TLS, SSL, PGP, SSH 등 많은 보안 프로토콜과 프로그램에 사용된다.

SHA-2 4종류의 변형(SHA-224, SHA-256, SHA-384, SHA-512) 통칭

 

 

 


 

암호화

 

대칭키

암호화와 복호화에 하나의 키를 사용하는 암호화 방식

하나의 키를 사용하기 때문에 키 노출시 암호화가 무의미해진다.

DES, 3DES, AES...

 

DES(Data Encryption Standard)

블록 암호의 일종, 미국 NBS에서 국가 표준으로 정한 암호

56비트의 키를 사용
3DES : DES를 세번 중첩해 만듬

 

AES(Andvanced Ecryption Standard)

DES를 대체해서 사용 중이다.

 

 

 

비대칭키(공개키)

암호화는 공개키를, 복호화는 비밀키를 사용하는 암호화 방식

누구나 암호화할 수 있지만 내용은 비밀키를 가지고 있는 사람만 볼 수 있다.

대칭키와 비교하면 매우 오래 걸린다.

RSA...

 

RSA

1024, 2048 비트의 키를 사용하며 소인수 분해를 이용한 암호화 알고리즘

기존의 알고있던 비대칭키와 반대로 비밀키로 암호화하고 공개키로 복호화가 가능하다.

 

비밀키를 암호화에 사용하면 나만 암호문을 만들 수 있다.

그렇기 때문에 전자서명의 용도로 사용할 수 있다.

 

비밀키를 복호화에 사용하면 나만 상대의 암호문을 읽을 수 있다.

서버에서 공개키를 공유하고 유저들이 암호화한 값을 복호화하여 서버만 데이터를 볼 수 있도록 사용한다.

 

 

 


 

암호화 사용법

 

A와 B가 통신하고 싶다.

 

대칭키 사용

1. 대칭키를 사용한다면 한쪽에서 우선 대칭키를 보내고

2. 서로 대칭키를 이용해 암호화 복호화하며 통신한다.

Problem. 대칭키를 보내는 과정에서 키가 노출될 수 있다.

 

공개키 사용

1. 공개키의 경우 서로 공개키만 전달한다.

2. 서로의 공개키로 암호화해서 전달한다.

3. 전달받은 데이터를 각자의 개인키로 복호화 한다.

Problem. 공개키 방식은 대칭키에 비해 속도가 현저하게 느리다.

 

대칭키 + 공개키 사용

1. 서로에게 공개키를 보낸다.

2. 한쪽에서 공개키로 대칭키를 암호화해서 전달한다.

3. 다른 한쪽은 개인키로 복호화해 대칭키를 얻는다.

대칭키를 암호화해서 보내기 때문에 대칭키가 노출되지 않고

대칭키를 통해 통신함으로 좋은 성능을 얻을 수 있다.

 

 

 


SSL 암호화 방식

 

대칭키 + 공개키를 사용해 통신에 문제가 생겼다.

공개키를 얻는 과정 중 외부의 악의적(해커) 행위로 인해 공개키를 신뢰할 수 없게 되었다.

 

기본적으로 위의 대칭키 + 공개키 방식을 사용한다.

공개키를 전달하는 과정이 복잡해졌을 뿐이다.

공개키를 인증기관에 전달해 공개키를 포함한 인증서를 만들어

전달하여 공개키에 대한 신뢰성을 높였다.

 

 

 

 

1. 사이트는 사이트의 공개키CA(인증기관)에 등록한다.

2. 사이트의 공개키해싱하고 CA의 비밀키로 암호화한다. 이 암호화값을 디지털 서명이라고 한다. 그리고 발급대상, 발급대상의 공개키, 발급자, 발급자의 서명(2번의 암호화한 값) 정보를 가지고 있는 인증서를 만든다.

3. 만들어진 인증서를 서버에 전달한다.

 

 

 

4. 유저는 CA에서 CA의 공개키를 받아 브라우저에 보관하고 있는다.

5. 서버에 접속을 요청한다.

6. 서버에서 인증서를 받는다.

7. ( 인증서의 발급자 서명을 CA 공개키로 복호화한 값 )과 ( 인증서에 포함된 공개키를 해싱한 값 )을

비교해 동일하다면 신뢰성이 있는 공개키라고 판단

 

 

 

8. 인증서의 공개키를 이용해 대칭키를 암호화하고 싸이트는 복호화하여 대칭키를 얻는다.

9. 대칭키를 이용해 통신한다.

 

인증기관에 의해서 암호화하는 것은 암호화 대상을 숨기려는 의도보다는

인증기관의 공개키를 통해 복호화됨을 확인하여 신뢰성을 얻는 것이다.

 

 

SSL(Secure Sockets Layer)

종단간 전송된 데이터를 암호화하여 인터넷 연결 보안을 유지하는 표준 기술

SSL 인증서 파일 포멧 종류로 .pem, .crt, .cer, .csr, .der, .pfx, .p12, .key, .jks 등의 포멧이 있다.

TLS(Transport Layer Security)와 함께 거론되는데 방식은 동일하다.

넷스케이프에서 SSL1.0, SSL2.0, SSL3.0까지 개발했고 SSL3.0을 기초로 IETF에서 만든 것이 TLS이다.

현재는 SSL은 결함으로 인해 사용이 중지되었음으로 우리가 사용하는 SSL은 TLS이다.

TLS를 SSL이라고 부르는 것에 대해 약간의 논란?이 있는 것 같아 보인다.

정확히 알지는 못하지만 우분투를 리눅스라 부를지 우분투라 부를지정도의 문제라고 보인다.

 

HTTP + SSL -> HTTPS

FTP + SSL + SFTP

 

 

 


 

인증서

공개키 + 비밀키 소유자 정보

 

 

인증서에 들어가는 내용

 - 일련번호

 - 소유자

 - 서명 알고리즘

 - 발행자

 - 유효기간(시작)

 - 유효기간(끝)

 - 키 사용 목적

 - 공인 키

 - 서명 알고리즘

 - 서명

 

 

 


 

이해에 도움이 된 포스팅들

 

https://rsec.kr/?p=426

 

RSA 인증서 (Certification) 와 전자서명 (Digital Sign)의 원리

공개키 비밀키로 이루어지는 RSA 알고리즘을 이해. 인증서에 포함된 공개키의 무결성을 보증하는 인증서 체인 (Certificate Chain) 에 대한 설명무결성 보증시 사용되는 해쉬 (지문, Finger Print) 와 전자

rsec.kr

https://preamtree.tistory.com/38

 

[IT 기술면접 준비자료] 대칭키, 공개키 방식과 SSL(TLS)

 정보보호 관련 수업을 들으면, 가장 먼저 배우게 되는 내용이 SSL이다. 암호화의 기원, DES, AES와 같은 개요에 해당하는 내용은 생략하고, 바로 본론으로 들어가도록 하겠다.  대칭키(Symmetric Key)

preamtree.tistory.com

 

'Common' 카테고리의 다른 글

PorterDuff  (0) 2020.08.18
Git 기본 명령어  (0) 2019.08.19
Android Studio/IntelliJ 단축키 (Window)  (0) 2019.08.17
시간 표시  (0) 2019.06.16

 

 

 

서버가 실행될 공간, 공간에 접근할 수 있는 방법. 서버에 접근할 수 있는 고정 IP가 준비되었다.

남은 것은 서버에서 없어서는 안될 데이터베이스이다.

 

 

 

RDS(Relational Database Service)

콘솔에서 RDS를 검색하고 RDS 페이지로 간다.

 

 

데이터베이스 생성 선택

 

 

 

 

 

사용할 데이터베이스를 선택한다.

프리티어로 가능한 엔진은 MySQL, MariaDB, PostgreSQL, Microsoft SQL Server이다.

 

가능 엔진 중 원하는 엔진을 선택하면 될 것 같다.

 

 

 

 

 

프리티어가 가능한 엔진에 한해 프리티어를 선택할 수 있다.

 

DB 인스턴스 식별자에는 말그대로 식별할 수 있는 이름을 넣어준다.

DB에 접근할 아이디와 비밀번호를 설정한다.

 

 

 

 

 

프리티어로 가능한 20기가로 설정한다.

 

 

 

 

 

퍼블릭 엑세스를 가능하도록 설정하고 보안그룹을 설정한다.

차후에 변경할 것이니 EC2 인스턴스를 만들 때 만든 보안그룹으로 설정해두자.

 

모두 설정했으니 데이터베이스 생성을 누르자.

 

 

 

 

 

기다리면 일정 시간 후 데이터베이스가 위와 같이 사용가능으로 표시된다.

 

데이터베이스를 선택하면 상세정보에 보안그룹이 표시된다.

보안그룹을 선택하던가 EC2페이지에서 보안그룹 페이지로 이동한다.

 

그리고 새 보안그룹을 만든다.

 

 

 

 

RDS의 보안그룹임을 나타낼수 있도록 이름을 만들고

인바운드 규칙을 위와 같이 만들자.

 

유형은 RDS가 속한 엔진을 선택한다.

EC2 인스턴스가 데이터베이스에 접근할 수 있도록 EC2 인스턴스의 보안그룹을 대상으로 인바운드 규칙을 만든다.

또 유틸 프로그램을 통해 데이터베이스에 접근하도록 내가 작업할 PC에서의 IP를 추가한다.

 

보안그룹을 만들었으니 데이터베이스에 해당 보안그룹을 설정하자.

 

여기까지 데이터베이스를 사용하기 위한 서비스 설정이 끝났다.

해당 데이터베이스에 수정을 눌러 기존에 임시로 설정했던 보안그룹을 제거하고

위에서 만든 RDS용 보안그룹으로 설정하자.

 

 

 

 

DBeaver

데이터베이스 정보를 유틸 프로그램을 통해 확인해보자.

DBeaver 외에도 다른 유틸도 상관없다.

 

https://dbeaver.io/

 

DBeaver Community | Free Universal Database Tool

DBeaver Universal Database Tool Free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase,

dbeaver.io

 

 

 

설치 후 실행하면 아래와 같은 프로그램이 보인다.

 

 

파일 아래 아이콘을 선택한다.

데이터베이스 종류가 뜨면 해당하는 데이터베이스를 선택한다.

 

 

 

 

 

Authentication에는 RDS를 만들때 입력했던 아이디와 패스워드를 입력한다.

 

Server Host에는 해당 데이터베이스를 선택하면 표시되는 엔드포인트 값을 입력한다.

 

 

 

 

 

완료하면 왼쪽 리스트에 데이터베이스가 추가된다.

 

 

설정이 끝났다.

해당 프로그램을 통해 데이터베이스 작업이 가능하다.

 

 

 

 

파라미터 그룹

설정해야할 일이 하나 더 있다.

위에 데이터베이스의 Default Charset은 utf8로 설정되어 있지만

기본 설정은 latin으로 되어 있다.

 

기본 설정값들은 RDS의 파라미터 그룹에서 관리한다.

 

 

기본 파라미터 그룹은 변경이 불가능하다고 한다.

 

새로운 파라미터 그룹은 만들자.

그룹 이름을 적당히 만들고 생성하자.

 

새로 만든 파라미터 그룹을 선택하고 파라미터 그룹 작업에서 편집을 선택하자.

 

 

 

 

2페이지, 3페이지에 charset과 관련된 파라미터들이 있다.

 

character_set_client, character_set_connection, character_set_database, character_set_filesystem, character_set_results, character_set_server은 utf8로

collation_connection, collation_server은 utf8_general_ci로 설정하자.

 

해당 데이터베이스에 파라미터 그룹을 설정하자.

수정을 누르면 데이터베이스 옵션에서 파라미터 그룹을 변경할 수 있다.

 

변경 후 데이터베이스를 재부팅해야 적용된다.

작업 / 재부팅을 선택한다.

 

 

 

 

 

EC2 서버에서도 데이터베이스를 확인할 수 있다.

 

mysql 설치
sudo yum install mysql

mysql 접속
mysql -u 계정 -p -h Host주소

 

 

 

 

 

 

 

 

 

'Server' 카테고리의 다른 글

서버알못의 스프링부트 프로젝트 만들기  (0) 2020.06.22
서버알못의 AWS 설정1 - EC2 생성  (0) 2020.06.17

 

 

윈도우에서 AWS 클라우드 서버를 사용하려 한다.

윈도우 기반으로 작성하니 맥북 사용자는 아래 포스팅 링크를 참조하자.

 

AWS에 가입하면 12개월 동안 서비스의 일정부분은 무료로 사용할 수 있는 프리티어를 제공한다.

일정 부분 무료라고 써놨지만 사실상 무료이다.

 

다만 보안설정없이 사용하는 경우 내 계정이 코인 체굴에 쓰이고 요금 폭탄을 맞는 경우도 있다고는 한다.

물론 고객센터에 영어로 잘 문의하면 선처해주는 분위기인듯 하다.

 

보안설정을 통해 나만 접근하게 설정한다면 위와 같은 문제는 없을 것이다.

 

 

 

AWS 프리 티어

https://aws.amazon.com/ko/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc

 

AWS 프리 티어

프리 티어를 이용해 60가지가 넘는 제품을 체험하고 AWS에 구축할 수 있습니다. 사용하는 제품에 따라 세 가지 유형의 프리 티어 오퍼가 제공됩니다. 각 제품에 대한 자세한 내용은 아래를 참조하

aws.amazon.com

 

해당 포스팅 내용을 보고 다시 작성하는 것이다.

https://jojoldu.tistory.com/259?category=635883

 

4) 스프링부트로 웹 서비스 출시하기 - 4. AWS EC2 & RDS 구축하기

이번 시간엔 SpringBoot를 운영할 AWS 환경을 구축하겠습니다. (모든 코드는 Github에 있습니다.) Tip) 운영 서버는 크게 클라우드 서비스(AWS, Azure 등) 과 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용��

jojoldu.tistory.com

 

 


 

1. AWS 가입

2. EC2 인스턴스 생성

3. EIP 설정

4. putty 사용

5. RDS 생성

6. DBeaver 사용

7. FileZilla 사용

 

EC2 서버를 위한 공간

EIP 만들 웹 서비스에 접근하기 위한 고정 IP

putty 서버를 위한 공간에 접근하기 위한 프로그램

RDS 데이터베이스 서비스

DBeaver DB에 접근하기 위한 프로그램

 

해당 포스팅에서는 4번까지 진행하면서

서버를 위한 기본이 되는 공간을 만들고 접속해보려 한다.

 

 


 

AWS 가입

가입한 시점부터 프리티어 12개월이 진행됨으로 별다른 신청이 필요없다.

가입하고 아래 콘솔화면을 볼 수 있다.

 

 

오른쪽 위에 리전을 선택하는 곳이 있는데 서울이 아니라면 서울을 선택한다.

 

 

 


 

EC2

 

EC2 페이지로 가면 위와 같은 화면을 볼 수 있다.

인스턴스 시작 선택

 

 

운영체제를 Amazon Linux AMI를 선택한다.

 

 

 

프리티어에서 가능한 t2.micro를 선택

 

 

 

 

인스턴스 세부 정보 구성은 기본 설정을 따른다.

 

 

 

프리티어에서 사용 가능한 최대 크기 30기가로 설정

 

 

 

 

서버에 접근할 수 있는 보안 그룹을 설정한다.

SSH 접근은 사용자만 접근할 수 있도록 "내 IP"만 선택하고

외부에서 웹서비스에 접근할 수 있도록 HTTP, HTTPS는 열어둔다.

 

다른 장소에서 SSH에 접근하고 싶거나 FTP, DB에 필요한 포트가 필요하다면

후에 추가로 접근하고 싶은 서비스 혹은 IP를 설정하면 된다.

 

 

인스턴스에 대한 설정이 모두 끝났음으로

검토 및 시작에서 시작하기를 선택

 

 

 

새 키 페어 생성을 선택하고

키 페어 이름을 입력한 뒤 키 페어를 다운로드하여 저장해둔다.

 

 

 

 

 

생성을 완료하고 나면 인스턴스가 돌아가는 것을 확인할 수 있다.

 

 

 

 

탄력적 IP(EIP) 설정

서버를 만들기 위한 자원은 갖췄지만 고정된 IP가 없다면 아무 의미가 없다.

내 서버의 IP를 얻어보자.

 

EC2 메뉴에서 네트워크 및 보안 / 탄력적 IP를 선택

우상단의 탄력적 IP 주소 할당 선택

 

 

할당하면 주소가 생성된다.

주소와 인스턴스가 각각 만들어졌을뿐 연결되어 있지 않다.

 

우상단의 Actions의 주소연결을 선택한다.

 

 

 

위에서 만든 EC2 인스턴스를 선택하고

프라이빗 IP 주소 EC2 인스턴스의 프라이빗 IP를 입력한다.

(누르면 자동으로 항목이 나온다.)

 

 

연결 후 EC2 인스턴스를 확인한다.

 

 

탄력적 IP가 할당된 것이 보이면 된다.

 

 

 

 

Putty 사용

서버를 위한 공간을 할당받았으니 접속해보자.

Putty를 사용해 SSH로 서버 공간에 접근하겠다.

 

SSH(Secure Shell)

네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용프로그램 또는 프로토콜

 

우선 다운받아 설치해보자

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

 

Download PuTTY: latest release (0.73)

This page contains download links for the latest released version of PuTTY. Currently this is 0.73, released on 2019-09-29. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

 

 

 

위 두개의 프로그램을 사용할 것이다.

 

우선 PuTTYgen을 이용해 private key를 만들 것이다.

 

 

 

통해 EC2 인스턴스를 생성하면서 받은 pem을 Load한다.

Save Private Key를 선택하여 저장한다.

passphrase가 없다고 경고가 뜨는데 무시한다.

 

pem과 같은 이름으로 만들라고 블로그에서 봤는데 이유는 잘 모르겠다.

 

 

그럼 이제 PuTTY를 이용해 서버에 접근해보자.

 

 

HostName : [user]@[IP]

 - user : EC2의 경우 ec2-user를 입력한다.

 - IP : EC2 인스턴스 정보에 퍼블릭 DNS 또는 EIP를 입력한다.

 - ex : ec2-user@12.345.670.891

Port : 22

 - EC2를 만들 때 보안그룹에서 SSH, 22 포트를 내 IP 설정한 이유이다.

Private Key 설정

 - Connection / SSH / Auth

 - Private key file for authentication에 위에서 생성한 .ppk 파일은 선택한다.

Saved Sessions에 설정을 저장해두고 사용하면 된다.

 

Open을 누르면

 

 

정상적으로 접속된 것을 볼 수 있다.

 

처음 접속하면 업데이트가 필요하다는 메세지가 뜬다.

sudo yum update 명령어를 통해 업데이트하자.

 

또 자바 버전은 1.7이 기본 설정인듯 하다.

1.8이 필요한 경우 업데이트를 하자

 

설치 가능 버전 확인
yum list java*jdk-devel

설치
sudo yum java-1.8.0-openjdk-devel.x86_64

자바 버전 변경
sudo alternatives --config java

 

 

 

 

'Server' 카테고리의 다른 글

서버알못의 스프링부트 프로젝트 만들기  (0) 2020.06.22
서버알못의 AWS 설정2 - RDS  (0) 2020.06.18

+ Recent posts