[PEM]
PEM 파일은 Privacy Enhanced Mail 약어
PEM은 보안 웹 사이트를 인증하는데 사용되는 인증서를 Base64 인코딩 된 파일
각자의 공개키, 개인키 세트를 키페어(key pair) 라고 함
통 공개키의 경우 .pub 개인키의 경우 .pem 의 파일 형식을 따름
AWS를 다루다보면 ssh 접속을 위해 내 컴퓨터에 pem 인증서를 관리하게 되는데 그게 바로 개인키
[PFX]
PFX 파일은 Personal Information Exchange 약어
PFX 파일은 바이너리 형태로 인증서와 개인 키를 하나의 파일에 저장하며 서버 인증서, 관련 중간 인증서, 그리고 개인 키를 포함할 수 있음
PFX 파일은 강력한 암호화를 사용하여 저장된 모든 내용을 보호하고 파일에 접근하기 위해서는 비밀번호가 필요함
결론적으로,
PEM은 텍스트 기반, 다중 인증서/키 저장 가능, 광범위한 호환성의 특징을 가지고
PFX은 바이너리 기반, 인증서와 개인 키를 한 파일에 결합, 보안이 강화된 포맷, 주로 Windows 환경에서 사용한다는 특징을 가짐
분류 전체보기
- PEM 과 PFX 차이 2025.05.12
- JWT (Json Web Token) 2025.05.12
- pipeline 예제 2025.02.16
- ssh 설치 2025.02.10
- ufw 명령어 2025.02.10
- apt 명령어 2025.02.10
- Mariadb 우분투에 설치 2025.02.10
- Redis 설치 2025.02.10
- Docker 명령어 2025.02.10
- Docker 설치 2025.02.10
PEM 과 PFX 차이
JWT (Json Web Token)
1. HMAC 계열 (대칭 키 알고리즘)
공통 키(secret key) 하나로 서명 및 검증
간단하고 빠르지만, 키가 노출되면 보안에 치명적
HS256 HMAC + SHA-256
HS384 HMAC + SHA-384
HS512 HMAC + SHA-512
2. RSA 계열 (비대칭 키 알고리즘)
공개키/개인키 쌍 사용 (서명은 개인키, 검증은 공개키)
보안성이 뛰어나지만 속도는 느림
RS256 RSA + SHA-256
RS384 RSA + SHA-384
RS512 RSA + SHA-512
추천 용도: 공개 API, 제3자 인증 시스템 (예: OAuth)
3. ECDSA 계열 (비대칭, 타원곡선 알고리즘)
RSA보다 더 짧은 키 길이로 같은 수준의 보안 제공
모바일/임베디드 등 자원 제약 환경에 적합
알고리즘 설명
ES256 ECDSA + SHA-256
ES384 ECDSA + SHA-384
ES512 ECDSA + SHA-512
추천 용도: 경량 보안 시스템, IoT 등
pipeline 예제
pipeline {
agent any
environment {
IMAGE_NAME = "test-api:lts"
LOCAL_NAME = "depoly-server-root"
REMOTE_NAME = "web-server-root"
SOURCE_FILES = "*"
REMOTE_DIRECTORY = "/test-api"
}
stages {
stage('Git Clone') {
steps {
echo 'echo::Git Clone'
git url: 'https://github.com/jaehun0210/test-api.git', branch: 'main', credentialsId: 'github_access_token_jaehun0210'
}
}
stage('Docker Build Image') {
steps {
echo 'echo::Docker Build Image'
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${LOCAL_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand:
"""
cd /jenkins/workspace/test-api-2 && pwd && docker build -t ${IMAGE_NAME} . && docker save ${IMAGE_NAME} > ${IMAGE_NAME}.tar
"""
)
]
)
]
)
}
}
}
stage('Docker Depoly Image') {
steps {
echo 'echo::Docker Depoly Image'
script {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${REMOTE_NAME}",
verbose: true,
transfers: [
sshTransfer(
execCommand: """pwd && docker load -i ${IMAGE_NAME}.tar && docker compose stop && docker compose up -d --build""", // 원격 명령 (비워둘 수 있음)
execTimeout: 120000, // 명령 실행 제한 시간 (밀리초)
flatten: false, // true로 설정하면 원격 경로에서 파일이 복사됩니다.
makeEmptyDirs: false, // true로 설정하면 원격 디렉토리에 빈 디렉토리가 생성됩니다.
noDefaultExcludes: false,
patternSeparator: '[, ]+',
remoteDirectory: "/",
remoteDirectorySDF: false,
removePrefix: '', // 원본 파일 경로에서 제거할 접두사
sourceFiles: """${IMAGE_NAME}.tar, docker-compose.yml"""
)
]
)
]
)
}
}
}
}
}
ssh 설치
[apt-get 업데이트]
sudo apt-get update
[apt-get 업데이트]
sudo apt-get upgrade
[apt 업데이트]
sudo apt update
[apt 업데이트]
sudo apt upgrade
[apt 설치]
sudo apt-get install openssh-server
[ssh 시작]
sudo systemctl start ssh
[시스템등록 후 자동시작]
sudo systemctl enable ssh
ufw 명령어
[활성화]
sudo ufw enable
[비활성화]
sudo ufw disable
[상태조회]
sudo ufw status verbose
[ssh 허용]
sudo ufw allow 22/tcp, sudo ufw allow 22/udp
[ssh 차단]
sudo ufw deny 22/tcp, sudo ufw deny 22/udp
[ssh 삭제]
sudo ufw delete deny ssh/tcp, sudo ufw delete deny ssh/udp
[IP 허용]
sudo ufw allow from 192.168.0.1
sudo ufw allow from 192.168.0.0/24
[IP, PORT 허용]
sudo ufw allow from 192.168.0.1 to any port 22
sudo ufw allow from 192.168.0.0/24 to any port 22
apt 명령어
[패키지 설치]
apt install
[패키지 삭제]
apt remove
[레파지토리 인덱스 갱신]
apt update
[패키지 업그레이드]
apt upgrade
[패키지 검색]
apt search
[패키지 상세 정보 출력]
apt show
[패키지 리스트]
apt list
Mariadb 우분투에 설치
-APT 업데이트 업그레이드
sudo apt update
sudo apt upgrade
-Mariadb 설치
sudo apt install mariadb-server
sudo apt install mariadb-client
-Mariadb 설정
sudo mysql_secure_installation
-Mariadb 활성화
sudo systemctl enable mariadb
-Mariadb 시작
sudo systemctl start mariadb
- mysql DB 접속
sudo mysql -u root -p
use mysql;
- DB 만들기
CREATE DATABASE 데이터베이스명;
- DB 확인하기
SHOW DATABASES;
- DB 삭제하기
DROP DATABASE 데이터베이스명;
-사용자 생성
로컬접속용
CREATE USER '사용자명'@'localhost' IDENTIFIED BY '비밀번호';
외부접속용
CREATE USER '사용자명'@'%' IDENTIFIED BY '비밀번호';
-사용자 확인
SELECT host, user, password, plugin FROM mysql.user;
-사용자 삭제
로컬접속용
drop user '사용자명'@'localhost';
외부접속용
drop user '사용자명'@'%';
-권한 부여
로컬접속용
grant all privileges on 데이터베이스명.* to '사용자명'@'localhost' identified by '비번' ;
grant all privileges on *.* to 'root'@'localhost' identified by 'root';
외부접속용
grant all privileges on 데이터베이스명.* to '사용자명'@'%' identified by '비번' ;
grant all privileges on *.* to 'root'@'%' identified by 'root';
-갱신
flush privileges;
// 비밀번호 변경
update mysql.user set password=password('root') where user='root';
Redis 설치
sudo apt --install list | grep redis : 설치 확인 명령어
sudo apt install redis : 설치 명령어
sudo redis-server: 실행 명령어
sudo redis-server --port 6380 : 실행 명령어 (포트지정)
redis-cli -p 6379, 접속 후 ping 입력 후 pong 응답받으면 성공
Docker 명령어
docker ps : 현재 실행 중인 컨테이너 조회
docker ps -a : 모든 컨테이너 조회
docker build -t [생성할 이름] . : 새 이미지 생성
docker run -p 호스트 포트:컨테이너 포트 [이미지 이름] : 컨테이너 실행
docker run -d -p 호스트 포트:컨테이너 포트 [이미지 이름] : 백그라운드에서 컨테이너 실행
docker kill [이미지 이름] : 컨테이너 (Nginx 서버 종료)
docker container ls -a : 컨테이너 목록 조회
docker container rm [컨테이너ID] : 컨테이너 제거
docker images : 이미지 생성 및 목록 확인
docker rmi [이미지ID] : 이미지 삭제
docker rmi -f [이미지ID] : 이미지 강제 삭제
Docker 설치
1. 우분투 시스템 패키지 업데이트
sudo apt update
2. 필요한 패키지 설치
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
3. Docker의 공식 GPG키를 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Docker의 공식 apt 저장소를 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5. 시스템 패키지 업데이트
sudo apt-get update
6. Docker 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io
7. Docker가 설치 확인
7-1. 도커 실행상태 확인
sudo systemctl status docker
7-2. 도커 실행
sudo docker run hello-world