Tạo và Triển khai Chứng chỉ TLS/SSL với Trung tâm Xác thực Nội bộ

Để thiết lập kết nối HTTPS an toàn trong môi trường không có tên miền công khai hoặc chứng chỉ từ nhà cung cấp bên ngoài, việc xây dựng một Trung tâm Xác thực (Certificate Authority – CA) nội bộ là giải pháp kỹ thuật phổ biến và hiệu quả. Quá trình này bao gồm hai giai đoạn chính: (1) khởi tạo và ký chứng chỉ CA, và (2) phát hành chứng chỉ máy chủ cho dịch vụ web (Apache hoặc Nginx), đảm bảo xác thực danh tính và mã hóa end-to-end.

1. Thiết lập Trung tâm Xác thực Nội bộ

Trên máy chủ đóng vai trò CA (ví dụ: ca-server.local, IP 192.168.5.101), thực hiện các bước sau:

  1. Cấu hình OpenSSL để bật vai trò CA bằng cách chỉnh sửa tệp cấu hình:

    sudo sed -i 's/^#.*basicConstraints = .*/basicConstraints = CA:TRUE/' /etc/pki/tls/openssl.cnf
  2. Tạo khóa riêng tư và chứng chỉ gốc CA với thời hạn 3 năm:

    sudo /etc/pki/tls/misc/CA -newca <<EOF
    
    123456
    123456
    CN
    beijing
    haidian
    test
    IT
    ca-server.local
    admin@test.local
    
    EOF

    Kết quả sinh ra chứng chỉ gốc tại /etc/pki/CA/cacert.pem và khóa riêng tư tại /etc/pki/CA/private/cakey.pem.

2. Phát hành Chứng chỉ Máy chủ cho Dịch vụ Web

Trên máy chủ ứng dụng (ví dụ: web-server.local, IP 192.168.5.102):

  1. Tạo cặp khóa RSA 2048-bit với mật khẩu bảo vệ:

    openssl genrsa -des3 -out /etc/ssl/private/webserver.key 2048 <<EOF
    123456
    123456
    EOF
  2. Tạo yêu cầu ký chứng chỉ (CSR) với thông tin phù hợp — đặc biệt lưu ý CommonName phải khác với tên CA và phản ánh tên máy chủ đích:

    openssl req -new -key /etc/ssl/private/webserver.key -out /tmp/webserver.csr <<EOF
    123456
    CN
    beijing
    haidian
    test
    IT
    web-server.local
    admin@test.local
    
    
    EOF
  3. Gửi CSR đến CA và ký bằng khóa gốc:

    # Trên ca-server.local
    sudo openssl ca -keyfile /etc/pki/CA/private/cakey.pem \
                     -cert /etc/pki/CA/cacert.pem \
                     -in /tmp/webserver.csr \
                     -out /tmp/webserver.crt \
                     -days 365 <<EOF
    123456
    y
    y
    EOF

    Chứng chỉ đã ký được lưu tại /tmp/webserver.crt.

3. Cấu hình HTTPS trên Apache

Sau khi sao chép chứng chỉ và khóa vào thư mục cấu hình:

sudo cp /tmp/webserver.crt /etc/httpd/conf.d/
sudo cp /etc/ssl/private/webserver.key /etc/httpd/conf.d/

Chỉnh sửa tệp /etc/httpd/conf.d/ssl.conf:

  • SSLCertificateFile /etc/httpd/conf.d/webserver.crt
  • SSLCertificateKeyFile /etc/httpd/conf.d/webserver.key

Mở cổng 443/tcp và khởi động lại dịch vụ:

sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload
sudo systemctl restart httpd

Lưu ý: Khi khởi động, hệ thống sẽ yêu cầu nhập mật khẩu khóa riêng tư — điều này có thể tự động hóa bằng cách loại bỏ mật khẩu khỏi khóa (openssl rsa -in webserver.key -out webserver.key.insecure), tuy nhiên cần cân nhắc rủi ro bảo mật.

4. Cấu hình HTTPS trên Nginx

Sau khi dừng Apache và cài đặt Nginx:

sudo systemctl stop httpd
sudo yum install -y nginx

Cập nhật khối server trong /etc/nginx/conf.d/default.conf:

server {
    listen 443 ssl http2;
    server_name web-server.local;

    root /usr/share/nginx/html;
    index index.html;

    ssl_certificate /etc/httpd/conf.d/webserver.crt;
    ssl_certificate_key /etc/httpd/conf.d/webserver.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
}

Thực thi kiểm tra cấu hình và khởi động:

sudo nginx -t
sudo nginx -s reload

5. Cơ chế Thiết lập Kết nối TLS (Handshake)

Quá trình thiết lập kênh bảo mật TLS 1.2/1.3 diễn ra qua bốn bước logic:

  1. Client Hello: Máy khách gửi danh sách các giao thức mã hóa và nhóm tham số hỗ trợ.
  2. Server Hello + Certificate: Máy chủ chọn phương án phù hợp và gửi chứng chỉ X.509 kèm khóa công khai.
  3. Client Key Exchange: Máy khách xác minh chứng chỉ bằng CA root đã tin cậy, sinh khóa phiên (premaster secret), mã hóa bằng khóa công khai máy chủ và gửi đi.
  4. Change Cipher Spec + Finished: Cả hai bên sinh khóa phiên đầy đủ (master secret), chuyển sang chế độ mã hóa và xác nhận hoàn tất thiết lập.

Ưu điểm của mô hình này là kết hợp cả xác thực danh tính (qua PKI) và hiệu năng cao (sử dụng mã hóa đối xứng cho dữ liệu ứng dụng).

Thẻ: openssl apache nginx tls ssl

Đăng vào ngày 15 tháng 6 lúc 23:55