DKIM là gì và cách bật chữ ký cho tên miền
Hướng dẫn Email Hosting · cập nhật 03/08/2026
DKIM là chữ ký số gắn vào phần header của mỗi thư gửi đi, để máy chủ nhận xác nhận thư đúng là của tên miền bạn và nội dung không bị sửa dọc đường. Bật DKIM cho một tên miền mất khoảng 15 phút, cộng thời gian chờ DNS lan.
Bạn cần chữ ký này khi thư gửi đi hay vào mục spam dù đã khai đủ bản ghi nguồn gửi, hoặc khi muốn đủ điều kiện khai DMARC sau này. Gmail và Yahoo từ tháng 2/2024 bắt buộc bên gửi số lượng lớn phải có chữ ký DKIM, thiếu là thư bị từ chối thẳng.
- Bật DKIM cho tên miền trong bảng điều khiển email và lấy khoá công khai.
- Tạo một bản ghi TXT trong DNS ở đúng tên selector.
- Chờ DNS lan rồi gửi một thư thử.
- Mở header thư nhận được để đọc kết quả xác thực.
Cần quyền quản trị email để bật ký, và quyền sửa DNS của tên miền để khai khoá công khai. Thiếu một trong hai thì chữ ký được tạo ra nhưng không máy chủ nào kiểm được, kết quả trả về là permerror.
Chữ ký DKIM được tạo và kiểm ra sao
Máy chủ gửi băm phần header cùng phần thân thư rồi mã hoá đoạn băm đó bằng khoá riêng, kết quả gắn vào thư dưới dạng dòng DKIM-Signature. Máy chủ nhận lấy khoá công khai từ DNS của tên miền gửi, giải đoạn mã đó ra và băm lại thư vừa nhận. Hai đoạn băm khớp nhau thì thư nguyên vẹn.
Khoá riêng nằm trên máy chủ gửi và không bao giờ rời khỏi đó. Khoá công khai nằm công khai trong DNS, ai tra cũng thấy, nhưng có nó cũng không tạo được chữ ký giả vì hai khoá làm hai việc khác nhau. Đây là điểm khiến DKIM khó giả mạo hơn cách kiểm dựa trên địa chỉ IP.
Các thành phần trong một dòng DKIM-Signature
Mở header gốc của một thư đã ký, bạn thấy một dòng dài gồm nhiều cặp chữ cái và giá trị ngăn bằng dấu chấm phẩy. Mỗi cặp nói một việc, và ba cặp quan trọng nhất là d, s và bh vì máy chủ nhận dựa vào đó để tìm khoá và so kết quả.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=tenmiencuaban.com; s=mail; t=1756280400;
h=from:to:subject:date; bh=47DEQpj8HBSa...; b=Xq3vK9pL...
| Thẻ | Chứa gì | Dùng để làm gì |
|---|---|---|
| d= | Tên miền đã ký thư | Máy chủ nhận biết tra khoá ở DNS của tên miền nào |
| s= | Tên selector, thường là mail hoặc default | Chỉ ra đúng bản ghi khoá trong DNS khi tên miền có nhiều khoá |
| a= | Thuật toán ký, phổ biến là rsa-sha256 | Máy chủ nhận biết dùng cách nào để kiểm lại |
| h= | Danh sách các trường header được đưa vào ký | Xác định phạm vi được bảo vệ, sửa trường ngoài danh sách này thì chữ ký vẫn đúng |
| bh= | Đoạn băm của phần thân thư | So lại để biết nội dung có bị sửa không |
| b= | Chính chữ ký, đã mã hoá bằng khoá riêng | Giải bằng khoá công khai để đối chiếu |
Thẻ h= hay bị bỏ qua nhưng đáng chú ý: chỉ những trường có tên trong đó mới được bảo vệ. Một số danh sách thư tự thêm dòng vào cuối thư, đó là lý do chữ ký hỏng khi thư đi qua danh sách trung gian dù không ai cố tình sửa gì.
Cách bật DKIM và khai khoá công khai vào DNS
Bốn bước dưới đây làm ở hai chỗ khác nhau: hai bước đầu trong bảng điều khiển email, hai bước sau trong trang quản lý DNS. Làm đúng thứ tự vì phải bật ký trước thì hệ thống mới sinh ra khoá để đem đi khai.
1. Bật ký cho tên miền trong bảng điều khiển
Trên Plesk, vào Mail rồi Mail Settings, chọn tên miền và đánh dấu ô bật ký thư gửi đi. Hệ thống sinh cặp khoá ngay sau khi lưu, giữ khoá riêng trên máy chủ và đưa bạn phần khoá công khai để đem khai vào DNS.
2. Chép khoá công khai và tên selector
Khoá công khai là một chuỗi dài dạng v=DKIM1; k=rsa; p=MIGfMA0GCS.... Chép nguyên chuỗi, không thêm bớt khoảng trắng hay xuống dòng. Ghi lại luôn tên selector đi kèm, thường là mail hoặc default, vì bước sau cần tên này để đặt đúng chỗ.
3. Tạo bản ghi TXT theo đúng tên selector
Vào trang quản lý DNS, thêm bản ghi loại TXT. Ô host điền theo mẫu selector._domainkey, ví dụ selector là mail thì điền mail._domainkey. Ô giá trị dán chuỗi khoá công khai. Chỗ bấm cụ thể ở bài hướng dẫn quản lý DNS cho tên miền.
4. Chờ lan rồi tra lại bằng dòng lệnh
Bản ghi cần 15 phút tới 24 giờ để lan, tuỳ giá trị TTL. Tra lại bằng lệnh sau, thay tên selector và tên miền của bạn vào:
nslookup -type=txt mail._domainkey.tenmiencuaban.com
Kết quả phải trả về đúng chuỗi bắt đầu bằng v=DKIM1. Máy vẫn trả bản cũ thì xoá bộ nhớ đệm theo bài xoá cached DNS trên máy tính rồi tra lại.
Đọc kết quả xác thực chữ ký trong header thư
Gửi một thư sang một hộp thư khác rồi mở phần header gốc. Dòng Authentication-Results ghi kết quả bằng một từ khoá đứng sau chữ dkim=. Mỗi từ khoá ứng với một tình huống riêng và chỉ ra luôn khâu nào hỏng, không phải dò lại từ đầu.
| Kết quả | Nghĩa là | Việc cần làm |
|---|---|---|
| dkim=pass | Chữ ký hợp lệ, nội dung nguyên vẹn | Không phải làm gì thêm |
| dkim=fail | Chữ ký có nhưng không khớp | Thư bị sửa dọc đường, hoặc khoá trong DNS không phải cặp của khoá đang ký |
| dkim=none | Thư không mang chữ ký nào | Chưa bật ký ở bảng điều khiển email |
| dkim=permerror | Không tra được khoá công khai | Bản ghi TXT sai tên host, thiếu phần _domainkey |
| dkim=temperror | Tra DNS hỏng tạm thời | Chờ rồi gửi lại một thư nữa để kiểm |
Các lỗi hay gặp khi khai chữ ký DKIM
Bốn lỗi dưới đây gặp gần như ở mọi lần khai đầu. Điểm chung là bản ghi trông vẫn đúng khi nhìn bằng mắt trên trang quản lý DNS, chỉ khi đọc header thư mới lộ ra khâu hỏng.
Chuỗi khoá bị cắt mất một đoạn. Khoá công khai dài hơn 255 ký tự, một số trang quản lý DNS cắt bớt khi dán vào. Kết quả là permerror. Cách sửa là chia chuỗi thành nhiều đoạn trong ngoặc kép, hoặc chuyển sang khoá 1024 bit thay vì 2048 bit.
Ô host thiếu phần _domainkey. Chỉ điền tên selector là bản ghi nằm sai chỗ và không máy chủ nào tìm ra. Phải điền đủ dạng selector._domainkey.
Trang quản lý DNS tự thêm tên miền vào cuối ô host. Một số nơi tự nối, gõ tay tên miền vào nữa là thành mail._domainkey.tenmien.com.tenmien.com. Tra bằng lệnh nslookup ở bước 4 là thấy ngay.
Chữ ký hỏng sau khi thư qua danh sách chuyển tiếp. Máy chủ trung gian thêm dòng vào cuối thư nên phần băm nội dung không còn khớp. Đây là hạn chế của chính chuẩn DKIM, không sửa được ở phía bạn, và cũng là lý do nên có thêm lớp kiểm nguồn gửi.
DKIM đứng ở đâu giữa ba lớp xác thực email
Ba chuẩn SPF, DKIM và DMARC trả lời ba câu hỏi khác nhau và cần cả ba mới đủ. Bảng dưới chỉ nêu vai trò từng lớp, phần đi sâu vào cách khai nằm ở bài riêng của mỗi lớp.
| Lớp | Trả lời câu hỏi | Kiểm bằng cách nào |
|---|---|---|
| SPF | Máy vừa gửi thư này có được phép gửi thay tên miền không | So địa chỉ IP máy gửi với danh sách trong DNS |
| DKIM | Thư có đúng của tên miền đó và có bị sửa dọc đường không | Giải chữ ký bằng khoá công khai rồi băm lại thư |
| DMARC | Khi hai lớp trên không đạt thì máy chủ nhận xử lý ra sao | Đọc chính sách chủ tên miền công bố trong DNS |
Hai lớp SPF và DKIM chạy độc lập, hỏng lớp này không ảnh hưởng lớp kia. Đó là chỗ mạnh: thư qua danh sách chuyển tiếp làm hỏng chữ ký thì lớp kiểm nguồn gửi vẫn còn đỡ, cách khai lớp đó ở bài SPF record là gì.
Có cả hai lớp chạy đều thì khai tiếp DMARC. Đặt chính sách ở mức p=none trước để nhận báo cáo mà chưa chặn thư nào, xem báo cáo vài tuần rồi mới siết dần lên mức cách ly hoặc từ chối.