사설 CA 로 서명한 내부 저장소나 TLS 를 가로채는 프록시 뒤에서 dnf 가 다음처럼 실패한다.
Curl error (60): SSL peer certificate or SSH remote key was not OK
검증을 끄는 것은 마지막 수단이다. 원인은 대부분 클라이언트가 서명 CA 를 모른다는 것뿐이므로, CA 인증서를 시스템 신뢰 저장소에 넣으면 끝난다.
sudo cp internal-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract
저장소 하나에만 별도 CA 를 쓰게 하려면 그 .repo 파일에 지정한다.
[internal]
name=Internal Repo
baseurl=https://repo.example.com/rocky/9/BaseOS/
gpgcheck=1
sslcacert=/etc/pki/ca-trust/source/anchors/internal-ca.crt
클라이언트 인증서를 요구하는 저장소라면 sslclientcert 와 sslclientkey 를 함께 적는다.
내부망 테스트처럼 위험을 감수할 수 있는 자리에서만 쓴다.
한 번만 끄려면 실행할 때 옵션으로 준다.
dnf install -y <패키지> --setopt=sslverify=false
특정 저장소에 대해서만 끄려면 저장소 이름을 앞에 붙인다.
dnf --setopt=internal.sslverify=false install -y <패키지>
저장소 파일에 영구히 적는 형태는 다음과 같다.
[internal]
name=Internal Repo
baseurl=https://repo.example.com/rocky/9/BaseOS/
sslverify=false
/etc/dnf/dnf.conf 의 [main] 에 넣으면 모든 저장소에 적용된다. 한 저장소 때문에 전체 검증을 끄게 되므로 권하지 않는다.
sslverify=false 는 전송 구간의 중간자 공격을 막지 못하게 만든다. 다만 gpgcheck=1 로 패키지 서명을 검증하고 있다면 변조된 패키지가 설치되는 것은 여전히 막힌다. 그러므로 SSL 검증을 끄더라도 gpgcheck 는 절대 함께 끄지 않는다.
yum 을 쓰는 RHEL 7 계열도 같은 키 이름(sslverify · sslcacert) 을 쓴다.