[PEM] 
PEM 파일은 Privacy Enhanced Mail 약어

PEM은 보안 웹 사이트를 인증하는데 사용되는 인증서를 Base64 인코딩 된 파일
각자의 공개키, 개인키 세트를 키페어(key pair) 라고 함

통 공개키의 경우 .pub 개인키의 경우 .pem 의 파일 형식을 따름
AWS를 다루다보면 ssh 접속을 위해 내 컴퓨터에 pem 인증서를 관리하게 되는데 그게 바로 개인키

[PFX]
PFX 파일은 Personal Information Exchange 약어

PFX 파일은 바이너리 형태로 인증서와 개인 키를 하나의 파일에 저장하며 서버 인증서, 관련 중간 인증서, 그리고 개인 키를 포함할 수 있음
PFX 파일은 강력한 암호화를 사용하여 저장된 모든 내용을 보호하고 파일에 접근하기 위해서는 비밀번호가 필요함

결론적으로, 
PEM은 텍스트 기반, 다중 인증서/키 저장 가능, 광범위한 호환성의 특징을 가지고
PFX은 바이너리 기반, 인증서와 개인 키를 한 파일에 결합, 보안이 강화된 포맷, 주로 Windows 환경에서 사용한다는 특징을 가짐

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 {
    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"""
                                    )
                                ]
                            )
                        ]
                    )
        }
    }
        }
    }
}

+ Recent posts