728x90

표준 입력 (stdin: standard input)

표준 출력 (stdout: standard output)

표준 에러 (stderr: standard error)

 

위 3가지를 표준 스트림(standard stream)이라고 하며 운영 체제에서 기본적으로 제공하는 추상화된 입출력 장치를 의미합니다.

 

tty란 전신타자기를 의미하는 (TeleTYpewriter의 약자로 TelePrinter 라고도 합니다.)

출처: wikipedia

tty 는 현재 표준 입력과 연결된 터미널이 무엇인지 출력해 주는 명령어이기도 합니다.

pty 란

pty는 Pseudo terminal 의 의미로 리눅스나 유닉스를 연결된 콘솔에서만 사용한다면 동시에 한 명밖에 사용할수 없으므로 SSH 나 Telnet, X-Windows Terminal 등 다양한 방식으로 사용하기 위한 가상 tty 입니다.

리눅스에서 pty 디바이스는 /dev/pts 아래에 있습니다.

 

 

 

 

728x90

'네트워크' 카테고리의 다른 글

[쉘 스크립트] 특수 문자  (0) 2022.02.23
프록시  (0) 2022.02.22
HTTPS 통신에대한 생각정리  (0) 2022.02.21
SSL / TLS protocol and Cipher suite  (0) 2022.02.18
728x90

# 주석 [ # ]

 

#으로 시작하는 줄은 주석입니다.

 

# 명령어 구분자 [ ; ]

 

두 개 이상의 명령어를 한 줄에서 같이 쓸 수 있게 해줍니다.

 

# 점 (dot) 명령어 [ . ]

 

source 명령어와 동일합니다.

 

"점"(dot)이 정규 표현식(regular expression) 으로 해석될때는, 한 개의 문자와 일치됩니다.

 

# 명령어 치환 (command substitution) [ ` ] backtics(백틱)

 

`명령어` 라고 하면 명령어의 결과를 변수값으로 설정할 수가 있습니다. 다른 말로 backticks나 역쿼우트(backquote)라고도 합니다.

 

# 널 명령어(null command) 쉘의 "NOP"(no op, 아무 동작도 않함)에 해당합니다. [ : ] 

 

쉘 내장 명령인 true의 동의어라고도 볼 수 있습니다. 주의할 점은 :은 bash 내장 명령이기 때문에 종료 상태는 0이라는 것 입니다.

 

예제 )

if condition

then : # 아무것도 안하고 계속 진행

else

 어떤 작업

fi


# 배열 초기화 [ Array=(element1 element2 element3) ]

 

# 명령어 그룹 [ (a=hello; echo $a) ]

 

a=123

( a=321; )

 

echo "a = $a" # a = 123

# 소괄호 안의 "a"는 지역변수 처럼 동작합니다.

 

# 중괄호 확장 [ { } ]

 

grep Linux file*.{txt.html*}

 

# "fileA.txt" , "file2.txt", "fileR.html", "file-87.html" 등등의 파일에서

# "Linux"가 들어 있는 것을 모두 찾음

 

빈 칸은 쿼우트(quote)나 이스케이프(escape)되지 않고 중괄호에서 쓰일 수 없습니다.

echo {file1,file2}\ :{\ A," B",' C'}

 

# file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

 

 

예제 1) 코드 블럭과 I/O 재지향

 

#!/bin/bash

# /home/rsccmw/logtest/file.txt 읽기

 

File=/home/rsccmw/logtest/file.txt

 

{

read line1

read line2

} < $File

 

echo "$File.txt 파일의 첫번째 줄:"

echo "$line1"

echo

echo "$File 파일의 두번째 줄:"

echo "$line2"

 

exit 0

 


#!/bin/bash
# str-test.sh: Testing null strings and unquoted strings,
# but not strings and sealing wax, not to mention cabbages and kings...
# (옮긴이: ??? :)

# if [ ... ]  를 쓸께요.


#  문자열이 초기화 안 됐다면 정해진 값을 갖지 않는데
#+ 이런 상태를 "널"(null)이라고 부릅니다(0 과는 다릅니다).

if [ -n $string1 ]    # $string1 은 선언도 초기화도 안 됐습니다.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "String \"string1\" 은 널입니다."
fi  
# 틀렸죠.
# 초기화가 안 됐는데도 널이 아닌 것으로 나오네요.


echo


# 다시 해보죠.

if [ -n "$string1" ]  # 이번엔 $string1 을 쿼우트 시켜서 해보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi      # 테스트문에서는 문자열을 꼭 쿼우트 시키세요!


echo


if [ $string1 ]       # 이번엔 달랑 $string1 만 두고 해보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 이건 잘 되네요.
# 문자열을 쿼우트 시키는 게("$string1") 좋은 습관이긴 하지만
# [ ] 테스트 연산자는 혼자 쓰이면 문자열이 널인지 아닌지를 잘 알아냅니다.
#
# Stephane Chazelas 가 지적한 것처럼,
#    if [ $string 1 ]   는 인자가 "]" 하나고,
#    if [ "$string 1" ]  는 인자가 빈 "$string1"과 "]", 두 개입니다.



echo



string1=initialized

if [ $string1 ]       # , $string1 을 다시 혼자 써보죠.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 역시 결과가 맞게 잘 나오죠.
# 마찬가지로 이유로 쿼우트 해주는 것이("$string1") 좋습니다. 왜냐하면...


string1="a = b"

if [ $string1 ]       # $string1 을 또 혼자 씁니다.
then
  echo "\"string1\" 은 널이 아닙니다."
else  
  echo "\"string1\" 은 널입니다."
fi  
# 이제 "$string1"을 쿼우트 해 주지 않으면 틀린 결과가 나옵니다!

exit 0

728x90

'네트워크' 카테고리의 다른 글

표준 입력,출력,에러 / 파일 디스크립터  (0) 2022.02.25
프록시  (0) 2022.02.22
HTTPS 통신에대한 생각정리  (0) 2022.02.21
SSL / TLS protocol and Cipher suite  (0) 2022.02.18
728x90

# Proxy

 프록시서버(Proxy)는 클라이언트가 자신을 통해 다른네트워크 서비스(Node.js, Spring, WAS(Tomcat))에 간접적으로 접근할 수 있게 하는 컴퓨터 시스템이나 응용프로그램을 일컫는다.

 

 중계자(관리자)로서 로드밸런싱, Reverse Proxy, 캐싱 등의 작업을 수행한다. 

# Reverse Proxy

 클라이언트에게서 서버의 정보를 감추는 작업

 (서버 내부적으로 파일들이 어느 폴더에 있는지, 어느 서비스가 어느 포트에서 작업중인지 등)

 

 클라이언트와 WAS 사이의 중계자로서 둘 사이의 통신을 담당한다.

 리버스 프록시서버를 통해 응답을 내려주기 때문에, 실제 서버의 정보를 알 수 없게 된다.

 또한 WAS는 서버확장에 있어 자유로워지는 이점이 생긴다.

 

 클라이언트가 요청하는 End Point 는 프록시서버의 도메인이다.

 

[Reverse Proxy의 캐싱] - 서버의 성능향상에 초점

클라이언트들이 자주 요청할 리소스들을 리버스 프록시에 캐싱하여 요청이 들어오면 바로 건네 줌

# Forward Proxy

 서버에게서 클라이언트를 감추는 작업

 요청받는 서버는 포워드 프록시 서버를 통해서 요청을 받기에 클라이언트의 정보를 알 수 없게 된다.

 

 [Forward Proxy의 캐싱] - 클라이언트의 성능향상에 초점

 빈번히 사용될 리소스들을 포워드 프록시에 캐싱하여 서버까지 요청할 필요 없이 프록시에서 받아오게 함

728x90
728x90

HTTPS 는 (HyperText Transfer Protocol over Secure Socket Layer) 로써

HTTP의 보안이 강화된 버전이다.

 

HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니에션즈 코퍼레이션이 개발했고, 전자상거래에서 널리쓰인다.

 

HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS프로토콜을 통해 세션 데이터를 암호화 한다.

 

( HTTP의 기본포트는 80 HTTPS의 기본포트는 443이다. )

ㄴ 최근 스프링부트 프로젝트를 개발진행하면서 HTTPS를 적용시킬려는과정에서 HTTP의 포트를 8080 , HTTPS의 포트가 8443 인 상태에서 JAR파일을 개인서버인 라즈베리파이에 배포한적이있는데 기본포트가아닌 다른 포트를 사용할 경우 URL에 포트를 명시해주어야만 한다. 

 

즉, 80포트나 443포트를 사용하는게 아니라면 www.examplce.com:8443/$request_uri 처럼 포트번호를 url 뒤에 명시해줘야하는것이다.

 

HTTP는 TCP를 기반으로 하는 프로토콜이고 SSL과 TLS(SSL 강화버전) 이라는 프로토콜을 사용하여 데이터를 암호화한다.

 

암호화 알고리즘(Cipher[암호] Suite[모음])

 

1. SSL Handshake는 암호화 알고리즘 결정과 대칭키(비밀키) 전달을 위해 사용한다.

2. SSL Handshake.의 첫단계, Client가 'Client Hello'로 협상을 시작할 때 자신이 사용 가능한 'Cipher Suite'를 쭉 나열한다.

3. Server가 'Server Hello'를 통해 자신이 고른 'Cipher Suite'를 전달한다.

 

출처: https://aws-hyoh.tistory.com/47

SSL HandShake를 통해서 결국 이루고자 하는것은 (대칭키(비밀키)를 서버에게 전달하기위한 방법(알고리즘) 선택을 의미.

 

인증서 검증은 인증기관인 CA가 한다.

 

CA는 2계층 혹은 3계층의 구조를 형태를 뛰고있음(보안때문에)

 

1. Root CA(최상위 기관)

2. Intermediate CA (중간기관)

 

SSL 인증서 생성하는 순서

1. 서버의 각종정보  공개키를 Intermediate CA에 제출

2. 줄여서 ICA라고하겠음 ICA는 자신의 개인키로 암호화

3. ICA -> RCA(ROOT CA)에 자신의 공개키와 아까 정보들을 제출

4. RCA가 받은 정보들을 다시 암호화(서명) 

 

브라우저는 (주요인증기관의 리스트와 공개키를 이미 보유중)

 

서버의 개인키를 해커에게 탈취당하면 (해독된 대칭키)를 통해 그동안 저장해온 모든 패킷을 복호화할수있다고함)

현재의 데이터 뿐만 아니라 과거의 데이터 모두를 탈취당한다.

(개인키 관리를 잘해야함)

 

개인 스프링프로젝트에 HTTPS를 구현하게되면서 관련 지식을 공부하게되었다..

 

너무 딮하게는 공부하지않았지만 대충 돌아가는 흐름에대한 이해가 되었다.

 

 

728x90

'네트워크' 카테고리의 다른 글

표준 입력,출력,에러 / 파일 디스크립터  (0) 2022.02.25
[쉘 스크립트] 특수 문자  (0) 2022.02.23
프록시  (0) 2022.02.22
SSL / TLS protocol and Cipher suite  (0) 2022.02.18
728x90

SSL / TLS (Secure Socket Layer, Transport Layer Security)

1. 단말과 단말간의 암호화 통신을 위한 프로토콜

 

SSL Handshake

1. Client Hello - Client가 서버에게 자신이 사용가능한 Random byte(대칭키 생성에 사용), Session ID, SSL , TLS 버전이 포함된 Cipher suite list를 전달한다.

 

2. Server Hello - Server가 Client가 보낸 Cipher suite list 중 하나를 선택해 전달

 

3. Cleint Key Exchange - 키교환 실시 ( 실제 데이터 암호화에 사용할 키를 전달하며, SSL 인증서에서 추출된 공개키로 암호화 )

 

4. Server certificate - 서버의 인증서를 클라이언트에게 전송

 

5. Server hello done - 서버 전달 종료

 

6. Change cipher Spaces, Finished - 이후 보내는 메세지들은 협상된 암호화 알고리즘에 따라 보낼것을 통보

 

7. Finshed, Change cipher Specs - 클라이언트가 보낸 메시지를 확인한 후, handshake를 종료하고 하나의 대칭키로 통신한다고 통보

 

 

Cipher Suite

1. 암호화 세팅이다.

 

2. (암호화 프로토콜) - 키 교환 방식 - 인증서 검증 - WITH - 암호화 알고리즘(Cipher) - 메시지 인증방식

 

3. (공개키) 키교환 방식

 

4. 인증 방식

1. cleint는 받은 서버의 인증서가 신뢰할 수 있는지 검토 후 공개키를 추출한다.

 

2. 먼저 서명자는 문서의 데이터 일부를 해시 함수를 이용해 해시값을 생성하고 , 이를 개인키로암호화한뒤 문서에 첨부함

 

3. client는 이 인증서를 공개키로 복호화 한 뒤, 개인키로 암호화된 해시 값 역시 공개키로 복호화

 

4. 인증서 내부 데이터를 같은 해시 함수를 이용해 해시 값을 얻어냄

   이 2가지를 비교하여 인증서 검증

 

MAC

 

1. 무결성 확인용 인증방식

 

2. 메시지 데이터 일부를 MAC 알고리즘으로 변환하여 메시지에 첨부한 후 수신자가 똑같은 방식으로 변환 일치 여부 검사

https://aws-hyoh.tistory.com/11

728x90

'네트워크' 카테고리의 다른 글

표준 입력,출력,에러 / 파일 디스크립터  (0) 2022.02.25
[쉘 스크립트] 특수 문자  (0) 2022.02.23
프록시  (0) 2022.02.22
HTTPS 통신에대한 생각정리  (0) 2022.02.21

+ Recent posts