首页 > 其他分享 >DNS 系列4 --- DKIM

DNS 系列4 --- DKIM

时间:2023-02-12 17:46:16浏览次数:167  
标签:记录 --- 域名 DNS TXT com DKIM

一、承上启下

1. DNS 系列1 --- 记录类型

2. DNS 系列2 --- SPF

3. DNS 系列3 --- SRV

二、DKIM

1. 概念

域名密钥识别邮件 (DKIM) 是一种电子邮件验证方法,有助于防止垃圾邮件发送者和其他恶意方冒充合法域名。

与SPF一样,DKIM也是一种TXT DNS记录,或者说它利用TXT DNS记录来实现域名校验。

所有电子邮件地址都有一个域名,即地址中"@"符号之后的部分。垃圾邮件发送者和攻击者在发送电子邮件时可能试图冒充域名,以进行网络钓鱼攻击或其他骗局。

假设李四为example.com工作并掌握公司机密信息,张三不是example.com的员工但他希望从李四那里得到example.com的机密信息,于是张三使用假冒的[email protected]给李四发邮件,他可以给李四发送一封看似来自"[email protected]"的电子邮件,以骗取李四的信任,让李四以为张三也在为example.com工作。

DKIM与发送方策略框架(SPF)和基于域名的消息身份验证、报告和一致性(DMARC)一起,使得攻击者以这种方式冒充域名的难度大大增加。没有通过DKIM和SPF的电子邮件会被标记为“垃圾邮件”,或者不被电子邮件服务器投递。如果example.com为其域名设置了DKIM、SPF和DMARC,那么李四甚至可能永远不会看到张三的恶意电子邮件,因为它要么进入了李四的垃圾邮件文件夹,要么被电子邮件服务器完全拒绝。

2. DKIM组成

DKIM 有两个主要方面:

a. DKIM 记录,它存储在域名的Domain Name System(DNS)记录中;

b. DKIM 标头,它附加在所有来自该域名的电子邮件中。

3. 工作原理

DKIM基于私钥加密的数字签名方案,它使用一对公钥和私钥来确保发送方身份。具体流程如下:

(1) 邮件服务提供商(比如example.com)需要生成一对公钥和私钥,然后将公钥维护到一个公开的DNS记录中,这个DNS记录就是DKIM;

(2) 发送方在发信时使用私钥加密邮件中的必要属性(包括发件人、收件人和标题等)并生成加密字符串,这个加密字符串就是数字签名,该数字签名将被附着在邮件标头中,这个过程叫签发;

(3) 收件人在收到邮件之后,首先查询发件人所属域名的DNS记录,获取其中的DKIM公钥,使用公钥来解密加密字符串,然后与相关属性进行比对,这个过程叫做验签:

a. 如果无法解密加密字符串,说明公钥私钥不匹配,邮件非法;

b. 如果解密之后有任一属性值与邮件的属性值不匹配,则说明邮件被修改过,邮件非法。

4. 生成公钥私钥

(1) 生成私钥

使用OpenSSL生成私钥,1024位是DKIM要求的最小长度:

openssl genrsa -out dkim-private.pem 1024

(2) 生成公钥

openssl rsa -in dkim-private.pem -out dkim-public.pem -pubout

5. DKIM记录

(1) TXT记录

上文提到DKIM记录是一种TXT记录,所以DKIM首先需要遵循TXT记录的格式:

[FQDN] IN TXT [任意字符串]

FQDN:需要设定为DKIM指定的域名;

任意字符串:需要填写DKIM的版本、公钥和加密算法等信息。

(2) FQDN --- DKIM名称

与其他TXT记录不同,DKIM的FQDN需要遵循其特殊的格式:

[selector]._domainkey.[domain]

a. selector: 是由域名使用的电子邮件服务提供商发布的专门值,但是也可以是当前的日期、域名的代称,或者其他特定的值。

需要注意的是,[selector]._domainkey就是hostname,以阿里云DNS解析为例,需要将hostname填写到“主机记录”中:

b. domain: 是需要设定DKIM的域名。

我们为域名example.com配置DKIM记录:

20230212._domainkey.example.com //Hostname是20230212._domainkey

或者如果我们使用Apache James:

james3._domainkey.example.com

(3) TXT值

DKIM的TXT记录值同样需要遵循DKIM的特定格式:

v=DKIM1; k=rsa; p=[Public Key]

v=DKIM1 表示这个TXT记录应当被解释为DKIM;

k=rsa表示这个DKIM使用的加密算法是rsa算法;

Public Key就是的公钥。这里的TXT值对应阿里云的域名解析的“记录值”:

(4) TTL

TTL代表生存时间(以秒为单位),它表示该记录在需要刷新之前被视为有效的时长。DKIM 记录的TTL一般为几分钟。

三、验证配置

TXT类型的DNS记录配置完成之后,需要24小时才能在全网生效,本地网络可能不会耗时这么长。

1. dig验证

dig +short [selector]._domainkey.[domain] TXT

该命令会返回TXT的值,也即是阿里云的“记录值”。

2. 在线工具验证

https://easydmarc.com/tools/dkim-lookup

四、参考

1. 官方

https://datatracker.ietf.org/doc/html/rfc6376/

2. 其他

https://james.apache.org/howTo/dkim.html

https://support.dnsimple.com/articles/dkim-record/

https://www.cloudflare.com/learning/dns/dns-records/dns-dkim-record/

https://robertmunn.com/blog/configuring-dkim-and-spf-for-apache-james/

标签:记录,---,域名,DNS,TXT,com,DKIM
From: https://www.cnblogs.com/eagle6688/p/17110562.html

相关文章

  • DNS 系列5 --- DMARC
    一、承上启下1. DNS系列1---记录类型2. DNS系列2---SPF3. DNS系列3---SRV4. DNS系列4---DKIM二、参考https://www.cloudflare.com/learning/dns/dns......
  • Linux基础命令-history历史记录
    前言    在工作中,经常会需要多次重复某一个命令,或者需要查看之前执行过什么命令,那么都少不了history这个命令,下面一起来看看吧。一、history命令介绍    hi......
  • Linux基础命令-date设置时间
    前言    服务器上的时间往往要用到这个命令,而date命令能修改的不仅仅是时间,还可以修改时区,同步大厂的时间等。一、date命令的介绍    date命令来自于英文单......
  • Linux文件管理命令(4)-cat查看文件内容
     前言    cat主要是用来查看文件内容的,一般也搭配管道符一起来使用,比如有时候要计算文件有多少行或者要截取里面的内容,都还是很实用的。一、cat命令介绍   ......
  • Linux文件管理命令-head显示文件开头的内容
    前言    head命令在日常比较常用的一个命令,如果只想查看文件的前几行内容,就可以用这个命令,还可以自定义选择要查看多少行,一起来看看这个命令的使用吧。一、head命令......
  • 双麦阵列拾音束降噪模块A-68连接应用说明和强噪音下测试效果
    上一篇讲了A-68的双麦阵列拾音束原理,有兴趣的朋友可以到我的空间主题查看上一篇,这一次我们来讲一下A-68模块的功能和应用连接,由于论坛不支持音视频格式,所以文章末尾附上A-68......
  • 0元白嫖ChatGPT只要10秒钟-亲测无限制
    需求背景前面发了一篇《全网最详细的ChatGPT注册-你和ChatGPT的距离只差这篇文章》,短短几个小时,阅读量就上1000了。搭着chatGPT的热度,我也蹭了一些流量。在前面的文章中,注册......
  • 纯钧chunjun的http-x插件修复
    简介chunjun是一款基于flink的开源数据同步工具,官方文档,其提供了很多flink官方未提供的插件供大家来使用,特别是达梦插件在国产化环境中很方便!本次介绍的是chunjun中的一......
  • C语言填空:奇数分之一的和,直到小于1e-6
    #include<stdio.h>//求s=1+1/3+1/5+....之和,直到某一项的值小于10的-6次方时停止累加main(){floata=1,【1】,b,c;while(【2】){s=s+【3】......
  • Tomcat漏洞(CVE-2017-12615)复现
     漏洞原理:漏洞原理:Tomcat配置文件/conf/web.xml配置了可写(readonly=false),导致可以使用PUT方法上传任意文件,攻击者将精心构造的payload向服务器上传包含任意代码的JSP......