docker container ssl chứng chỉ


87

Có cách nào thanh lịch để thêm chứng chỉ ssl vào hình ảnh đến từ bộ kéo docker không ?.

Tôi đang tìm một cách đơn giản và dễ tái tạo để thêm tệp vào / etc / ssl / certs và chạy update-ca-certificate. (Điều này sẽ bao gồm hình ảnh ubuntu và debian).

Tôi đang sử dụng docker trên CoreOS và máy coreos tin tưởng các chứng chỉ ssl cần thiết, nhưng các thùng chứa docker rõ ràng chỉ có mặc định.

Tôi đã thử sử dụng docker run --entrypoint=/bin/bashđể thêm chứng chỉ và chạy update-ca-certificates, nhưng điều này dường như sẽ ghi đè vĩnh viễn điểm nhập.

Tôi cũng tự hỏi bây giờ, nó sẽ thanh lịch hơn nếu chỉ gắn /etc/ssl/certsvào vùng chứa từ bản sao máy chủ? Làm điều này sẽ ngầm cho phép các vùng chứa tin cậy những thứ tương tự như máy chủ.

Tôi đang làm việc với một proxy gây phiền nhiễu cho phép mọi thứ :(. Điều này phá vỡ SSL và làm cho các vùng chứa khá lạ để làm việc với.


3
Bạn đã nghĩ đến việc tạo một Dockerfile sẽ sử dụng hình ảnh của bạn, thêm tệp và chạy update-ca-certificate chưa? hay đó không phải là thứ bạn đang tìm kiếm?
Céline Aussourd

Tôi đã làm điều đó cho một số hình ảnh. Đó không phải là một giải pháp tồi. Mặc dù vậy, yêu cầu bạn phải xây dựng trên tất cả các hình ảnh của riêng bạn.
Beau Trepp

Câu trả lời:


75

Gắn các chứng chỉ vào vùng chứa Docker bằng cách sử dụng -v:

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
Điều đó khá tiện lợi. Nếu vùng chứa sử dụng cùng một kiểu ssl_certs, bạn thậm chí không cần dòng update-ca-certificate, máy chủ lưu trữ đã làm được rồi :).
Beau Trepp

2
và nếu chúng tôi đang xây dựng trên đám mây?
Ewoks

26

Tôi đang cố gắng làm điều gì đó tương tự như thế này. Như đã nhận xét ở trên, tôi nghĩ bạn sẽ muốn xây dựng một hình ảnh mới với Dockerfile tùy chỉnh (sử dụng hình ảnh bạn đã lấy làm hình ảnh cơ sở) ADD, sau đó, chứng chỉ của bạn RUN update-ca-certificates. Bằng cách này, bạn sẽ có trạng thái nhất quán mỗi khi khởi động vùng chứa từ hình ảnh mới này.

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

Hãy nói docker buildchống lại rằng Dockerfile đã tạo ra IMAGE_ID. Tiếp theo docker run -d [any other options] IMAGE_ID, vùng chứa bắt đầu bằng lệnh đó sẽ có thông tin chứng chỉ của bạn. Đơn giản và có thể tái tạo.


Thông thường, tôi thích giải pháp docker run -v được đề cập trong các câu trả lời khác. Nhưng giải pháp của bạn cũng hoạt động nếu bạn cần chứng chỉ trong quá trình xây dựng docker. Cảm ơn!
bastian

9
Tôi sẽ cảnh giác khi đặt chứng chỉ vào bất kỳ vùng chứa công cộng nào. Ai đó có thể kéo vùng chứa của bạn và trích xuất chứng chỉ riêng tư của bạn.
skibum55

4
Trong khi đó là một điểm rất tốt, giải pháp trên không công khai bất cứ điều gì. Điều này có nghĩa là thêm các chứng chỉ của riêng bạn vào một hình ảnh được tạo cục bộ và sau đó được sử dụng riêng. Sau đó, bạn có thể đẩy hình ảnh kết quả vào một kho lưu trữ công khai, nhưng đó sẽ là một ý tưởng tồi như bạn đã nói.
shudgston

9
Kể từ khi chứng chỉ là bí mật?
techraf, 21/07/18

3
Vì máy chủ của bạn cần một khóa riêng để khớp với chứng chỉ mà nó đang xuất bản.
John Rix

21

Như đã đề xuất trong nhận xét ở trên , nếu kho chứng chỉ trên máy chủ lưu trữ tương thích với khách, bạn có thể gắn trực tiếp nó.

Trên máy chủ (và vùng chứa) Debian, tôi đã thực hiện thành công:

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

Vậy phải làm gì khi xây dựng hình ảnh Docker trên máy chủ xây dựng? : /
Ewoks

@Ewoks Bạn có thể lưu trữ chứng chỉ của mình trên một số DNS riêng và tải chúng vào bên trong biểu đồ quản lý của bạn và bạn có thể tự động tạo khối lượng trên cụm của mình.
Bassam Gamal

0

Bạn có thể sử dụng đường dẫn tương đối để gắn ổ đĩa vào vùng chứa:

docker run -v `pwd`/certs:/container/path/to/certs ...

Lưu ý đánh dấu phía sau vào pwdđó cung cấp cho bạn thư mục làm việc hiện tại. Nó giả định rằng bạn có certsthư mục trong thư mục hiện tại docker runđược thực thi. Kinda tuyệt vời để phát triển cục bộ và giữ cho thư mục chứng chỉ hiển thị cho dự án của bạn.

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.