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.