Mặc định, dịch vụ Docker chạy trên cổng TCP mở và chấp nhận mọi kết nối từ địa chỉ được chỉ định mà không có lớp bảo vệ xác thực. Cách tiếp cận này tạo ra lỗ hổng lớn về bảo mật, cho phép bất kỳ ai nắm được thông tin IP có thể điều khiển container và hình ảnh. Để đảm bảo an toàn trong môi trường sản xuất, bắt buộc phải kích hoạt cơ chế giao tiếp mã hóa dựa trên chứng chỉ số (TLS).
Tạo Bộ Chứng Chỉ Bảo Mật
Hành động cấu hình yêu cầu quyền quản trị viên (superuser) trên máy chủ.
- Soạn thảo Script Tự Động:
Tạo một tập lệnh với tên `gen-docker-cert.sh` và dán nội dung sau. Lưu ý thay đổi giá trị của biến địa chỉ mục tiêu (`TARGET_HOST`) và mật khẩu khóa bí mật (`CA_SECRET`). Đường dẫn lưu trữ nên được đặt thành `/var/lib/docker-cert`.
#!/bin/bash # Cấu hình đầu vào TARGET_HOST="192.168.1.X" CA_SECRET="MySecurePass123" OUTPUT_PATH="/var/lib/docker-cert" # Xử lý thư mục đích if [ ! -d "$OUTPUT_PATH" ]; then echo "Thư mục $OUTPUT_PATH chưa tồn tại. Đang tạo..." mkdir -p "$OUTPUT_PATH" else echo "Thư mục đã tồn tại. Đang dọn dẹp và khởi tạo lại..." rm -rf "$OUTPUT_PATH" mkdir -p "$OUTPUT_PATH" fi cd "$OUTPUT_PATH" # 1. Xây dựng Trung tâm Cấp phát (CA) openssl genrsa -aes256 -passout pass:$CA_SECRET -out ca-key.pem 4096 openssl req -new -x509 -days 365 -key ca-key.pem -passin pass:$CA_SECRET -sha256 -out ca.pem -subj "/C=US/ST=California/L=SanFrancisco/O=Docker/CN=$TARGET_HOST" # 2. Tạo Khóa Máy chủ (Server Key & Cert) openssl genrsa -out server-key.pem 4096 openssl req -subj "/CN=$TARGET_HOST" -sha256 -new -key server-key.pem -out server.csr cat > extfile-server.cnf <<EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = localhost IP.1 = $TARGET_HOST IP.2 = 127.0.0.1 EOF openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin pass:$CA_SECRET -CAcreateserial -out server-cert.pem -extfile extfile-server.cnf # 3. Tạo Khóa Khách hàng (Client Key & Cert) openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client-user' -new -key key.pem -out client.csr cat > extfile-client.cnf <<EOF extendedKeyUsage = clientAuth subjectAltName = IP:127.0.0.1 EOF openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin pass:$CA_SECRET -CAcreateserial -out cert.pem -extfile extfile-client.cnf # 4. Dọn dẹp file trung gian rm -f client.csr server.csr extfile-server.cnf extfile-client.cnf ca.srl # 5. Đặt quyền truy cập an toàn chmod 0400 ca-key.pem key.pem server-key.pem chmod 0444 ca.pem server-cert.pem cert.pem </code> - Kích hoạt Thực Thi:
Sử dụng câu lệnh sau để cấp quyền thực thi cho tệp script vừa tạo:
chmod +x gen-docker-cert.sh ./gen-docker-cert.sh - Cập nhật Hồ sơ Daemon Docker:
Chỉnh sửa tệp cấu hình `/etc/docker/daemon.json` để thêm các tham số yêu cầu xác thực TLS như bên dưới:
{ "tls": true, "tlsverify": true, "tlscacert": "/var/lib/docker-cert/ca.pem", "tlscert": "/var/lib/docker-cert/server-cert.pem", "tlskey": "/var/lib/docker-cert/server-key.pem" } - Khởi động lại Dịch vụ:
Để áp dụng thay đổi, tải lại cấu hình systemd và khởi động lại daemon:
systemctl daemon-reload systemctl restart dockerVới hệ thống sử dụng snap package, thay thế lệnh bằng:
snap restart docker - Định vị Tập Tin Lên Client:
Copy toàn bộ nội dung thư mục `/var/lib/docker-cert` sang máy trạm (ví dụ: máy tính Windows) nơi bạn sẽ thực hiện thao tác quản lý.
Kết Nối Qua IntelliJ IDEA
Sau khi đã chuẩn bị chứng chỉ phía server, tiến hành thiết lập máy khách như sau:
- Thiết lập Kết nối: Mở phần cấu hình Docker trong IntelliJ IDEA. Tại tab Connections, chọn loại kênh là `TCP` và điền Địa chỉ IP cùng Cổng mặc định (thường là 2376 cho giao thức bảo mật). Quan trọng nhất, chọn chế độ bảo mật là `TLS / SSH` (HTTPS).
- Chỉ Định Chứng Chỉ: Tại mục Certificates, trỏ đến thư mục chứa bộ chứng chỉ đã copy từ server ở bước trên. Đảm bảo chọn đúng folder chứa `ca.pem`, `cert.pem` và `key.pem`.
- Xử Lý Sự Cố: Nếu tình trạng không thể kết nối xảy ra dù cấu hình đã chính xác, hãy kiểm tra xem firewall có chặn cổng 2376 hay không. Ngoài ra, việc đóng hoàn toàn ứng dụng IntelliJ IDEA trước khi mở lại thường giúp loại bỏ cache kết nối cũ đang gây xung đột.