LabHub
시작하기
배우기 러닝패스 코스

폐쇄망 미러와 사설 CA

RHEL: HTTPS 사내 저장소와 update-ca-trust

LabHub 에서 이어서 보기

목표

RHEL 계열에서 사내 dnf 저장소를 HTTPS 로 세우고, 사설 CA 를 시스템 신뢰에 넣어 설치한다. 신뢰의 범위를 저장소 하나로 좁히는 sslcacert 도 쓴다.

왜 중요한가

사내 저장소를 HTTPS 로 바꾸면 dnf 가 인증서 검증에서 멈추고, 가장 흔한 대응은 sslverify=0 이다. 저장소 메타데이터는 무엇을 설치할지 정하는 문서라 출처 확인을 끄면 안 된다. 시스템 전체 신뢰(update-ca-trust)와 저장소별 신뢰(sslcacert)를 골라 쓸 줄 알면 땜질 없이 해결된다. 이 파드는 바깥에 닿지 않는다(DNS 만). 패키지는 이미지 안의 /opt/localrepo 에서 가져온다.

단계

  1. /opt/localrepo 의 tree rpm 을 /srv/rpmrepo 에 복사하고 createrepo_c 로 저장소를 만든다.
  2. /root/pki 에 루트(ca.crt·ca.key, CN Airgap Internal Root CA)와 repo.airgap.internal 인증서(repo.crt·repo.key, SAN)를 만들고 /etc/hosts 에 이름을 더한다.
  3. /root/pki/serve.py/srv/rpmrepohttps://repo.airgap.internal:8443/ 에 띄운다.
  4. /etc/yum.repos.d/airgap.repo 에 저장소 airgap 을 적는다(서명 검사 켬, 배포판 키 /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9).
  5. 다른 저장소를 끄고 airgap 만으로 dnf makecache 를 돌려 실패하는 출력을 /root/rhel/tls-fail.txt 에 저장한다.
  6. 루트를 시스템 신뢰에 airgap-root.crt 로 넣고 추출을 다시 한다.
  7. airgap 저장소만으로 tree 를 설치한다.
  8. 협력사 CA(/root/pki/team-ca.crt, CN Partner Team CA)로 team.airgap.internal 인증서를 발급해 9443 에 같은 저장소를 띄우고, /etc/yum.repos.d/airgap-team.reposslcacert그 저장소만 이 CA 를 믿게 한다. 협력사 CA 는 시스템 신뢰에 넣지 않는다.

참고

createrepo_c 로 사내 저장소 만들기

/opt/localrepo 의 tree rpm 을 /srv/rpmrepo 에 복사하고 createrepo_c 로 저장소를 만든다.

저장소는 rpm 파일과 그것을 설명하는 repodata 디렉터리입니다. createrepo_c 에 디렉터리를 주면 repomd.xml 과 목록 파일들을 만듭니다.

사설 CA 와 저장소 인증서

/root/pki 에 루트(ca.crt·ca.key)와 repo.airgap.internal 인증서(repo.crt·repo.key, SAN)를 만들고 /etc/hosts 에 이름을 더한다.

루트는 자기 서명에 CA:TRUE, 서버 인증서는 루트로 서명하면서 SAN 을 확장 파일로 줍니다. 사설 CA 모듈과 같은 절차입니다.

HTTPS 로 저장소 내주기

/root/pki/serve.py/srv/rpmrepohttps://repo.airgap.internal:8443/ 에 띄운다.

파이썬 표준 라이브러리의 http.server 를 ssl 컨텍스트로 감쌉니다. 이 이미지의 파이썬은 3.9 입니다. 백그라운드로 띄우고 --cacert 를 준 curl 로 repomd.xml 을 받아 보세요.

.repo 파일 쓰기

/etc/yum.repos.d/airgap.repo 에 저장소 airgap 을 적는다(서명 검사 켬, 배포판 키 지정).

섹션 이름이 저장소 id 입니다. baseurl 은 repodata 가 있는 디렉터리의 주소이고, 서명 검사와 공개 키 파일 경로를 함께 적습니다. 인증서 검증을 끄는 줄은 쓰지 않습니다.

인증서 검증 실패 기록

다른 저장소를 끄고 airgap 만으로 dnf makecache 를 돌려 실패하는 출력을 /root/rhel/tls-fail.txt 에 저장한다.

--disablerepo 와 --enablerepo 를 함께 쓰면 저장소 하나만 볼 수 있습니다. 출력 전체(표준 오류 포함)를 저장하세요.

시스템 신뢰에 루트 넣기

루트를 시스템 신뢰에 airgap-root.crt 로 넣고 추출을 다시 한다.

RHEL 계열은 anchors 디렉터리에 두고 추출 명령을 돌립니다. trust list 로 레이블과 신뢰 종류를 확인하세요.

사내 저장소에서 설치

airgap 저장소만으로 tree 를 설치한다.

저장소 하나만 켠 채 설치하면 다른 곳에서 올 수가 없습니다. 설치 뒤 dnf info --installed 로 어느 저장소에서 왔는지 보세요.

저장소 하나만 다른 CA 로

협력사 CA(/root/pki/team-ca.crt, CN Partner Team CA)로 team.airgap.internal 인증서를 발급해 9443 에 같은 저장소를 띄우고, /etc/yum.repos.d/airgap-team.repo 의 sslcacert 로 그 저장소만 믿게 한다.

협력사 CA 는 anchors 에 넣지 않습니다. .repo 에는 저장소별로 CA 파일을 지정하는 옵션이 있습니다. 확인은 그 저장소만 켠 makecache 로, 그리고 시스템 curl 이 여전히 거절하는지로 하세요.