Page tree

이 문서는 JFrog Artifactory에서 서명 키, SSH 키 등의 관리 가이드를 공유하기 위해 작성되었다.


도구명JFrog Artifactory
문서 작성 기준 버전7.84.14
지원 Edition

ENTERPRISE X ENTERPRISE +

목차



개요

Artifactory의 키 관리 기능을 사용하면 아티팩트를 암호화하거나 디지털 서명하는 데 사용되는 키를 한 곳에서 만들고 조직 전체적으로 관리하기에 용이합니다.

키 관리 기능의 이점

이 기능을 사용하면 다음과 같은 Artifactory 보안 설정을 구성할 수 있습니다.

  • Signing Key (서명 키) : 인증을 위해 패키지에 서명하는 데 사용되는 GPG 및 RSA 서명 키와 Alpine Linux 인덱스 파일에 서명하고 확인하는 데 사용되는 RSA 키를 관리합니다.
  • Java KeyStore : 가상 저장소에서 다운로드한 JAR 파일을 자동으로 서명하는 데 사용되는 서명 키를 보관하는 Key Store를 관리합니다.
  • SSH Key : Git LFS 클라이언트나 JFrog CLI에서 JFrog 플랫폼으로 전송된 요청을 인증하기 위해 SSH 키를 구성합니다.

서명 키 관리하기

  • 관리자 메뉴 → Artifactory → Security - Keys Management → + Add Keys

RSA Key 추가

JFrog 플랫폼을 사용하면 여러 쌍의 RSA 서명 키를 관리하여 인증을 위해 Alpine 패키지에 서명할 수 있습니다.

  1. Key를 식별 가능한 이름과 별칭 입력
  2. Private Key 추가
  3. Public Key 추가
  4. Pass Phrase 추가 (선택 사항)

GPG 키 생성

리눅스에서 GPG public key와 private key를 생성하는 방법입니다. 다음 예시 코드는 Ubuntu 22.04 버전을 토대로 작성되었습니다.

# 키 생성 
gpg --gen-key 
# 프롬프트 창에서 userId와 이메일 Passphrase 설정
 
# 시스템의 모든 키 나열 및 Artifactory에서 사용하려는 쌍 선택 
gpg --list-keys --keyid-format=long

# 관련 라이선스를 선택하여 목록-키에서 키-ID 확인 
pub   rsa3072/31864F1B... 2024-08-28 [SC] [expires: 2026-08-28]
uid                 [ultimate] UserID <Email>
sub   rsa3072 2024-08-28 [E] [expires: 2026-08-28]

# 지정된 ID를 가진 개인 키를 파일로 내보내기 
gpg --output {개인 키 파일 이름 및 경로} --armor --export-secret-keys {키-ID / 예시) 31864F1B... } 
 
# 지정된 ID를 가진 공개 키를 파일로 내보내기 
gpg --output {공개 키 파일 이름 및 경로} --armor --export {키-ID / 예시) 31864F1B... }

GPG 키 추가

RSA 키 추가하는 방법과 동일합니다. 새로운 GPG 키를 업로드한 후에는 JFrog Distribution에 사용할 수 있습니다.

키 다운로드 또는 삭제

  • 다운로드 또는 삭제하고자 하는 키의 클릭 → Download / Delete

Vault에 RSA / GPG 키 추가 설정

(작성중)

Java Key Store

Java Key Store : 가상 저장소에서 다운로드한 JAR 파일을 자동으로 서명하는 데 사용되는 서명 키를 보관하는 키 저장소

키 쌍 생성

JAR 파일에 서명하려면 Key Store에 추가할 키 쌍을 우선 생성해야 합니다.

JRE (Java Runtime Environment)에 내장된 Oracle의 keytool 유틸리티로 명령을 실행하여 만들 수 있습니다.
다음은 keytool 로 키 쌍을 생성한 코드의 예시입니다. 

keytool -keystore <keystore 파일명> -keypass <키 패스워드> -storepass <store 패스워드> -alias <store 별칭> \ -genkeypair -dname "cn=<사용자명>, ou=<부서명>, o=<기관명>, S=<도시>, c=<국가>"
# key algorithm을 특정해야 하는 경우 -keyalg rsa 옵션 추가

# KeyStore 내 인증서 목록을 출력하여 생성 확인
$ keytool -list -keystore <keystore 파일명>

# 목록 출력 예시
Enter keystore password: # store 패스워드 입력 
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

mykey, Aug 28, 2024, PrivateKeyEntry,
Certificate fingerprint (SHA-256): F8:1A:47:...

Key Store 및 JAR 서명 키 설정

  1. Key Store 패스워드 생성 또는 기존의 패스워드 수정 업데이트
     - 패스워드를 생성하면 나머지 필드가 활성화됨
  2. Key Store 파일 업로드, 설정했던 Key Store 패스워드 입력
  3. 키 쌍 이름 설정, 설정했던 키의 패스워드 입력, 키 쌍의 별칭 선택
  4. 키 쌍 선택 후 제거 가능

JAR에 서명하기 위한 가상 저장소 설정

Key Store를 설정하고 나면 가상 저장소 (Virtual Repository)에 키 쌍을 구성할 수 있습니다.

  • 관리자 메뉴 → Repositories → Virtual → 저장소 선택 (편집) → Advanced → Key-Pair

  1. Advanced 메뉴 탭
  2. 저장해 둔 키 쌍 선택

SSH 키 관리

JFrog Artifactory는 RSA Public / Private 키를 사용하여 Git LFS 및  JFrog CLI에 대한 SSH 인증을 지원합니다.
이를 통해 SSH를 통해 인증된 Artifactory 서버와 민감한 정보를 교환할 수 있습니다.

SSH 인증의 주요 단계

  1. 서버는 클라이언트에게 자신을 인증
  2. 사용자는 서버에 자신을 인증

SSH 서버 인증 구성

Artifactory에 대한 SSH 키 쌍을 생성합니다. 다음은 리눅스에서 생성한 예시입니다.

ssh-keygen -t rsa -C "server@domain.com"


관리자 메뉴 → Artifactory → Security - Key Management → SSH Keys

  1. SSH Keys 관리 메뉴
  2. SSH Server 설정 : 포트, Base URL 입력
  3. Server key 파일 업로드

사용자 인증 구성

Git LFS 클라이언트나 Artifactory CLI에서 Artifactory에 요청을 보낼 때 인증을 받을 수 있도록 공개 키로 Artifactory를 구성합니다.
Artifactory에 대한 SSH 키 쌍을 ~/.ssh 디렉토리 하위에 생성합니다. 다음은 리눅스에서 생성한 예시입니다.

ssh-keygen -t rsa -C "USER@domain.com"


사용자 프로필에 SSH 공개 키를 등록해야 합니다.

상단 메뉴 바의 오른쪽 사용자 id 드롭다운 메뉴 중 Edit Profile에서 Add New SSH Key

SSH로 Git LFS 인증하기

Artifactory는 SSH를 통해 Git LFS 클라이언트 인증을 지원합니다. 

  1. Artifactory의 SSH 구성 정보 확인


  2. 사용자 프로필의 SSH 섹션에 SSH 공개 키를 업로드
  3. Git LFS 클라이언트 구성
    1. Artifactory 서버 공개 키로 ~/.ssh/known_hosts/known_hosts 파일을 업데이트
      # 형식
      [<server_custom_base_URL>]:<server_port> <content of the Artifactory server public ssh key>
      
      # 예시
      [myartifactory.company.com]:1339 ssh-rsa AAAAB3Nza...PC0GuTJT9TlaYD user@domain.com

    2. .lfsconfig 다음과 같이 저장소 수준 (글로벌 cross mark )에서 파일을 업데이트
      # 형식
      # USERNAME 필드는 선택이지만, 자체 참조를 위해 추가하는 것이 좋음
      ssh://$USERNAME@$HOST:$PORT/artifactory/<repoKey>
      
      # 예시
      url = "ssh://john@myartifactory.company.com:1339/artifactory/lfs-local"

SSH 서버 보안 제어

JFrog 플랫폼 관리자 권한이 필요합니다.

이제 Artifactory SSH 서버에서 허용하는 암호, MAC, 서명 및 키 교환 알고리즘을 제어할 수 있습니다.
기본적으로는 비어있거나 null 값이며, 쉼표(,)로 구분된 복수 값을 가질 수 있으며 artifactory.ssh.*.algorithms 가 설정되어 있지 않은 경우에만 적용됩니다.

SSH 설정을 위해 시스템 속성 패턴 포함

다음 상수 값들이 Include Only  알고리즘으로 추가되었습니다.

  • artifactory.ssh.cipher.algorithms=

  • artifactory.ssh.key.exchange.algorithms=

  • artifactory.ssh.mac.algorithms=

  • artifactory.ssh.signature.algorithms=

SSH 설정을 위해 지원되는 알고리즘 유형별 값 (values)

알고리즘 유형

값 (기본적으로 로드됨)

더 이상 사용되지 않음 (이름으로 구성하지 않으면 로드되지 않음)

Cipher Algorithms

  • aes128-ctr

  • aes192-ctr

  • aes256-ctr

  • aes128-gcm@openssh.com

  • aes256-gcm@openssh.com

  • aes128-cbc

  • aes192-cbc

  • aes256-cbc

  • arcfour128

  • arcfour256

  • blowfish-cbc

  • 3des-cbc

Key Exchange Algorithms

  • diffie-hellman-group-exchange-sha256

  • diffie-hellman-group18-sha512

  • diffie-hellman-group17-sha512

  • diffie-hellman-group16-sha512

  • diffie-hellman-group15-sha512

  • diffie-hellman-group14-sha256

  • diffie-hellman-group14-sha1

  • diffie-hellman-group-exchange-sha1

  • diffie-hellman-group1-sha1

Message Authentication Codes (MAC)
Algorithms

  • hmac-sha2-256-etm@openssh.com

  • hmac-sha2-512-etm@openssh.com

  • hmac-sha1-etm@openssh.com

  • hmac-sha2-256

  • hmac-sha2-512

  • hmac-sha1

  • hmac-md5

  • hmac-md5-96

  • hmac-sha1-96

Signature Algorithms

  • ecdsa-sha2-nistp256-cert-v01@openssh.com

  • ecdsa-sha2-nistp384-cert-v01@openssh.com

  • ecdsa-sha2-nistp521-cert-v01@openssh.com

  • rsa-sha2-512-cert-v01@openssh.com

  • rsa-sha2-256-cert-v01@openssh.com

  • ecdsa-sha2-nistp256

  • ecdsa-sha2-nistp384

  • ecdsa-sha2-nistp521

  • sk-ecdsa-sha2-nistp256@openssh.com

  • rsa-sha2-512

  • rsa-sha2-256

  • ssh-rsa

  • ssh-dss

  • ssh-dss-cert-v01@openssh.com

  • ssh-rsa-cert-v01@openssh.com



참조


  • No labels