HTTPS 기반 내부 APT 저장소에 자체 서명 SSL 인증서 사용


10

일부 개인 패키지와 함께 내부 용으로 데비안 저장소 (실제로 우분투)를 설정했으며 이제는 웹을 통해 특정 서버에서 사용할 수있게하려고합니다. apt-get / aptitude를 사용하여 HTTPS를 사용하여 연결하고 싶습니다. 돈을 쓰고 싶지 않기 때문에 자체 서명 인증서를 사용하고 있습니다.

apt-get이 자체 루트 CA 인증서를 사용하여 호스트를 확인하도록 가리키는 방법에 대한 apt.conf 매뉴얼 페이지를 따라 보았지만 작동하지 않는 것 같습니다.

내 apt.conf 파일은 다음과 같습니다.

#Acquire::https::repo.mydomain.com::Verify-Peer "false";
Acquire::https::repo.mydomain.com::CaInfo      "/etc/apt/certs/my-cacert.pem";
Acquire::https::repo.mydomain.com::SslCert     "/etc/apt/certs/my-cert.pem";
Acquire::https::repo.mydomain.com::SslKey      "/etc/apt/certs/my-key.pem";

또한 클라이언트 인증서를 사용하지만 Verify-Peer를 "false"(위에 설명)로 설정하면 모든 것이 작동하기 때문에 문제가되지 않습니다.

동일한 CA 인증서를 사용하면 클라이언트 인증서와 키가 curl에서 잘 작동합니다.

적절한 디버깅 (Debug :: Acquire :: https "true")을 활성화했지만 정보가 거의 없습니다.

진행하는 방법에 대한 제안?

답변:


5

클라이언트 인증을 사용하지 않고 HTTPS 만 사용하지만 다음을 사용하여 작동하도록했습니다.

Acquire::https {
        Verify-Peer "false";
        Verify-Host "false";
}

이 파일을 아래에 넣었습니다 /etc/apt/apt.conf.d.


1
정확히 내가 원하지 않는 것입니다. 자체 CA 인증서를 사용하여 서버를 확인하고 싶습니다. 확인 기능이 작동하지 않지만 장기적으로 수행하고 싶지 않습니다.
shevron

5

최근에 비슷한 문제가 발생했습니다. SslForceVersion옵션 을 추가하여 해결했습니다 .

내 설정은 다음과 같습니다

Acquire::https::test.com {
    Verify-Peer "true";
    Verify-Host "true";

    CaInfo "/tmp/ca.crt";

    SslCert "/tmp/client.crt";
    SslKey  "/tmp/client.key";
    SslForceVersion "SSLv3";
};

2
이것을 조심하십시오. 웹 사이트는 다양한 보안상의 이유로 SSLv3를 비활성화하기 시작했습니다. 미래에는 TLSv1 이상 만 작동하고 나중에 TLSv1.2 이상 만
Michael Hampton

3

에서 askubuntu , 나는 하나의 호스트에 대한 옵션을 제한 다소 간단한이 솔루션의 버전 하나를 발견했다.

Acquire::https::mirror.ufs.ac.za::Verify-Peer "false";

이것은 나를 위해 일했습니다.

그러나 여기서 질문자는 인증을 유지하려고했습니다. 위의 라인을 따라 몇 가지 시도했지만 작동하지 못했습니다. 반면, 내 저장소에 서명하고 서명 키를 설치 했으므로 SSL 인증은 보안에 중요하지 않습니다.


다시, 내가 원하는 것이 아니라 피어 검증 필요합니다. 즉, 개인적으로 작업 설정이 있습니다 (Stunnel에 대한 해결 방법 참조). 이것은 여전히 ​​다른 사람들을 도울 수 있습니다.
shevron

3

ca 인증서를 설치하여 다른 방법으로 해결했습니다.

  1. *.crt파일을`/ usr / local / share / ca-certificates /에 복사하십시오
  2. 운영 sudo update-ca-certificates

이 솔루션은 최소한 우분투 14.04에서 작동합니다.


1
SSL 차단 / 암호 해독을 수행하는 프록시에서도 작동합니다. 단순히 / etc / ssl / certs에 인증서를 추가해도됩니다. 감사합니다!
Jordan

1
본인이 설치 한 인증서가 방화벽의 자체 서명 인증서이므로 작동하지 않습니다. 다른 인증서가 없습니다.
Paul

1

잘하면 이것이 다른 사람들을 도울 것입니다-나는 이것을 직접 해결할 수 없었습니다.

해결 방법으로, 이제는 stunnel4를 사용하여 HTTPS 저장소에 대한 터널을 작성하고 있습니다. 자체 서명 인증서 및 클라이언트 인증서 stunnel4와 매우 잘 작동합니다.

localhost : 8888에서 들어오는 연결을 수신하고 내 리포지토리 (repo.mydomain.com:443)로 보내도록 stunnel을 설정했습니다. http : // localhost : 8888 / 에서 내 저장소를 찾도록 설정했습니다 .

불필요한 해킹처럼 보이지만 지금까지는 잘 작동했습니다.


-1

GnuTLS 또는 apt는 버그가있는 것 같습니다. 내 apt sources.list의 호스트 이름이 내 저장소 웹 서버의 Apache ServerName과 일치하지 않으면 TLSv1을 사용하여 다음 오류가 발생합니다.

W : https : //repo.example/debian/dists/unstable/non-free/binary-amd64/Packages 를 가져 오지 못했습니다 : gnutls_handshake () 실패 : TLS 경고 경고가 수신되었습니다.

SSLv3을 사용하면 모든 것이 잘 작동합니다.

참고 : 이것은 SSL 인증서와 관련이 없습니다. 유효하지 않은 인증서는 다음과 같은 오류가 발생합니다.

Err https : //repo1.example 불안정한 / 무료 i386 패키지 SSL : 인증서 주체 이름 (repo.example)이 대상 호스트 이름 'repo1.example'과 일치하지 않습니다


실제로 이것은 정확합니다-Apache는 SNI를 지원하며 클라이언트로부터 수신 한 호스트 이름이 서버의 구성된 호스트 이름과 일치하지 않을 때 경고합니다. apt가 경고 세부 정보를 인쇄하면 좋을지 모르지만 올바른 일을하고 있습니다. 요즘 SSLv3로 넘어가는 것은 현명하지 못하며 실제로 사용해야하는 기능을 사용하지 않기 때문에 "작동"합니다.
djmitche
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.