Thiết Lập Xác Thực TLS Cho Daemon Docker Và Tích Hợp Trong IntelliJ IDEA

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ủ.

  1. 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>
  2. 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
  3. 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"
    }
  4. 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 docker

    Với hệ thống sử dụng snap package, thay thế lệnh bằng:

    snap restart docker
  5. Đị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:

  1. 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).
  2. 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`.
  3. 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.

Thẻ: docker-tls intellij-idea certificate-authority openssl docker-security

Đăng vào ngày 27 tháng 5 lúc 02:31