Bản Ghi DKIM Là Gì?
DKIM (DomainKeys Identified Mail, RFC 6376) thêm chữ ký số vào mọi email mà máy chủ của bạn gửi đi. Chữ ký được tạo bằng khóa riêng tư (private key) nằm trên máy chủ. Khóa công khai (public key) tương ứng được công bố trong DNS dưới dạng bản ghi TXT tại selector._domainkey.yourdomain.com, và máy chủ nhận lấy nó về để kiểm tra rằng thư thực sự đến từ tên miền của bạn và không bị thay đổi trên đường đi.
Selector chỉ là một nhãn do bạn chọn, như default hoặc s1. Nó cho phép một tên miền công bố nhiều khóa cùng lúc, mỗi khóa cho một dịch vụ hoặc một thế hệ khóa. Chữ ký DKIM hợp lệ từ chính tên miền của bạn cũng là thứ giúp thư vượt qua DMARC khi SPF không khớp được, chẳng hạn sau khi thư bị chuyển tiếp.

Bạn Có Cần Tự Tạo Khóa DKIM Không?
Thường là không. Google Workspace tự tạo khóa cho bạn (Admin console, Apps, Google Workspace, Gmail, Authenticate email), còn Microsoft 365 dùng hai bản ghi CNAME, selector1._domainkey và selector2._domainkey, trỏ đến các khóa do Microsoft quản lý. Phần lớn dịch vụ gửi bản tin và email giao dịch cũng cung cấp sẵn bản ghi riêng của họ.
Bạn cần cặp khóa riêng khi bạn tự vận hành máy chủ email, ví dụ Postfix với OpenDKIM hoặc rspamd, hay Exim, hoặc khi một ứng dụng hay relay yêu cầu bạn tải lên khóa riêng tư. Đó là lúc công cụ này phát huy tác dụng.
Advertisement
Cách Tạo Khóa DKIM và Công Bố Bản Ghi
Selector có thể là bất kỳ tên nào gồm chữ cái, chữ số và dấu gạch nối. Selector theo mốc thời gian, như s2026, giúp dễ theo dõi việc xoay vòng khóa.
RSA 2048 bit là lựa chọn đúng cho hầu hết mọi người. Cặp khóa được tạo trong trình duyệt ngay khi trang tải xong, và tạo lại khi bạn đổi loại khóa.
Tải xuống và cài đặt nó trên máy chủ email. Khóa không được lưu ở bất kỳ đâu, nên nếu làm mất, bạn sẽ cần một cặp khóa mới.
Thêm bản ghi TXT với host selector._domainkey và giá trị đã tạo, gửi một email cho chính bạn rồi kiểm tra bằng công cụ kiểm tra DKIM.
Cú Pháp Bản Ghi DKIM
Bản ghi khóa DKIM là danh sách các cặp tag=value phân tách bằng dấu chấm phẩy. Chỉ p= là bắt buộc, nhưng bạn cũng nên công bố v và k.
Xác định bản ghi là khóa DKIM. Nếu có, nó phải đứng đầu.
Thuật toán của khóa. Nếu thiếu tag này, mặc định là rsa.
Khóa công khai ở dạng base64. p= để trống nghĩa là khóa đã bị thu hồi và các chữ ký tạo bằng khóa đó sẽ thất bại.
Yêu cầu máy chủ nhận coi tên miền đang thử nghiệm DKIM. Hãy gỡ nó khi chữ ký đã được xác minh.
Chế độ nghiêm ngặt: định danh i= trong chữ ký phải dùng chính xác tên miền d=, không phải subdomain của nó.
Giới hạn thuật toán băm (h=sha256) hoặc dịch vụ mà khóa dùng cho (s=email). Hầu hết bản ghi bỏ qua chúng.
Advertisement
So Sánh RSA 2048, 1024, 4096 và Ed25519
RSA 2048 bit: kích thước được khuyến nghị. RFC 8301 nói người ký nên dùng ít nhất 2048 bit. Giá trị TXT dài khoảng 410 ký tự.
RSA 1024 bit: vẫn được xác minh và là mức tối thiểu máy chủ nhận chấp nhận, nhưng yếu theo tiêu chuẩn ngày nay. Chữ ký từ khóa ngắn hơn không được coi là hợp lệ. Chỉ dùng nếu nhà cung cấp DNS của bạn không lưu được giá trị dài hơn.
RSA 4096 bit: máy chủ nhận bắt buộc phải xác minh được khóa đến 4096 bit, nhưng giá trị dài khoảng 750 ký tự, và một số bảng điều khiển DNS cùng hệ thống cũ xử lý nó không tốt. Nó cũng không tốt hơn 2048 là bao.
Ed25519: khóa hiện đại, ngắn hơn nhiều (cả bản ghi chỉ khoảng 66 ký tự, RFC 8463). Chưa phải máy chủ nhận nào cũng xác minh được, nên hãy ký thêm bằng khóa RSA dưới một selector thứ hai.
Vì Sao Bản Ghi DKIM Bị Chia Thành Nhiều Chuỗi?
Một chuỗi TXT chỉ chứa được tối đa 255 ký tự, trong khi giá trị DKIM 2048 bit dài hơn thế. DNS giải quyết bằng cách lưu giá trị thành nhiều chuỗi trong dấu ngoặc kép, và máy chủ nhận sẽ ghép chúng lại.
Hầu hết bảng điều khiển DNS chấp nhận nguyên giá trị dài và tự chia giúp bạn. Amazon Route 53 và zone file BIND cần bạn tự nhập dạng đã chia, đó chính là thứ nút zone file cung cấp (trong Route 53, chỉ dán các chuỗi trong ngoặc kép, trên một dòng). Đừng thêm khoảng trắng hay xuống dòng bên trong khóa, và đừng tách mỗi nửa thành một bản ghi riêng.
Advertisement
Cài Đặt Khóa Trên Máy Chủ Email
Lưu khóa riêng tư thành default.private (với selector của bạn), chỉ cho phép dịch vụ ký đọc nó, rồi trỏ trình ký tới tệp đó. Ví dụ OpenDKIM cho example.com với selector default:
sudo mkdir -p /etc/opendkim/keys/example.com
sudo mv default.private /etc/opendkim/keys/example.com/
sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/default.private
sudo chmod 600 /etc/opendkim/keys/example.com/default.privatedefault._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default.private*@example.com default._domainkey.example.comopenssl genrsa -out default.private 2048
openssl rsa -in default.private -pubout -out default.publicopendkim-genkey -b 2048 -d example.com -s defaultCách Xoay Vòng Khóa DKIM
Tạo cặp khóa mới dưới một selector mới, ví dụ s2027.
Công bố bản ghi TXT mới và chờ đến khi nó phân giải được ở mọi nơi.
Chuyển máy chủ email sang ký bằng selector mới.
Giữ bản ghi cũ khoảng một tuần, cho đến khi thư được ký bằng nó đã được gửi đến và kiểm tra xong.
Sau đó xóa bản ghi cũ, hoặc công bố nó với
p=để trống để thu hồi khóa.
Advertisement
Thêm Công Cụ Xác Thực Email
DKIM là một trong ba bản ghi mà máy chủ nhận kiểm tra. Hãy hoàn thiện cả bộ:
Tra cứu khóa đã công bố theo selector và kiểm tra cú pháp cùng kích thước.
Tạo bản ghi SPF cho các nhà cung cấp của bạn kèm bộ đếm lần tra cứu trực tiếp.
Tạo chính sách DMARC dựa trên kết quả SPF và DKIM của bạn.
Xem một email thực tế có vượt qua DKIM, SPF và DMARC hay không.