Tôi đã cài đặt SSL cho hơn 500 subdomain ở dạng addon DirectAdmin như thế nào?

Cách đây ít hôm có một khách liên hệ và thuê dịch vụ CaiSSL của tôi. Họ có hơn 500 subdomain và yêu cầu cài SSL cho hơn 500 sub này. Thoạt nhìn qua thì có vẻ khá đơn giản là chỉ cần sử dụng ssl wildcard có trên DirectAdmin là xong. Hoặc sử dụng chứng chỉ ssl wildcard bên ngoài rồi import vào.

Nhưng cái khó ở đây là hơn 500 sub trên được thêm dưới dạng addon thay vì thêm dưới dạng sub. Chính vì vậy bạn không thể cài tự động hoặc import thủ công. Nhìn vào ảnh bên dưới bạn sẽ hình dung được vấn đề.

image 25
Tôi đã cài đặt SSL cho hơn 500 subdomain ở dạng addon DirectAdmin 8

Tôi đã sử dụng script scan và cài ssl tự động của DirectAdmin nhưng đều bị limit. Chính vì vậy tôi xin chia sẻ một giải pháp để bạn thực hiện.

Yêu cầu:

  • Đã có sẵn chứng chỉ ssl wildcard bao gồm (CA, CRT, KEY)
  • Danh sách domain được thêm ở dạng là addon

Các bước thực hiện

Bước 1: Tạo chứng chỉ ssl wildcard

Đầu tiên bạn cần có chứng chỉ SSL wildcard, nếu bạn muốn dùng ssl wildcard miễn phí 90 ngày thì bạn có thể tham khảo bài viết sau. Tôi đã viết sẵn một bài hướng dẫn về tạo SSL online, bạn có thể xem qua tại đây

Bước 2: Backup lại thư mục chứa SSL

Đầu tiên tôi sẽ sao chép lại thư mục users để phòng trường hợp lỗi xảy ra bạn có thể phục hồi lại.

rsync -avh /usr/local/directadmin/data/users/ /root/users-$(date +%Y-%m-%d-%H-%M-%S)

Bước 3: Tạo các file chứng chỉ

Ở bước này bạn hãy ssl vào server DirectAdmin và bạn cho tôi 4 file như sau

  1. ssl.cert: File này sẽ chứa chứng chỉ SSL crt
  2. ssl.key: FIle náy ẽ chứa khoá chứng chỉ private key
  3. ssl.cacert: FIle này sẽ chứa CA
  4. ssl.cert.combined: FIle này sẽ là file chứa crt+CA (File được gộp từ 1+3)

Các file này tôi tạo thư mục và lưu trong /root/ssl. Bạn hãy đặt tên file đúng theo tôi hướng dẫn để không lỗi khi import nhé.

CleanShot 2023 11 09 at 14.22.29
Tôi đã cài đặt SSL cho hơn 500 subdomain ở dạng addon DirectAdmin 9

Bước 4: Tạo script SSL

Trong hướng dẫn này tôi sẽ tạo 2 script để import.

Lưu ý: Trong script này tôi import cho website có tên là webx.vn. Do đó bạn hãy thay bằng tên domain của bạn cho phù hợp nhé.

Import cacert, cert và key

Bạn hãy tạo một file đặt tên bất kỳ với định dạng .sh. Sau đó copy toàn bộ script sau vào (Nhớ thay webx bằng tên miền của bạn)

#!/bin/bash

# Đường dẫn thư mục chứa các file *.webx.vn.key, *.webx.vn.cacert, *.webx.vn.cert
source_dir="/usr/local/directadmin/data/users/web/domains/"

# Đường dẫn thư mục chứa các file ssl.key, ssl.cacert, ssl.cert
ssl_dir="/root/ssl"

# Tên file SSL
ssl_key="ssl.key"
ssl_cacert="ssl.cacert"
ssl_cert="ssl.cert"

# Duyệt qua từng file *.webx.vn.key trong thư mục và thực hiện nhiệm vụ
for webx_key in "$source_dir"*.webx.vn.key; do
    if [ -e "$webx_key" ]; then
        # Rỗng nội dung của file *.webx.vn.key
        > "$webx_key"

        # Copy nội dung của ssl.key vào file *.webx.vn.key
        cat "$ssl_dir$ssl_key" > "$webx_key"

        echo "Đã nhập nội dung của $ssl_key vào $webx_key"
    fi
done

# Duyệt qua từng file *.webx.vn.cacert trong thư mục và thực hiện nhiệm vụ
for webx_cacert in "$source_dir"*.webx.vn.cacert; do
    if [ -e "$webx_cacert" ]; then
        # Rỗng nội dung của file *.webx.vn.cacert
        > "$webx_cacert"

        # Copy nội dung của ssl.cacert vào file *.webx.vn.cacert
        cat "$ssl_dir$ssl_cacert" > "$webx_cacert"

        echo "Đã nhập nội dung của $ssl_cacert vào $webx_cacert"
    fi
done

# Duyệt qua từng file *.webx.vn.cert trong thư mục và thực hiện nhiệm vụ
for webx_cert in "$source_dir"*.webx.vn.cert; do
    if [ -e "$webx_cert" ]; then
        # Rỗng nội dung của file *.webx.vn.cert
        > "$webx_cert"

        # Copy nội dung của ssl.cert vào file *.webx.vn.cert
        cat "$ssl_dir$ssl_cert" > "$webx_cert"

        echo "Đã nhập nội dung của $ssl_cert vào $webx_cert"
    fi
done

echo "Hoàn thành quá trình nhập chứng chỉ SSL vào các file *.webx.vn.key, *.webx.vn.cacert, *.webx.vn.cert"
image
Tôi đã cài đặt SSL cho hơn 500 subdomain ở dạng addon DirectAdmin 10

Import cert.combined

Tiếp theo bạn cũng tạo một file đặt tên bất kỳ với định dạng .sh. Sau đó copy toàn bộ script sau vào (Nhớ thay webx bằng tên miền của bạn)

#!/bin/bash

# Đường dẫn thư mục chứa các file *.webx.vn.cert.combined
source_dir="/usr/local/directadmin/data/users/web/domains/"

# Đường dẫn tới file ssl.cert.combined
ssl_combined="/root/ss/ssl.cert.combined"

# Duyệt qua từng file *.webx.vn.cert.combined trong thư mục và thực hiện nhiệm vụ
for webx_combined in "$source_dir"*.webx.vn.cert.combined; do
    if [ -e "$webx_combined" ]; then
        # Rỗng nội dung của file *.webx.vn.cert.combined
        > "$webx_combined"

        # Copy nội dung của ssl.cert.combined vào file *.webx.vn.cert.combined
        cat "$ssl_combined" > "$webx_combined"

        echo "Đã nhập nội dung của $ssl_combined vào $webx_combined"
    fi
done

echo "Hoàn thành quá trình nhập chứng chỉ SSL vào các file *.webx.vn.cert.combined"

Sau khi thực thi hoàn tất. Chứng chỉ mới sẽ được nhập vào các file một cách tự động và khi đó SSL của bạn đã hoạt động.