Sử dụng chứng chỉ SSL tự ký cho kho lưu trữ APT nội bộ dựa trên HTTPS


10

Tôi đã thiết lập một kho lưu trữ Debian (thực tế là Ubuntu) để sử dụng nội bộ với một số gói riêng tư và bây giờ muốn cung cấp nó trên web cho một số máy chủ cụ thể. Tôi muốn apt-get / aptitude kết nối với nó bằng HTTPS và vì tôi không muốn chi bất kỳ khoản tiền nào khi sử dụng chứng chỉ tự ký.

Tôi đã thử theo dõi trang người dùng apt.conf về việc trỏ apt-get để sử dụng chứng chỉ CA gốc của riêng tôi để xác thực máy chủ lưu trữ, nhưng dường như nó không hoạt động.

Tệp apt.conf của tôi trông như thế này:

#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";

Tôi cũng sử dụng chứng chỉ ứng dụng khách, nhưng dường như đó không phải là vấn đề vì khi tôi đặt Confirm-Peer thành "false" (nhận xét ở trên), mọi thứ đều hoạt động.

Sử dụng cùng một chứng chỉ CA, chứng chỉ ứng dụng khách và khóa hoạt động tốt với curl.

Tôi đã bật gỡ lỗi apt (Debug :: Acquire :: https "true") nhưng nó cung cấp rất ít thông tin.

Bất kỳ đề xuất về cách tiến hành?

Câu trả lời:


5

Tôi không sử dụng xác thực ứng dụng khách, chỉ HTTPS, nhưng tôi chỉ làm cho nó hoạt động bằng cách này:

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

Tôi đặt nó trên một tập tin dưới /etc/apt/apt.conf.d.


1
Đó chính xác là những gì tôi không muốn - Tôi thực sự muốn xác minh máy chủ bằng Chứng chỉ CA của riêng tôi. Vô hiệu hóa xác minh hoạt động nhưng tôi không muốn làm điều đó lâu dài.
shevron

5

Gần đây, tôi đã gặp một vấn đề tương tự. Tôi đã giải quyết nó bằng cách thêm SslForceVersiontùy chọn.

Cấu hình của tôi giống như:

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
Hãy cẩn thận với điều này. Các trang web đang bắt đầu vô hiệu hóa SSLv3 vì nhiều lý do bảo mật; trong tương lai chỉ có TLSv1 trở lên sẽ hoạt động và sau này chỉ có TLSv1.2 +
Michael Hampton

3

Trong Askubfox , tôi đã tìm thấy một phiên bản đơn giản hơn của giải pháp này và một phiên bản giới hạn tùy chọn cho một máy chủ duy nhất.

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

Điều này làm việc cho tôi.

Người hỏi ở đây, tuy nhiên, muốn bảo tồn xác thực; Tôi đã thử một vài thứ dọc theo các dòng trên, nhưng cũng không thể làm cho nó hoạt động được. Mặt khác, vì kho lưu trữ của tôi đã được ký và tôi đã cài đặt khóa ký, nên xác thực SSL không quan trọng để bảo mật.


một lần nữa, không phải những gì tôi muốn - tôi làm xác minh cần đồng đẳng. Điều đó nói rằng, cá nhân tôi có một thiết lập làm việc (xem cách giải quyết của tôi với stunnel). Điều này vẫn có thể giúp đỡ người khác.
shevron

3

Tôi đã giải quyết nó theo một cách khác, bằng cách cài đặt chứng chỉ ca.

  1. Sao chép *.crttệp của bạn vào `/ usr / local / share / ca-cert /
  2. chạy sudo update-ca-certificates

Giải pháp này hoạt động với Ubuntu 14.04 ít nhất.


1
Điều này cũng hoạt động xung quanh các proxy thực hiện chặn / giải mã SSL. Đơn giản chỉ cần thêm chứng chỉ vào / etc / ssl / certs thì không. Cảm ơn vì điều này!
Jordan Anderson

1
Nó không hoạt động vì chứng chỉ được cài đặt bởi tôi là chứng chỉ tự ký từ tường lửa của chúng tôi. Tôi không có chứng chỉ khác.
Paul

1

Hy vọng rằng điều này sẽ giúp những người khác - tôi đã không thể giải quyết điều này trực tiếp.

Như một giải pháp thay thế, tôi hiện đang sử dụng stunnel4 để tạo đường hầm đến kho lưu trữ HTTPS của mình. Certs tự ký và chứng chỉ ứng dụng khách Tôi đã làm việc rất tốt với stunnel4.

Tôi đã thiết lập stunnel để nghe trên localhost: 8888 cho các kết nối đến và hướng chúng đến repo của tôi (repo.mydomain.com:443). Tôi đã thiết lập apt để tìm kho lưu trữ của mình tại http: // localhost: 8888 / .

Cho đến nay điều này đã hoạt động tốt, mặc dù nó có vẻ như là một hack không cần thiết.


-1

GnuTLS hoặc apt dường như là lỗi. Nếu tên máy chủ từ apt nguồn.list của tôi không khớp với Tên máy chủ Apache từ máy chủ lưu trữ web của tôi, tôi sẽ gặp lỗi sau khi sử dụng TLSv1:

W: Không thể tìm nạp https: //repo.example/debian/dists/unurdy/non-free/binary-amd64/Packages : gnutls_handshake () không thành công: Đã nhận được cảnh báo cảnh báo TLS.

Sử dụng SSLv3 mọi thứ đều hoạt động tốt.

Lưu ý: Điều này không liên quan gì đến chứng chỉ SSL. Chứng chỉ không hợp lệ sẽ dẫn đến lỗi sau:

Err https: //repo1.example không ổn định / không miễn phí Gói i386 SSL: tên chủ đề chứng chỉ (repo.example) không khớp với tên máy chủ đích 'repo1.example'


Trên thực tế, điều này là chính xác - Apache hỗ trợ SNI và cảnh báo khi tên máy chủ mà nó nhận được từ máy khách không khớp với tên máy chủ được cấu hình của máy chủ. Thật tuyệt nếu apt sẽ in các chi tiết cảnh báo, nhưng nó đang làm đúng. Ngày nay, việc quay trở lại SSLv3 rất không khôn ngoan và chỉ "hoạt động" vì bạn đang vô hiệu hóa các tính năng bạn thực sự nên sử dụng.
djmitche
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.